2

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

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

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

指令输入

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 运行类似脚本。

4

2 回答 2

2

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

acExportDelim = 2
acImportDelim = 0

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

于 2012-08-31T16:53:59.197 回答
1

这个问题是一个很好的例子,说明为什么始终包含Option Explicit在您的 VBScript 中很重要,就像您应该为 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'
于 2012-08-31T17:51:39.963 回答