性能 – 在单元格中循环 – 在Excel VSTO中用C#压缩“存储为文本的编号”警告

我使用来自数据库的数据填充ListObject,并在插入数据之前对来自VarChar(&similar)的ListColumns进行格式化。

这个效果很好,但现在一些受影响的单元格显示“Number Stored As Text”错误。

答案https://stackoverflow.com/a/21869098/1281429正确地抑制错误,但需要循环所有单元格(因为它是不可能执行范围上的操作)。

不幸的是,对于大范围,这是不可接受的缓慢

(NB – 如果你在Excel中手动执行,它是闪电般的)

这是C#中的代码片段(针对特定的列):

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导出? 您是在创build新的干净电子表格还是覆盖现有电子表格中的现有数据?

如果您要覆盖现有电子表格中的数据,我首先要清除列并在Excel中格式化这些列(当然是编程)。 旧数据和新数据进入同一空间可能导致types问题。

所以像这样: thisExcel.xlWorksheet.Range[yourrange].Value = "" thisExcel.xlWorksheet.Range[yourrange].NumberFormat = choseyourformat http://msdn.microsoft.com/en-us/library/office/ff196401(v = office.15)的.aspx

你应该可以将它应用到更大的区域。