我使用数据库中的数据填充ListObject,并且在插入数据之前预先格式化来自VarChar(& similar)的TextColumns作为Text。
这很有效,但是一些受影响的单元格现在显示“Number Stored As Text”错误。
答案https://stackoverflow.com/a/21869098/1281429正确地抑制了错误,但需要循环遍历所有单元格(因为无法对范围执行操作)。
不幸的是,对于大范围,这是无法接受的缓慢。
(n.b。 - 如果你在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应用程序级加载项。
答案 0 :(得分:0)
只是为了确定 - 您是从数据库转到Excel导出?您是在创建新的干净电子表格还是覆盖现有电子表格中的现有数据?
如果要覆盖现有电子表格中的数据,我首先要清除列并在Excel中格式化列(当然是以编程方式)。旧数据和进入同一空间的新数据可能会导致类型问题。
类似于:
thisExcel.xlWorksheet.Range[yourrange].Value = ""
thisExcel.xlWorksheet.Range[yourrange].NumberFormat = choseyourformat
http://msdn.microsoft.com/en-us/library/office/ff196401(v=office.15).aspx
你应该可以将它应用到更大的区域。