我有一个要导出到Excel电子表格的对象列表。我无法使用ClosedXML,因为我需要97-2003 XLS文件。因此,我坚持使用Excel.Interop
。
逐个单元填充工作表会导致糟糕的性能,因此我决定将对象列表转换为二维字符串数组。这导致了工作表的短暂填充,但是,正如您可能预料的那样,所有值都是字符串。一半的列都可以,因为它们确实是字符串,但是对于另一些列,这导致无法计算任何内容。
使用NumberFormat
并没有做任何事情,因为值不是数字。
因此,我决定为每行创建一个数组,将其转换为小数,然后用这些值填充excel行。
转换方法
private decimal[] ConvertToNumber(Excel.Range _Range)
{
decimal[] DecimalsArray = new decimal[_Range.Count];
Excel.Range[] cellArray = _Range.Cells.Cast<Excel.Range>().ToArray<Excel.Range>();
for (int i = 0; i < cellArray.Length; i++)
{
DecimalsArray[i] = decimal.Parse(cellArray[i].Value2);
}
return DecimalsArray;
}
填充代码段:
for (int i = 0; i < rowCount; i++)
{
range = MySheet.Range[MySheet.Cells[i+2, 8], MySheet.Cells[i+2, 13]];
decimal[] CurrentRowValues = ConvertToNumber(range);
range.Value2 = CurrentRowValues;
}
问题是,当我尝试用值填充行时,出现此错误:
System.ArgumentException:“值未在预期范围内”
我检查了选择范围。它与我的DecimalsArray
的大小相同。因此,我不知道在哪里进一步挖掘。
现在我按单元格填充行单元格,它可以工作,但是非常慢。
立即填充:
for (int i = 0; i < rowCount; i++)
{
range = MySheet.Range[MySheet.Cells[i+2, 8], MySheet.Cells[i+2, 13]];
decimal[] CurrentRowValues = ConvertToNumber(range);
for (int j = 0; j < 6; j++)
{
range = MySheet.Cells[i + 2, j + 8];
range.Value2 = CurrentRowValues[j];
}
}
请帮助我发现我的错误,或者也许可以帮助您找到一种更轻松的方法,用列表对象的值填充电子表格。