5

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


A1 这是一些句子的标题.......
A2 标题
A3.......
A7 DATA DATA DATA DATA DATA
A8 rows DATA DATA DATA DATA DATA ......
A256 DATA DATA DATA DATA
A257 这是一些句子


我的 Acess 应该只包含 A7 到 A256 之间的行。有谁知道解决我的问题的 VBA 程序或任何东西?

多谢


编辑

4

2 回答 2

17

最简单的方法是将 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
于 2012-06-30T15:49:44.523 回答
6

您的文件看起来很小(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,这将允许您选择自己的单元格分隔符和文本分隔符。您需要从菜单中选择外部数据,选择您的文件并逐步完成向导。

关于导入和链接数据和数据库对象——适用于:Microsoft Office Access 2003

导入导出数据简介——适用于:Microsoft Access 2010

使用向导完成导入后,您可以保存导入规范并在下一个 DoCmd.TransferText 中使用它,如 @Olivier Jacot-Descombes 所述。这将允许您使用非标准分隔符,例如分号和单引号文本。

于 2012-06-30T16:21:42.357 回答