Windows 7 如何使用Windows 7 API通过Excel VBA对CSV文件执行简单的数据库查询?

Windows 7 如何使用Windows 7 API通过Excel VBA对CSV文件执行简单的数据库查询?,windows-7,excel,vba,Windows 7,Excel,Vba,我正在处理的CSV事务数据文件分别是350MB+和1100000+行 我想知道如何通过VBA IDE对这些文件执行一些简单的快速查询,保存CSV,然后在Excel中将结果作为工作簿打开 例如,我想这样做: 将CSV作为表格加载到RAM中 删除名为transaction_type的字段记录为“failed”的所有行 将结果另存为新的CSV 在Excel中将结果作为工作簿打开 我的目标是以尽可能高的性能完成此操作。我认为此功能是由提供的,但我不确定如何通过Excel VBA IDE使用它 谢谢 我不

我正在处理的CSV事务数据文件分别是350MB+和1100000+行

我想知道如何通过VBA IDE对这些文件执行一些简单的快速查询,保存CSV,然后在Excel中将结果作为工作簿打开

例如,我想这样做:

  • 将CSV作为表格加载到RAM中
  • 删除名为transaction_type的字段记录为“failed”的所有行
  • 将结果另存为新的CSV
  • 在Excel中将结果作为工作簿打开
  • 我的目标是以尽可能高的性能完成此操作。我认为此功能是由提供的,但我不确定如何通过Excel VBA IDE使用它

    谢谢

    我不知道如何通过Excel VBA IDE使用它

    甚至我:)

    • 将CSV作为表格加载到RAM中
    • 删除名为transaction_type的字段记录为“failed”的所有行
    • 将结果另存为新的CSV
    • 在Excel中将结果作为工作簿打开
    这里有一个替代方案

    • 使用“.TransferText”将CSV从Excel加载到Access数据库中
    示例代码

    Option Explicit
    
    '~~> Set reference to Microsoft Access Object Library
    Sub Sample()
        Dim oacApp As Access.Application
    
        Set oacApp = New Access.Application
    
        oacApp.OpenCurrentDatabase "C:\MyDatabase.mdb"
    
        oacApp.DoCmd.TransferText acImportDelim, "", _
        "Table1", "C:\Mycsv.csv", True
    
        oacApp.CloseCurrentDatabase
        oacApp.Quit acQuitSaveNone
    
        Set oacApp = Nothing
    End Sub
    
        oacApp.DoCmd.TransferText acExportDelim, "Standard Output", _
        "Table1", "C:\MyNewcsv.csv"
    
    • 删除名为transaction_type的字段记录为“failed”的所有行
    您可以通过从excel运行查询来实现这一点

    • 将结果另存为新的CSV
    再次使用“.TransferText”将其导出到CSV

    示例代码

    Option Explicit
    
    '~~> Set reference to Microsoft Access Object Library
    Sub Sample()
        Dim oacApp As Access.Application
    
        Set oacApp = New Access.Application
    
        oacApp.OpenCurrentDatabase "C:\MyDatabase.mdb"
    
        oacApp.DoCmd.TransferText acImportDelim, "", _
        "Table1", "C:\Mycsv.csv", True
    
        oacApp.CloseCurrentDatabase
        oacApp.Quit acQuitSaveNone
    
        Set oacApp = Nothing
    End Sub
    
        oacApp.DoCmd.TransferText acExportDelim, "Standard Output", _
        "Table1", "C:\MyNewcsv.csv"
    
    • 在Excel中将结果作为工作簿打开

    HTH

    您可以使用“文本数据库”并使用ADO(或DAO)来查询文件。有关更多信息,请参阅本文:


    这样,您就可以为要查询的文件创建schema.ini文件,并使用标准SQL查询该文件。然后,你可以简单地把结果记录集写成文件。

    如果你需要它,你可能应该考虑用另一种语言(C java…)进行转换,而只在VBA中执行步骤4。我知道这个选项,但是我对Access(Jet Red)的性能不满意。我真的很想尝试使用ESE(深蓝色)。我会选择更少的功能而不是更高的性能。这看起来很有希望,我会试试看,谢谢!然而,这是喷射红色。我仍然非常想尝试一个JET Blue解决方案,我认为它应该快得多。我通过使用Microsoft.ACE.OLEDB.12.0上的信息并将其更改为Microsoft.ACE.OLEDB.12.0来实现它(安装后。现在,将记录集写入CSV的最佳方式是什么?事实上,我可以直接将其写入Excel电子表格,但我无法让OLEDB正确猜测字段类型,因此它会以文本形式复制到Excel。有关如何修复此问题的任何想法?schema.ini文件设置正确吗?这应该定义字段的数据类型我假设这就是放入Excel的内容。我还没有设置一个。不过,我找到了另一个解决方案。我制作了一个脚本,在列之间循环,并对列执行文本转换(不带分隔符),它决定了字段类型。