是否可以以编程方式访问打开某个csv文件并将其读入数据表并设置参数,如分隔符,TEXT QUALIFIER等的时间,包括手动将csv文件导入表中所需的所有步骤?
答案 0 :(得分:2)
您可以创建一个Scripting.FileSystemObject
,然后逐行在文件中流,按分隔符分隔字段,并将每个已分析的记录添加到基础记录集或另一个表。
您也可以试用DoCmd.TransferText
,因为这似乎是最有前途的内置方法。
编辑:对于更完整(复杂且效率更低)的解决方案,它可以让您更好地控制架构,并像处理任何其他数据源一样处理任何csv文件,请查看ODBC:Microsoft Text Driver - {{3}用于脚本示例。我相信你已经可以通过标准MS Access前端link
对任何cvs文件进行{{1}},从而允许你对其进行任何表读/复操作。否则,只需设置一个ODBC文件dns条目即可插入csv文件(通过开始 - >程序文件 - >管理工具 - >数据源),然后您可以通过Access文件选择/链接到它。
答案 1 :(得分:0)
这在很大程度上取决于是否已经创建了Access表,或者您是否想即时创建它。为了简单起见,我们假设该表已经存在(您可以随时返回并创建该表)。根据建议,您需要一些脚本工具:
Dim FSO As FileSystemObject, Fo As TextStream, line As String
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Fo = FSO.OpenTextFile("csvfile.csv")
这将使您可以读取文本文件的csv文件。您可以在此处控制使用哪个定界符以及将采用哪种日期格式。您还需要启用数据库引擎:
Dim db As Database
Set db = DBEngine.OpenDatabase("mydatabase.accdb")
这基本上就是您所需要的。您逐行阅读了csv文件:
While Not Fo.AtEndOfStream
line = Fo.ReadLine
现在,您需要能够为表格充分格式化每个字段的格式,这意味着:文本字段必须用引号(“)包围,日期字段必须用#等等。数据库引擎会发出嘈杂的声音,但同样,您将在这里负责,您可以对输入行进行任何必要的整容手术。我正在做的另一个假设(为简单起见)是您可以使用VBA进行编程。 因此,让我们解决问题的症结所在:
db.Execute ("INSERT INTO myTable VALUES (" & line & ")")
Wend
此刻,行已更改为可用于数据库引擎的内容,例如,如果原始读取的行是
33,04/27/2019,1,1,0,9,23.1,10,72.3,77,85,96,95,98,10,5.4,5.5,5.1,Cashew,0
您将其更改为
33,#04/27/2019#,1,1,0,9,23.1,10,72.3,77,85,96,95,98,10,5.4,5.5,5.1,"Cashew",0
最后一个注意事项:重要的是,csv文件的每个字段都应与表格中的字段相匹配。这至少包括(但不一定要最后)处于正确的顺序。您必须确保在预处理阶段。希望这能使您走上正确的轨道。