【问题标题】:Export txt to csv with Access DoCmd.TransferText acExportDelim in VBS在 VBS 中使用 Access DoCmd.TransferText acExportDelim 将 txt 导出为 csv
【发布时间】:2012-08-26 08:15:05
【问题描述】:

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

我已经成功编写了一个 .vbs 文件,即使没有表存在,该文件也会将数据加载到 Access db 中,但我无法让 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 运行类似脚本。

【问题讨论】:

  • 您遇到什么错误?文件是否存储在目录名称中包含空格的路径中?
  • 我添加了错误信息。路径没有问题,因为 acImportDelim 指向相同的位置。
  • 如果将csv保存在本地磁盘上,是否可以检查它是否有效?
  • 将位置移动到 C: 上的“下载”文件夹时没有区别。如果 csv 文件丢失,也会出现同样的错误。
  • 流程需要完全自主。如果 CMD 可以调用 Access 中的 VBA,那么我完全赞成。如果我手动进行,导出工作正常。我刚刚从 Blue Claw 中找到了一个运行 VBA 的文件,该文件通过按钮单击工作。所以我假设我可以只是一个运行相同命令的宏。

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


【解决方案1】:

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

acExportDelim = 2
acImportDelim = 0

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

【讨论】:

  • 刚刚实现了解决方案。 VBScript 喜欢将数字与文字命令相对。 最糟糕的是我昨天在 TextToColumn 上遇到了同样的问题。
  • 使用 vbscript 和任何后期绑定的对象很容易被忽略。我仍然一直对此感到困惑。
【解决方案2】:

这个问题是一个很好的例子,说明为什么在您的 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'

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 2015-11-04
    • 2016-11-23
    • 2011-06-23
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多