我有大量的.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运行类似的脚本。
答案 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'