我需要VBA中的程序将数据导入到csv excel文件的访问中,而没有一些记录,如页眉和页脚。例子,,,我在csv文件中有表,其中包含一些 不属于表日期的句子
My Acess shoud只包含A7到A256之间的行。有没有人知道VBA中的程序或其他什么来解决我的问题?
非常感谢
修改
答案 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使用它。这将允许您使用非标准分隔符,例如半冒号和单引号文本。