gpt4 book ai didi

c# - Microsoft.Office.Interop.Excel 真的很慢

转载 作者:IT王子 更新时间:2023-10-29 03:57:13 28 4
gpt4 key购买 nike

我正在使用标准 Microsoft.Office.Interop.Excel 将 1200 X 800 矩阵 (indexMatrix) 导出到 excel 文件。该应用程序有效,只是它真的非常非常慢(即使对于 100 x 100 矩阵也是如此)。我还通过 TextWriter 导出文本文件,它几乎可以立即运行。有什么方法可以更快地导出到excel文件吗?

这是我的代码:

        Excel.Application xlApp=new Excel.Application();
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;

//xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);

xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
for (int i = 0; i < 800; i++) //h
for (int j = 0; j < 1200; j++)
xlWorkSheet.Cells[i+1,j+1] =indexMatrix[i][j];


xlWorkBook.SaveAs("C:\\a.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);

MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");

最佳答案

您正在更新单个单元格。这将非常缓慢。如果您考虑一下,每次更新单元格时,都会将 RPC 调用编码到 Excel 进程。

如果您在单个语句(一个跨进程调用)中将二维值数组分配给相同维度的 Excel 范围,而不是当前的 1200 x 800 = 960,000 次跨进程调用。

类似于:

// Get dimensions of the 2-d array
int rowCount = indexMatrix.GetLength(0);
int columnCount = indexMatrix.GetLength(1);
// Get an Excel Range of the same dimensions
Excel.Range range = (Excel.Range) xlWorkSheet.Cells[1,1];
range = range.get_Resize(rowCount, columnCount);
// Assign the 2-d array to the Excel Range
range.set_Value(Excel.XlRangeValueDataType.xlRangeValueDefault, indexMatrix);

实际上,迂腐一点,上面的代码中有三个跨进程调用(.Cells、.get_Resize 和.set_Value),而你的代码中每次迭代有两个调用(.Cells get 和一个隐式的.set_Value ) 总共 1200 x 800 x 2 = 1,920,000。

注意range.get_Resizerange.set_Value 是我在首次撰写本文时使用的旧版 Excel 互操作库所必需的。现在,您可以使用 range.Resizerange.Value,如 @The1nk 评论中所述。

关于c# - Microsoft.Office.Interop.Excel 真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3989122/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com