【问题标题】:excel cell coloringexcel单元格着色
【发布时间】:2011-08-19 08:39:07
【问题描述】:

我正在使用 c# 为 excel 文件的特定单元格着色。 我正在使用

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(destPath);
 Worksheet ws = wb.Worksheets[1];
ws.Cells[row, clmn].Interior.Color = XlRgbColor.rgbBlack;

为单元格着色..但这不起作用.. 它在我为单元格着色的最后一行给出了一个例外

"Exception from HRESULT: 0x800A03EC"

我无法修复异常 谁能帮帮我..

【问题讨论】:

  • 您确定要查找的是wb.Worksheets[1] 而不是wb.Worksheets[0]? Excel 默认编号工作表以 0 开头。此外,Cells[row, clmn] 是否有任何内容?如果不是,您可能在设置格式时遇到问题; Excel 经常使用稀疏数组存储,这意味着在将内容放入其中之前,特定单元格并不真正存在。

标签: c# colors cell


【解决方案1】:

它可能不起作用,因为工作表受到保护。

您可以通过以下方式查看:

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(destPath);
Worksheet ws = wb.Worksheets[1];

bool wasProtected = ws.ProtectContents;
if (wasProtected == true)
{
    // unprotect the worksheet
}
else
{
    ws.Cells[row, clmn].Interior.Color = XlRgbColor.rgbBlack;
}

...

if (wasProtected == true)
{
    // protect back the worksheet
}

【讨论】:

  • 你不需要指定“== true”,你只需要指定 (wasProtected) 或者如果你想检查 false (!wasProtected)。仅供参考,因为它可以节省时间。
【解决方案2】:

在我之前的项目中,我使用以下 sn-p 对 Excel 中的单元格进行着色:

ws.Cells[row, clmn].Interior.Color = System.Drawing.ColorTranslator.ToWin32(Color.Black);

【讨论】:

  • 不,它不起作用.. 它给出了一个异常“HRESULT 异常:0x800A03EC”
  • 检查row和clmn是否大于0
【解决方案3】:

我测试了您在新 Excel 文件上的代码,它运行良好。但是,当使用行值 0 进行测试时,我能够重现该错误。所以问题可能出在行和 clmn 值上。否则,它必须是特定于您的 Excel 文件的东西……可能是受保护的单元格或类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2014-07-31
    • 2013-09-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    相关资源
    最近更新 更多