我有大量数据要插入到现有Excel工作簿的工作表中。 Excel工作簿将包含其他包含计算和数据透视表的工作表。数据可能包含多达60,000行和30多列。此解决方案必须适用于Excel 2003和Excel 2007。
使用Excel OLE对象太慢,因此我们尝试从CSV文件加载数据。我们已经提出了一种方法来加载数据,方法是将数据放在剪贴板上,然后将其粘贴到工作表中。我觉得这是一个相当大的问题。是否有另一种方法以编程方式将CSV文件加载到工作表中?或者可能是一个完全不同的解决方案?
<小时/> 更新:在我们完全调查答案之前,我们已经接受了另一项任务。我们应该能够在几周内回到这一点。当我们回到这个任务时,我一定会再次更新。
感谢所有迄今为止的答案!
答案 0 :(得分:2)
XLSReadWrite是一个可以从Delphi读取和写入excel文件的组件。它速度很快,并且支持Excel 2003和2007.您可以创建新的Excel文件以及打开现有文件并添加/修改它们。
此外,您无需安装Excel即可使用它。
答案 1 :(得分:1)
您是否可以放弃使用Office 2003的要求?我会推荐Open XML Format SDK。它允许您将托管代码程序集绑定到电子表格文档,这些文档可以处理打开或关闭等事件,以及读取和写入文档中的单元格等。或者,您可以使用它来操作应用程序中的XSLX文档。实际上非常光滑。
由于这对您不起作用,如何在加载电子表格时编写一个拉入CSV文件的宏?
答案 2 :(得分:0)
您可以将csv加载到listview中或使用OLE DB提供程序将其加载到DBGrid上,然后使用Max Components中的TMx Export组件将其导出为xls文件格式:
答案 3 :(得分:0)
您是否尝试将csv文件直接链接到工作表中。
转到数据 - &gt;导入外部数据 - &gt;导入数据 将文件类型更改为“文本文件”
然后,您可以在更新csv时刷新工作表。
注意:我没有用你指示的数据量做这个,所以YMMV
答案 4 :(得分:0)
实际上有一种方法是相当快的,相当古老的技术(现在),但可能是最快的。
它是ADO或早期版本的DAO(注意不是ADO.NET)
您可以使用ADO和JET引擎读取CSV文件以将数据导入ADO记录集,然后Excel范围对象具有CopyFromRecordSet方法,该方法将从ADO(或DAO)记录集中复制(非常快)。 / p>
http://msdn.microsoft.com/en-us/library/aa165427(office.10).aspx
答案 5 :(得分:-1)
您可以尝试使用制表符分隔值而不是CSV - 而不是将其粘贴到Excel :)