4

我有大量数据要插入到现有 Excel 工作簿的工作表中。Excel 工作簿将具有其他包含计算和数据透视表的工作表。数据可能有多达 60,000 行和 30 多列。此解决方案必须适用于 Excel 2003 和 Excel 2007。

使用 Excel OLE 对象太慢了,所以我们尝试从 CSV 文件加载数据。我们提出了一种加载数据的方法,方法是将数据放在剪贴板上,然后将其粘贴到工作表中。我觉得这是一个相当的kludge。是否有另一种以编程方式将 CSV 文件加载到工作表中的方法?或者也许完全不同的解决方案?


更新:在我们完全调查答案之前,我们被另一项任务猛烈抨击。我们应该能够在几周内回到这个问题上。当我们回到这个任务时,我一定会再次更新。

感谢您迄今为止的所有答案!

4

6 回答 6

2

XLSReadWrite 是一个可以从 Delphi 读写 excel 文件的组件。它速度很快,并且支持 Excel 2003 和 2007。您可以创建新的 excel 文件以及打开现有的文件并添加/修改它们。

此外,您无需安装 Excel 即可使用它。

请参阅http://www.axolot.com/components/xlsrwii20.htm

于 2009-03-18T12:34:18.380 回答
1

您是否有可能放弃使用 Office 2003 的要求?我会推荐Open XML Format SDK。它允许您将托管代码程序集绑定到可以处理诸如打开或关闭之类的事件的电子表格文档,以及读取和写入文档中的单元格等。或者,您可以使用它来操作应用程序中的 XSLX 文档。实际上,相当光滑。

既然这对您不起作用,那么编写一个在加载电子表格时拉入 CSV 文件的宏怎么样?

于 2009-03-18T02:03:36.727 回答
0

您可以将 csv 加载到 listview 或使用 OLEDB 提供程序将其加载到 DBGrid 上,然后使用 Max Components 的 TMxExport 组件将其导出为 xls 文件格式:

最大组件

于 2009-03-18T02:02:30.490 回答
0

您是否尝试过将 csv 文件直接链接到工作表中。

转到数据 -> 导入外部数据 -> 导入数据将文件类型更改为“文本文件”

然后,您可以在 csv 更新时刷新工作表。

注意:我没有根据您指出的数据量来做这件事,所以 YMMV

于 2009-03-18T02:11:46.877 回答
0

实际上,有一种方法非常快,非常古老的技术(现在),但可能是最快的。

它是 ADO 或更早版本的 DAO(注意不是 ADO.NET)

您可以使用 ADO 和 JET 引擎读取 CSV 文件以将数据放入 ADO 记录集中,然后 Excel 范围对象具有 CopyFromRecordSet 方法,该方法将从 ADO(或 DAO)记录集中复制(非常快)。

http://msdn.microsoft.com/en-us/library/aa165427(office.10).aspx

于 2009-03-18T03:20:14.280 回答
-1

您可以尝试使用制表符分隔值而不是 CSV - 而不是将其粘贴到 Excel 中 :)

于 2009-03-19T11:45:52.030 回答