从对象列表导出到Excel工作表

时间:2018-12-14 05:18:30

标签: c# excel wpf

我有一个要导出到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];
            }
        }

请帮助我发现我的错误,或者也许可以帮助您找到一种更轻松的方法,用列表对象的值填充电子表格。

0 个答案:

没有答案