Как я могу использовать Windows 7 API для выполнения простых запросов базы данных к файлам CSV через Excel VBA? - PullRequest
1 голос
/ 22 февраля 2012

Я работаю с файлами данных транзакций CSV, каждая из которых имеет размер 350 МБ + и 1 100 000 строк.

Мне было интересно, как я могу выполнить несколько простых быстрых запросов к этим файлам через IDE VBA, сохранить CSV, а затем открыть результат в виде рабочей книги в Excel.

Например, я хочу сделать это:

  1. Загрузить CSV в оперативную память в виде таблицы
  2. Удалите все строки, в которых поле с именемaction_type записано как «не удалось»
  3. Сохранить результат как новый CSV
  4. Открыть результат в виде рабочей книги в Excel

Моя цель - выполнить эту операцию с максимально возможной производительностью. Я думаю, что эта функциональность обеспечивается Extensible Storage Engine (ESE) , но я не уверен, как использовать его через Excel VBA IDE.

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Вы можете использовать «текстовую базу данных» и использовать ADO (или DAO) для запроса файлов. См. Эту статью для получения дополнительной информации: http://msdn.microsoft.com/en-us/library/ms974559.aspx

Таким образом, вы можете просто создать файл schema.ini для файла, который вы хотите запросить, и запросить файл, используя стандартный SQL. Затем вы просто записали бы свой набор записей результатов в файл.

1 голос
/ 22 февраля 2012

Я не уверен, как использовать его через Excel VBA IDE.

Даже я:)

  • Загрузить CSV в ОЗУ в виде таблицы
  • Удалить все строки, в которых поле с именемaction_type записано как «не выполнено»
  • Сохранить результат как новый CSV
  • Открыть результат как книгу в Excel

Вот альтернатива.

  • Загрузить файл CSV в базу данных Access из Excel, используя " .TransferText "

Пример кода

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
  • Удалите все строки, в которых поле с именемaction_type записано как «не удалось»

Это можно сделать, запустив запрос из excel.

  • Сохранитерезультат в виде нового CSV

Снова используйте " .TransferText ", чтобы экспортировать его в CSV

Пример кода

    oacApp.DoCmd.TransferText acExportDelim, "Standard Output", _
    "Table1", "C:\MyNewcsv.csv"
  • Открыть результат как книгу в Excel

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...