我正在尝试将数据从我的C#代码导出到MS Excel 2007,但是在excel文件中插入数据需要30秒。代码就像这样 - >
Excel.Application excelapp = new Excel.Application();
Excel.Workbook excelworkbook = excelapp.Workbooks.Open(fileTest);
Excel.Sheets excelsheets = excelworkbook.Worksheets;
Excel.Worksheet mysheets = (Excel.Worksheet)excelsheets.get_Item("Sheet1");
Excel.Range mycells = mysheets.Cells;
mycells.Item[destroyer, "A"].Value = s[2];
mycells.Item[destroyer, "B"].Value = s[1];
mycells.Item[destroyer, "C"].Value = s[3];
mycells.Item[destroyer, "D"].Value = dbl_standard.Text;
mycells.Item[destroyer, "E"].Value = s[4];
mycells.Item[destroyer, "F"].Value = s[7];
mycells.Item[destroyer, "G"].Value = s[5];
mycells.Item[destroyer, "H"].Value = s[6];
excelworkbook.Save();
excelworkbook.Close();
excelapp.Quit();
Marshal.ReleaseComObject(mycells);
Marshal.ReleaseComObject(mysheets);
Marshal.ReleaseComObject(excelsheets);
Marshal.ReleaseComObject(excelworkbook);
Marshal.ReleaseComObject(excelapp);
我几乎不插25列。我做错了什么?如何快速完成?
先谢谢
答案 0 :(得分:2)
这里有两个问题。第一个问题是Excel互操作实际上打开了Excel.exe并且它与该进程一起操作。您将无法消除启动Excel的开销,这可能是您处理时间的主要部分。
另一部分是,对于您编辑的每个单元格,您都会在互操作层“引擎盖下”创建大量调用。您可以对这些调用进行矢量化。
阅读: https://stackoverflow.com/a/42604291/3387223
写作(VB示例): https://stackoverflow.com/a/23503305/3387223
这样,您只需为整个值范围创建一个互操作操作。这比插入25个值大约快25倍。
但正如我上面所说,启动Excel可能需要大部分时间。
您可以使用OpenXML更快地读取和写入Excel工作表,但是您可能会遇到一些格式问题,并且您不会在Excel工作表中获得其他公式的即时更新(如果这是您需要的)。
https://msdn.microsoft.com/en-us/us-en/library/office/bb448854.aspx
以下是生成Excel工作表的示例:
https://msdn.microsoft.com/en-us/library/office/hh180830(v=office.14).aspx
如果您想更轻松地处理OpenXml,可以使用ClosedXml:
https://github.com/closedxml/closedxml
这将使OpenXml与标准互操作一样简单。