在 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?)的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.2 在 csv.DictReader 中跳过一行