В настоящее время я создаю скрипт, который будет импортировать все листы Excel в указанной папке в уникальную таблицу в доступе Microsoft. Теперь дело в том, что этот процесс предполагается делать ежемесячно или раз в два месяца, а заголовки на этих листах excel часто меняются. Я попытался использовать метод DoCmd.Transferspreadsheet, но проблема, с которой я сталкиваюсь, заключается в том, что поля не соответствуют таблице адресатов. Теперь я не могу просто создать таблицу с соответствующими именами полей, а затем импортировать ее, потому что, как я уже сказал, заголовки файла excel часто меняются.Импорт Excel в Access, динамические заголовки столбцов
Мне бы хотелось, чтобы импортировать лист Excel в новый стол, и таблица должна автоматически принимать поля листа excel независимо от того, каковы они. Таким образом, каждый раз, когда я импортирую, создается новая таблица с соответствующими полями.
Единственное обходное решение, которое у меня есть, заключается в создании новой таблицы каждый раз, когда я импортирую и перехожу через первую строку файла excel, чтобы найти имена полей, которые затем используются при создании таблицы.
, но это грязное обходное решение. Я знаю, что можно импортировать в совершенно новую таблицу, используя интерфейс доступа к Microsoft. Требуется несколько кликов, а затем все это хорошо.
Я хочу программное решение.
Function loadData()
Dim strPathFile As String, strFile As String, strPath As String
Dim strTable As String
Dim blnHasFieldNames As Boolean
' Change this next line to True if the first row in EXCEL worksheet
' has field names
blnHasFieldNames = True
' Replace C:\Documents\ with the real path to the folder that
' contains the EXCEL files
strPath = "C:\Bdz outputs\"
' Replace tablename with the real name of the table into which
' the data are to be imported
strFile = Dir(strPath & "*.xlsx")
strTable = Left(strFile, 8)
strPathFile = strPath & strFile
'Debug.Print (createTable("hello", "asdasd"))
Do While Len(strFile) > 0
strPathFile = strPath & strFile
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "Table1", strPathFile, False
' 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
Если вы не можете найти способ сделать это с помощью TransferSpreadsheet, вы можете написать код для открытия и чтения таблицы Excel. Можно изменить названия заголовков программным способом или другой вариант, если типы значений столбца excel всегда соответствуют типам столбцов доступа, вы можете сохранить имена доступа и просто вставить после заголовка excel по очереди. – PKatona
Возможно, я не понимаю, но если вы укажете несуществующее имя таблицы в аргументе таблицы [TransferSpreadsheet] (https://msdn.microsoft.com/en-us/library/office/ff844793.aspx) и укажите * True * для заголовков столбцов, MS Access импортирует электронную таблицу точно с заголовками файла Excel. – Parfait