以编程方式将CSV文件加载到Excel工作表(Delphi 7)

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

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


更新:在我们完全调查答案之前,我们遇到了另一个任务。 我们应该能够在几个星期内回到这个问题。 当我们回到这个任务时,我一定会再次更新。

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

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

你也不需要安装Excel就可以使用它。

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

任何机会,你可以放弃这个要求与Office 2003的工作? 我会推荐Open XML Format SDK 。 它使您可以将托pipe代码程序集绑定到可处理诸如“打开”或“closures”之类事件的电子表格文档,以及读取和写入文档中的单元格等等。 或者,您可以使用它来从应用程序操纵XSLX文档。 实际上很光滑。

由于这不适用于你,如何编写一个在电子表格加载时拉入CSV文件的macros?

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

最大组件

你有没有尝试直接将csv文件链接到工作表中。

转到数据 – >导入外部数据 – >导入数据将文件types更改为“文本文件”

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

注:我没有这样做的数据量,你指出,所以YMMV

其实有一种方法是相当快的,很老的技术(现在),但可能是最快的。

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

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

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

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