0

我试图将一个大的 .csv 文件导入 Excel。该文件有近 400 万行和 329 列,因此远远超过 Excel 的65536 1M 行限制。我在网上找到了一个 VB 脚本,用于将文本文件导入 Excel,一旦超出行数限制,脚本将创建一个新工作表,直到所有工作表中的总行数等于原始文本文件中的总行数。

Sub ImportLargeFile()
'Imports text file into Excel workbook using ADO.
'If the number of records exceeds 65536 then it splits it over more than one sheet.

Dim strFilePath As String, strFilename As String, strFullPath As String
Dim lngCounter As Long
Dim oConn As Object, oRS As Object, oFSObj As Object

'Get a text file name
strFullPath = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...")

If strFullPath = "False" Then Exit Sub  'User pressed Cancel on the open file dialogue

'This gives us a full path name e.g. C:\temp\folder\file.txt
'We need to split this into path and file name
Set oFSObj = CreateObject("SCRIPTING.FILESYSTEMOBJECT")

strFilePath = oFSObj.GetFile(strFullPath).ParentFolder.Path
strFilename = oFSObj.GetFile(strFullPath).Name


'Open an ADO connection to the folder specified
Set oConn = CreateObject("ADODB.CONNECTION")
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
           "Data Source=" & strFilePath & ";" & _
           "Extended Properties=""text;HDR=Yes;FMT=Delimited"""

Set oRS = CreateObject("ADODB.RECORDSET")

'Now actually open the text file and import into Excel
oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1
While Not oRS.EOF
    Sheets.Add
    ActiveSheet.Range("A1").CopyFromRecordset oRS, 65536
Wend

oRS.Close
oConn.Close

End Sub

但是,当我在 Excel 2007 中运行它时,出现以下错误:

Run-time error '-2147217900 (80040e14)':

Syntax error in FROM clause.

单击调试时,它指向此行

    oRS.Open "SELECT * FROM " & strFilename, oConn, 3, 1, 1

我有不存在的 VB 技能,所以这里的任何帮助将不胜感激。

谢谢!

编辑:我找到了这个http://support.microsoft.com/kb/193514但这在这种情况下不起作用,事实上,我什至不知道在哪里放置方括号。我把括号放在那一行的任何地方,Excel 都拒绝给我运行选项。

编辑 2:我尝试在另一台机器上运行它,它只是有更多的汁液,使内存不是问题。这台计算机上还装有 Office 2013(虽然没有 Office 365)。我在上面运行了相同的宏,它给出了以下错误。

Run-time error '3706':
Provider cannot be found. It may not be properly installed.

当我点击调试它指向这一行

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & strFilePath & ";" & _
->     "Extended Properties=""text;HDR=Yes;FMT=Delimited"""
4

2 回答 2

1

您是否研究过 PowerPivot?它是 Microsoft 的免费插件。它将允许您连接到原始数据源,或使用整个 CSV,并加载数百万行(超出单元格限制)。您可以汇总数据透视表中的数据,对数据应用函数等。PowerPivot 是为您的情况量身定制的。

下载

于 2013-05-14T18:47:59.057 回答
0

据我所知,Excel 2007 没有 65K 的限制。只需尝试直接导入 csv。

编辑:评论告诉它有 1M 的限制,所以需要拆分文件。如果它很简单(没有带换行符的引用文本),那么 split 和 head 会有所帮助。它们也可以在 Windows 下使用。

于 2013-05-14T15:41:40.147 回答