【发布时间】:2019-07-16 13:54:03
【问题描述】:
我有一个庞大的数据集,我想将其写入 Excel,并且需要根据业务逻辑对行进行条件格式化。因此,对于数据插入部分,我使用数据数组来填充 Excel,它的工作速度非常快。但是,在格式化行时,我发现性能严重下降。仅进行格式化几乎需要两倍以上的时间。
到目前为止,我正在对单个行应用格式并循环遍历一系列行。但是,我想知道是否可以一次选择多行并将批量格式化选项应用于这些行: 这是我现在拥有的:
foreach (int row in rowsToBeFormatted)
{
Excel.Range range = (Excel.Range)xlsWorksheet.Range[xlsWorksheet.Cells[row + introFormat, 1], xlsWorksheet.Cells[row + introFormat, 27]];
range.Font.Size = 11;
range.Interior.ColorIndex = 15;
range.Font.Bold = true;
}
这里是我如何尝试在范围中选择多行并应用格式的演示:
string excelrange = "A3:AA3,A83:AA83,A88:AA88,A94:AA94,A102:AA102,A106:AA106,A110:AA110,...." (string with more than 3000 characters)
xlsWorksheet.get_Range(excelrange).Interior.Color = Color.SteelBlue;
但是,我在执行代码时收到以下错误:
HRESULT 异常:0x800A03EC
并且内部异常中没有任何内容。有什么想法可以达到预期的效果吗?
【问题讨论】:
-
尝试输入一个数字而不是枚举,看看是否有效。即
.Interior.Color = 11829830;代替.Interior.Color = Color.SteelBlue; -
那不起作用..得到了同样的例外。 @shahkalpesh
-
请用分号代替逗号。有时(取决于区域设置)它的工作方式有点奇怪。所以
"A3:AA3;A83:AA83;A88:AA88;A94:AA94;A102:AA102;A106:AA106;A110:AA110" -
那也没有帮助.. @smartobelix
-
是的,这是有道理的。将此限制为 3000 个字符的限制作为答案。它也会帮助其他人。此外,您的代码没有长字符串范围,这无助于人们模拟您看到的错误。
标签: c# .net excel office-interop