快速将CSV文件导入Excel文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速将CSV文件导入Excel文件相关的知识,希望对你有一定的参考价值。

我现在使用的是笨办法,Excel打开,然后将csv打开,用复制粘贴的方便。我在考虑能不能直接从Excel中插入CSV数据。因为我有很多CSV文件要插入,我想提高效率。请高人指点,不胜感激!

方法一、使用导入功能,选择菜单数据、获取外部数据、来自文本文件,选择你的文件,接下来进入导入向导,第一步选择分隔符方式(另外一个是固定宽度),第二步选择具体的分隔符(逗号),第三部设置每一列的格式,一般使用常规即可(无需修改),只是当出现全是数字的长内容(例如身份证号码)时,需要选择那一列为文本方式,最后完成即可。如果有不需要的列,在选择类型的地方选择“忽略”即可。

方法二、复制粘贴发,用记事本(或者WORD)打开文本文件,全选、复制,然后到EXCEL里面粘贴即可。此时,所有内容都进入了EXCEL,但是全在A列里面,不是表格。现在需要选择菜单数据、分列,先选中A列再选择分列功能,此功能与导入向导的界面是一样的,也是选择分列方式、分隔符、列类型三个步骤。
参考技术A 可是使用“数据”中的“导入”功能追问

非常感谢,经过您的指点我弄成了。但是我的CSV中有两列数据我只想要第二列,请问如何操作,谢谢!

追答

这个我不知道应如何处理了,你可以导好后再删除掉不要的哪一行。

本回答被提问者采纳
参考技术B 过多的话,写个小程序,非常好。 参考技术C 从工具栏的数据,选择 从文本, 分隔符号,原始格式选择 UTF-8, 分隔符选择 分号, 列数据格式 选择 常规, 完成即可

访问数据项目在VBA中导入CSV文件

我不时地遇到一个问题,我的一个同事已经开发出一个旧系统。他们倾向于拥有数千行代码来执行简单的操作,例如导入csv文件。

目前vba流程是:

  • 打开excel应用程序
  • 创建新工作表
  • 填充csv文件
  • 进入excel将标题名称添加到文件中
  • 将工作表另存为新的Excel文件
  • 将文件导入访问数据项目sql表。
  • 处理数据

我想用它做的是:

  • 将csv导入表中(与获取外部数据函数一样)
  • 处理数据

我有一个快速搜索,看不到任何简单的方法只是将文件吸入表中。

任何帮助,将不胜感激。

谢谢

保罗

答案

有一种更简单的方法来导入CSV!您可以使用Microsoft Text Odbc驱动程序。

Sub Import()
   Dim conn as new ADODB.Connection
   Dim rs as new ADODB.Recordset
   Dim f as ADODB.field

   conn.Open "DRIVER={Microsoft Text Driver (*.txt; *.csv)};DBQ=c:	emp;"
   rs.Open "SELECT * FROM [test.txt]", conn, adOpenStatic, adLockReadOnly, adCmdText

   While Not rs.EOF
      For Each f In rs.Fields
         Debug.Print f.name & "=" & f.Value
      Next
   Wend
End Sub

您可以从Select更改为INSERT INTO并与SELECT结合使用。

您可以在注册表中执行一些设置,在密钥\HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesText中:

格式:TabDelimited,CSVDelimited,Delimited(X)其中X = some char

FirstRowHasNames:0,1

性格:OM,Anz

另一答案

在许多情况下,导入CSV的最简单方法是使用TransferText方法。

有关详细信息,请参阅此MSDN链接:TransferText Method [Access 2003 VBA Language Reference]

下面是一个示例TransferText命令,用于将C: SomeFolder DataFile.csv导入名为tblImport的表中。最后一个参数HasFieldNames为False,表示CSV文件不包含字段名称。

DoCmd.TransferText acImportDelim, "YourCustomSpecificationName", _
    "tblImport", "C:SomeFolderDataFile.csv", False

SpecificationName参数是可选的。但是,通过创建自己的导入规范并在TransferText命令中包含其名称,通常可以获得更好的结果。该规范允许您识别要将数据加载到哪些表字段,调整数据类型以及许多其他选项。手动导入数据文件时,可以创建自己的导入规范...选择自定义导入选项,并将这些选项保存为命名规范。 (在“导入向导”对话框中查找“高级”按钮。)

另一答案

我找到了一种将整个CSV导入访问的好方法。我的任务是将三个CSV导入到一个数据库的三个表中。这必须完成大约100次,每个CSV的范围从200MB到500MB。由于每个数据库的三个表模式相同,我花了一些时间试图找到创建脚本的最佳方法来为我导入所有这些。我第一次用

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, p1, _
Application.CurrentProject.Path & "Page1\_8_lift_base_" & dbName & ".csv",_
True, sh.Name & "!"

这适用于大多数情况,除了偶尔打开CSV时会出现“只读”提示,并在导入关闭之前暂停导入。此外,300MB CSV需要大约8到10分钟。对于100个DB,这是不可接受的。

我最终做的是创建自己的XML导入导出规范。

Sub make_import_spec(filePath As String, tableName As String, pageNum As Long)
'By Ryan Griffin
Dim name_of_spec As String
name_of_spec = "imspec" & tableName
Dim xml As String
'This xml string contains the specifications the use for that table
xml = ""
xml = xml & "<?xml version=""1.0"" encoding=""utf-8"" ?>" & vbCrLf
xml = xml & "<ImportExportSpecification Path=" & Chr(34) & filePath & Chr(34) & " xmlns=""urn:www.microsoft.com/office/access/imexspec"">" & vbCrLf
xml = xml & "   <ImportText TextFormat=""Delimited"" FirstRowHasNames=""true"" FieldDelimiter="","" CodePage=""437"" Destination=" & Chr(34) & tableName & Chr(34) & " >" & vbCrLf
xml = xml & "      <DateFormat DateOrder=""MDY"" DateDelimiter=""/"" TimeDelimiter="":"" FourYearDates=""true"" DatesLeadingZeros=""false"" />" & vbCrLf
xml = xml & "      <NumberFormat DecimalSymbol=""."" />" & vbCrLf
xml = xml & "           <Columns PrimaryKey=""{none}"">" & vbCrLf
xml = xml & "                    <Column Name=""Col1"" FieldName=""field1"" Indexed=""YESDUPLICATES"" SkipColumn=""false"" DataType=""Text"" Width=""12"" />" & vbCrLf
xml = xml & "                    <Column Name=""Col2"" FieldName=""field2"" Indexed=""NO"" SkipColumn=""false"" DataType=""Text"" Width=""16"" />" & vbCrLf
xml = xml & "                    <Column Name=""Col3"" FieldName=""field3"" Indexed=""YESDUPLICATES"" SkipColumn=""false"" DataType=""Text"" Width=""24"" />" & vbCrLf
xml = xml & "                    <Column Name=""Col4"" FieldName=""field4"" Indexed=""NO"" SkipColumn=""false"" DataType=""Text"" Width=""16"" />" & vbCrLf
xml = xml & "         </Columns>" & vbCrLf
xml = xml & "     </ImportText>" & vbCrLf
xml = xml & "</ImportExportSpecification>"
'By Ryan Griffin
'Now you can add the specification to the project
CurrentProject.ImportExportSpecifications.Add name_of_spec, xml
' This will run your specification and import you csv file
DoCmd.RunSavedImportExport name_of_spec
End Sub

在使用此设置运行代码后,我能够在一分钟内(~62秒)导入一个300MB的文件,并且能够确保每个列都具有适当的dataType和正确的索引(没有额外的步骤)。因此,通过这种方法,我可以实现速度增加7到9倍之间的某些速度,并且很容易知道数据是正确的。

*注意:对于此功能,我提供CSV文件路径(包括name.csv),所需的表名和pagenum,这是表引用。 (我用它来区分表。在xml字符串中,我有一个基于该pageNum的if语句,如果pageNum为1,则将这些列添加到字符串中)。

只要csv文件不包含“。”,这将对您的所有CSV导入要求都能很好地工作。 (期间)名称[除了扩展名]。为此,您需要使用Scripting FileSystemObject来获取文件,并在导入之前更改其名称以使用下划线而不是句点。

我知道这可能有点长篇大论,但在这方面很少有资源可靠和有用。花了我差不多一天来减少选项并理清VBA的混乱局面。我希望这可以帮助那些遇到同样麻烦的人。

另一答案

BULK INSERT通常更快,它可以在X64机器上运行。上面提到的文本驱动程序可能在某些X64环境中不起作用。

我建议不要使用格式文件,如果没有它,它会更简单。

http://msdn.microsoft.com/en-us/library/ms188365.aspx

BULK INSERT AdventureWorks2008R2.Sales.SalesOrderDetail FROM'f: orders lineitem.tbl'WITH(FIELDTERMINATOR ='|',ROWTERMINATOR ='|| n')

以上是关于快速将CSV文件导入Excel文件的主要内容,如果未能解决你的问题,请参考以下文章

访问数据项目在VBA中导入CSV文件

oracle导入问题

将数据从csv导入excel

如何把一个excel文件的数据导入另一个excel文件?

excl数据怎么导入到MongoDB中,或者怎样将excl处理在导入到数据库中,数据量有4万条

csv文件导入Excel出现中文乱码解决方式