Импортируйте большое количество CSV-файлов в Access

15017
soandos

Все файлы CSV все в одном формате. Я хочу, чтобы каждый CSV-файл находился в отдельной таблице, а имя таблицы совпадает с именем файла.

Как я могу это сделать?

0

2 ответа на вопрос

2
physics2010

Я возвращаюсь сообществу, потратив четыре часа своего времени на выяснение конкретной проблемы, но в то же время отвечая на ваш вопрос. Весь другой код был собран из других ресурсов. Этот код будет использовать функцию Transfertext для извлечения нескольких CSV из каталога в их собственные отдельные таблицы с FILENAME в качестве имени таблицы. Запуск файлов с одинаковым именем файла позволит вам добавить к существующей таблице (удобно, если у вас есть 30 файлов с разными именами, но вы сохраняете одно и то же имя из месяца в месяц). Access 2010

Где у меня были проблемы: чертовы таблицы не будут добавляться при запуске файла с тем же именем . Он всегда создает новую таблицу и добавляет 1 2 3 и т. Д. What_csv what_csv1 what_csv2. *** Вы должны удалить период из имени файла. Хотя access автоматически изменяет его на подчеркивание, когда он создает таблицу, он видит, что имя файла и таблица имеют разные имена. Это относится к любым символам, не разрешенным Access.

Обрезать последние четыре имени файла, чтобы удалить .csv, используя strTable = Left (strFile, Len (strFile) - 4)

***** Вот ответ на ваш вопрос *****

Option Compare Database  Option Explicit   Function DoImport()   Dim strPathFile As String  Dim strFile As String  Dim strPath As String  Dim strTable As String  Dim blnHasFieldNames As Boolean   ' Change this next line to True if the first row in CSV worksheet  ' has field names  blnHasFieldNames = True   ' Replace C:\Documents\ with the real path to the folder that  ' contains the CSV files  strPath = "C:\Documents\"   ' Replace tablename with the real name of the table into which  ' the data are to be imported   strFile = Dir(strPath & "*.csv")    Do While Len(strFile) > 0  strTable = Left(strFile, Len(strFile) - 4)  strPathFile = strPath & strFile  DoCmd.TransferText acImportDelim,, strTable, strPathFile, blnHasFieldNames    ' Uncomment out the next code step if you want to delete the  ' EXCEL file after it's been imported  ' Kill strPathFile   strFile = Dir()   Loop    End Function  
1
Diego

Если ваши CSV-файлы имеют одинаковый формат, обычно лучше хранить их в одной таблице. Например, у вас может быть две таблицы: одна с именами ваших файлов и одна с их содержимым.

Для импорта содержимого нескольких csv я обычно предпочитаю VBA. Есть 3 основных варианта:

  • DoCmdTransferText
  • Объект файловой системы
  • I / O открытое заявление

Поскольку все ваши CSV-файлы имеют одинаковый формат, самый простой путь - первый.

Для использования DoCmd TransferText вам необходимо указать схему . Вы можете создать эту схему, импортируя вручную только один файл, и когда появится опция сохранения схемы, вы просто сохраните ее. Затем, используя функцию Dir () с расширением "* .csv", вы перебираете каталог и импортируете все свои файлы.

НТН