如何使用NetOffice更改Excel行的行颜色?

3
我遇到了一个简单的问题,但是我无法解决它。
我有一个Excel文档,我使用NetOffice API对其进行处理。这个可以正常工作,但是我想在处理完后更改行颜色,使范围内的每一行具有相同的颜色。
使用以下代码出现COMException(HRESULT:0x800A03EC):
foreach (Excel.Range row in rg)
{
    //do the processing...
    ...
    row.Interior.Color = XlRgbColor.rgbAliceBlue;
}

我还搜索了这个HRESULT并尝试通过在Open()方法中将readOnly设置为false,将editable和corruptLoad设置为true来解决问题。但是没有成功。我还尝试将interactive属性设置为true,并以不同格式(.xls、.xlsx)保存Excel文件,但仍然没有成功。
我发现Excel文件/工作簿受到保护。因此,我尝试取消保护ActiveWorkbook,如下所示:
app.ActiveWorkbook.Unprotect();

但是这也出了问题,抛出了一个COMException异常,表示不能分配Workbook对象的unprotect属性。
我希望有人可以帮助我解决这个问题。
提前感谢,
Cordell
1个回答

2
在打开工作簿时,将只读参数设置为false,并传递Excel文件的密码。
Excel.Workbook workBook = excelApplication.Workbooks.Open(sMyExcelPath,0,
                                                 False,5,123,123,True,XlPlatform.xlWindows,"\t",False,False,0,True,1,0)

你可以使用以下代码来改变Excel行的颜色:

您可以使用以下代码更改Excel行的行颜色。

Excel.Worksheet workSheet = workBook.Worksheets(1);

workSheet.Rows.Interior.Color = XlRgbColor.rgbAliceBlue;

如需设置边框,请尝试以下代码:

    workSheet.Rows.Borders(XlBordersIndex.xlInsideHorizontal).LineStyle = XlLineStyle.xlDouble;
    workSheet.Rows.Borders(XlBordersIndex.xlInsideHorizontal).Weight = 4;
    workSheet.Rows.Borders(XlBordersIndex.xlInsideHorizontal).Color = ToDouble(Color.Black);

上述代码可以改变Excel表格的所有行的颜色。如果您只想要更改使用范围的颜色,则可以尝试下面的代码。
workSheet.UsedRange.Interior.Color = XlRgbColor.rgbAliceBlue;

要设置边框,请尝试以下代码:

    workSheet.UsedRange.Borders(XlBordersIndex.xlInsideHorizontal).LineStyle = XlLineStyle.xlDouble;
    workSheet.UsedRange.Borders(XlBordersIndex.xlInsideHorizontal).Weight = 4;
    workSheet.UsedRange.Borders(XlBordersIndex.xlInsideHorizontal).Color = ToDouble(Color.Black);

我在测试中使用了密码保护的Excel文件,并且它可以使用我在答案中提到的解决方案正常工作。请告诉我它是否有效? - Jignesh Thakker
嗨Jignesh,它不起作用。正如我在问题中提到的那样,我从一开始(1月22日)就将readOnly参数设置为false。:( - cordellcp3
我更新了答案。你需要在打开工作簿方法中传递Excel文件的密码。在open方法中有两个参数:password和writePassword。我已经为我的Excel文件传递了123的值。 - Jignesh Thakker
谢谢您的回答,但即使加上密码也不起作用 :( 仍然显示Workbook对象的unprotect属性无法分配。我采用了不同的方法处理它,并编写了日志文件,这很好用。 - cordellcp3
如果您在Open方法中传递了密码,则无需调用app.ActiveWorkbook.Unprotect()方法,因为如果文件受密码保护,则Unprotect方法需要密码参数。我很高兴您用不同的方法处理并工作了该文件。请分享您的方法,以便其他人也可以解决相同的问题。但对于我来说,上述方法(答案)在我的这一边运行良好。 - Jignesh Thakker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接