【发布时间】:2014-09-07 04:26:06
【问题描述】:
我正在使用来自数据库的数据填充 ListObject,并在插入数据之前将来自 VarChar(和类似)的 ListColumns 预先格式化为 Text。
这很好用,但一些受影响的单元格现在显示“数字存储为文本”错误。
答案https://stackoverflow.com/a/21869098/1281429 正确地抑制了错误,但需要遍历所有单元格(因为不可能对范围执行操作)。
不幸的是,对于大范围来说,这慢得令人无法接受。
(n.b. - 如果您在 Excel 中手动操作,速度很快)
这是 C# 中的代码 sn-p(针对特定列):
var columnDataRange = listColumn.DataBodyRange
var cells = columnDataRange.Cells;
for (var i = 1; i < cells.Count; i++)
{
InteropExcel.Range cell = cells[i, 1];
if (cell.Count > 1) break;
if (cell.Errors != null)
{
var item = cell.Errors.Item[InteropExcel.XlErrorChecks.xlNumberAsText];
item.Ignore = true;
}
}
有人知道更快的方法吗?
(或者,更一般地说,一种更快的方法来遍历一个范围内的单元格?)
希望有人能提供帮助 - 谢谢。
编辑:这是 Excel 2010/2013 的 VSTO 应用程序级插件。
【问题讨论】:
-
这是只能在代码中完成的事情吗?您可以在 Excel 本身中预先执行此操作吗?
-
嗨@rhughes。并非如此:这是我为最终用户构建的 VSTO 插件的一部分,用于以托管方式从数据库中获取数据。
-
是的,这很常见。有多种方法可以处理这个问题,包括遍历所有单元格(非常慢!)。我通常使用的只是 whole 范围 1 的倍数。我将数字 1 保存在电子表格的某处,复制、粘贴特殊 -> Operation=Multiply。当然,全部通过代码,你根本不需要使用 Select
-
嗨@PetLahev。我试图抑制错误,而不是相乘,所以我不太确定你的评论有什么帮助。我误会你了吗?
标签: c# excel performance vsto