Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 跳过MS Access中CSV文件的前三行(使用DoCmd?)_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

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

Ms access 跳过MS Access中CSV文件的前三行(使用DoCmd?),ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,加载到MS Access时,我需要跳过CSV文件的前三行。默认CSV导入不会删除前三行。我想写一个宏来忽略前三行 我的研究显示了DoCmd对象,但其方法不适合删除第一个x行 有什么想法吗?在Access VBA中,我将使用两个TextStream对象,一个用于.ReadLine逐行读取原始CSV文件,另一个用于.WriteLine临时文件,跳过输入文件的前三行。在Scripting.FileSystemObject上进行一些web搜索,我相信您会找到一些示例代码 然后我将使用DoCmd.Tran

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

我的研究显示了DoCmd对象,但其方法不适合删除第一个x行


有什么想法吗?

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

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

将SpecificationName作为其参数之一。按照中的说明创建和保存导入规范

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


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

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

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


正如上面的一条评论中所提到的,通过系统表修改规范可能会让其他人很难找到位置,因为在代码中添加一条很好的注释的删除查询可能会很有用。如果需要,请使用它,如果不需要,可以将其注释掉。

+1鬼鬼祟祟!如果一个人决定使用这种技术,那么在代码中记录这一点绝对是一个好主意,否则下一个在该数据库上工作的可怜人可能会发疯,试图弄清楚为什么会跳过初始行。不过,谢谢分享!说得好。实际上,我已经编写了一个类模块,以编程方式管理我的导入/导出规范,因为在尝试调试问题时,我已经厌倦了寻找现有规范。但这是我不想在这里看到的全部博客文章@Mwolfe2我刚做了这个,它很有效,谢谢。我只是想指出StartRow是基于0的。在我的例子中,我想跳过2行,我在StartRow中输入了2,所以在这个例子中,他应该在StartRow中输入3。如果他输入4,他将丢失一行数据。修复了它。漂亮的接球@mendel。谢谢。+1这个方法实际上是我的第一个想法。管理临时文件有其自身的开销,但是程序员的意图将更加明确,而不需要好的注释。在我看来是六打半。