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

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

2 ответа2

2

Я возвращаюсь сообществу, потратив четыре часа своего времени на выяснение конкретной проблемы, но в то же время отвечая на ваш вопрос. Весь другой код был собран из других ресурсов. Этот код будет использовать функцию 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

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

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

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

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

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

НТН

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .