将大型.csv导入Excel,

问题描述 投票:0回答:2

我试图将一个大的.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.

当我单击Debug时,它指向此行

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
       "Data Source=" & strFilePath & ";" & _
->     "Extended Properties=""text;HDR=Yes;FMT=Delimited"""
excel csv ado large-files
2个回答
0
投票

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

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


0
投票

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

Download

© www.soinside.com 2019 - 2024. All rights reserved.