在 MS Access 中跳过 CSV 文件的前三行(使用 DoCmd?)

Posted

技术标签:

【中文标题】在 MS Access 中跳过 CSV 文件的前三行(使用 DoCmd?)【英文标题】:Skip first three lines of CSV file (using DoCmd?) in MS Access 【发布时间】:2013-04-30 13:21:47 【问题描述】:

加载到 MS Access 时,我需要跳过 CSV 文件的前三行。默认 CSV 导入不会删除前三行。我正在考虑编写一个宏来忽略前三行。

我的研究显示了 DoCmd 对象,但它的方法不适合删除前 x 行。

有什么想法吗?

【问题讨论】:

【参考方案1】:

DoCmd.TransferText method 将 SpecificationName 作为其参数之一。按照How to Create an Import Specification 的说明创建并保存导入规范。

现在进入访问选项、导航选项并显示隐藏/系统对象。您现在应该能够打开一个名为“mSysIMEXSpecs”的表。根据 SpecName 列查找您之前创建的导入规范。将该导入规范的“StartRow”列更改为 3(StartRow 从零开始)。

现在您应该可以使用 DoCmd.TransferText 方法传递您创建的导入规范的名称,它会跳过您的前三行。

【讨论】:

+1 鬼鬼祟祟!如果决定使用这种技术,在代码中记录这绝对是一个好主意,否则下一个在该数据库上工作的可怜人可能会发疯,试图找出为什么会跳过最初的行.不过,谢谢分享! 好点。我实际上已经编写了一个类模块,它以编程方式管理我的导入/导出规范,因为在尝试调试问题时我厌倦了寻找现有规范。但这是我不想进入的整个博客文章! @mwolfe02 我刚做了这个,谢谢。我只是想指出 StartRow 是基于 0 的。在我的例子中,我想跳过 2 行,我在 StartRow 中输入了 2,所以对于这个例子,他应该在 StartRow 中输入 3。如果他输入 4,他会丢失一行数据。 已修复。很好的捕捉@mendel。谢谢。【参考方案2】:

在 Access VBA 中,我将使用两个 TextStream 对象,一个到 .ReadLine 原始 CSV 文件逐行,另一个到 .WriteLine 到一个临时文件,跳过输入文件的前三行.在Scripting.FileSystemObject 上进行一些网络搜索,我相信您会找到一些示例代码。

然后我会使用DoCmd.TransferText acImportDelim 将临时文件导入Access。

【讨论】:

+1 这种方法实际上是我的第一个想法。管理临时文件有其自身的一组开销,但程序员的意图会更加明确,而不需要好的 cmets。六个半打我的看法。【参考方案3】:

Docmd.TransferText 方法是一个不错的选择,但作为修改导入规范的替代方法,您可以考虑导入所有内容并在导入后进行一些验证。

因此,您可以导入整个文件,然后使用删除查询从表中删除数据。

正如上面评论中提到的,通过系统表修改规范对于其他人来说可能很棘手,因为在您的代码中带有漂亮的小评论的删除查询可能会奏效。如果需要使用它,如果不需要它可以被注释掉。

【讨论】:

以上是关于在 MS Access 中跳过 CSV 文件的前三行(使用 DoCmd?)的主要内容,如果未能解决你的问题,请参考以下文章

在 Yii2 中跳过 CSV 文件的第一行

在CSV文件中跳过标题

Python 3.2 在 csv.DictReader 中跳过一行

将数据导入 Access 时如何跳过 Excel 中的前几行?

MS-Access:对链接的 CSV 文件的慢查询

MS Access 需要遍历 10k csv 文件,但 MS Access 数据库填满过快