使用VBS中的Access DoCmd.TransferText acExportDelim将txt导出到csv

时间:2012-08-31 13:41:01

标签: ms-access vbscript export export-to-csv

我有大量的.txt文件(> 60k)需要转换为以分号分隔的.csv(因为某些字段是带逗号的列表)所以我可以将它们上传到我们的SQL服务器

我成功编写了一个.vbs文件,即使没有表存在也会将数据加载到Access数据库中,但我无法让acExportDelim覆盖/创建新文件。当FileName.csv不存在时,它也会出错。

必须有一些我不知道的东西,但我不知道我需要从哪里开始寻找。

CMD输入

C:\Afolder\TxtToCsv.vbs \\DataOnaServer\FileName.txt \\DataOnaServer\FileName.csv

.vbs文件

Dim oAccess
Set oAccess = CreateObject("Access.Application")
oAccess.OpenCurrentDatabase("C:\Afolder\WDS.accdb")
oAccess.DoCmd.TransferText acImportDelim,"FileTxtImportSpec","FileName",WScript.Arguments.Item(0),1
oAccess.DoCmd.TransferText acExportDelim,"FileCsvExportSpec","FileName",WScript.Arguments.Item(1)
oAccess.Quit

文件丢失时收到错误消息。 (似乎我无法发布图片)

“Microsoft Access数据库引擎无法对对象'lp4137.csv'进行细化。请确保该对象存在,并且您正确拼写其名称和路径。如果'lp4137.csv'不是本地对象,请检查您的网络连接或联系服务器管理员。“ 代码:800A0BC3

Blue Claw Database Design链接到可下载的文件演示,按钮单击VBA运行类似的脚本。

2 个答案:

答案 0 :(得分:2)

使用您的vbscript,您需要专门定义'AcTextTransferType'枚举。在MS Access中,这些枚举在访问库中定义,并且将被找到。但是,vbscript将无法识别枚举值并将引发错误。

acExportDelim = 2
acImportDelim = 0

您可以在此msdn文章中找到枚举:http://msdn.microsoft.com/en-us/library/office/ff194227.aspx

答案 1 :(得分:1)

这个问题是一个很好的例子,说明为什么在你的VBScript中始终包含Option Explicit非常重要,就像你应该为VBA代码做的那样。

考虑这个VBScript。

WScript.Echo "TypeName(acImportDelim): " & TypeName(acImportDelim)
WScript.Echo "TypeName(acExportDelim): " & TypeName(acExportDelim)

在命令窗口中运行该脚本会返回此...

C:\share\Access>cscript //NoLogo AccessNamedConstants.vbs
TypeName(acImportDelim): Empty
TypeName(acExportDelim): Empty

但是包含Option Explicit作为该脚本的第一行会引发错误,因为脚本引擎不知道Access命名常量,所以它假定它们必须是未声明的变量。由于Option Explicit将未声明的变量视为错误,因此对这些命名常量的问题有一个早期警告。

C:\share\Access>cscript //NoLogo AccessNamedConstants.vbs
C:\share\Access\AccessNamedConstants.vbs(2, 1) Microsoft VBScript runtime error:
 Variable is undefined: 'acImportDelim'