将csv文件导入访问的VBA过程

时间:2012-06-30 15:33:16

标签: ms-access vba csv

我需要VBA中的程序将数据导入到csv excel文件的访问中,而没有一些记录,如页眉和页脚。例子,,,我在csv文件中有表,其中包含一些 不属于表日期的句子


A1这是一​​句话题.......
A2标题
A3 .......
A7数据数据数据数据
A8行数据数据数据数据 ...... ....
A256数据数据数据
A257这是一句话


My Acess shoud只包含A7到A256之间的行。有没有人知道VBA中的程序或其他什么来解决我的问题?

非常感谢


修改

2 个答案:

答案 0 :(得分:12)

最简单的方法是将CSV文件作为表格链接到Access数据库。然后你就可以在这个表上工作,就像它是一个普通的访问表一样,例如通过基于这个表创建一个适当的查询来返回你想要的内容。

您可以手动或使用VBA链接表格

DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tblImport", _
    FileName:="C:\MyData.csv", HasFieldNames:=true

更新

Dim db As DAO.Database

' Re-link the CSV Table
Set db = CurrentDb
On Error Resume Next:   db.TableDefs.Delete "tblImport":   On Error GoTo 0
db.TableDefs.Refresh
DoCmd.TransferText TransferType:=acLinkDelim, TableName:="tblImport", _
    FileName:="C:\MyData.csv", HasFieldNames:=true
db.TableDefs.Refresh

' Perform the import
db.Execute "INSERT INTO someTable SELECT col1, col2, ... FROM tblImport " _
   & "WHERE NOT F1 IN ('A1', 'A2', 'A3')"
db.Close:   Set db = Nothing

答案 1 :(得分:3)

您的文件看起来很小(297行),因此您可以非常快速地读取和写入它们。您可以参考不存在的Excel CSV,并在示例中显示空格分隔数据。此外,Access限制为255列,而CSV不限,因此无法保证这将起作用

Sub StripHeaderAndFooter()
Dim fs As Object ''FileSystemObject
Dim tsIn As Object, tsOut As Object ''TextStream
Dim sFileIn As String, sFileOut As String
Dim aryFile As Variant

    sFileIn = "z:\docs\FileName.csv"
    sFileOut = "z:\docs\FileOut.csv"

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set tsIn = fs.OpenTextFile(sFileIn, 1) ''ForReading

    sTmp = tsIn.ReadAll

    Set tsOut = fs.CreateTextFile(sFileOut, True) ''Overwrite
    aryFile = Split(sTmp, vbCrLf)

    ''Start at line 3 and end at last line -1
    For i = 3 To UBound(aryFile) - 1
        tsOut.WriteLine aryFile(i)
    Next

    tsOut.Close

    DoCmd.TransferText acImportDelim, , "NewCSV", sFileOut, False
End Sub

编辑各种评论

可以手动将文本文件导入MS Access,这样您就可以选择自己的单元格分隔符和文本分隔符。您需要从菜单中选择外部数据,选择文件并逐步完成向导。

About importing and linking data and database objects -- Applies to: Microsoft Office Access 2003

Introduction to importing and exporting data -- Applies to: Microsoft Access 2010

使用向导进行导入工作后,您可以保存导入规范,并按照@Olivier Jacot-Descombes所述的下一个DoCmd.TransferText使用它。这将允许您使用非标准分隔符,例如半冒号和单引号文本。