2016-05-25 5 views
0

Я получил дамп базы данных от кого-то в одном файле Excel .xlsx, который содержит более 50 таблиц. Чтобы я мог понять это, мне придется загрузить его в базу данных и начать собирать некоторую информацию вместе.Excel Несколько таблиц для доступа к таблицам

Мне более комфортно с Ms Access, поэтому я остаюсь с ним на данный момент.

Как я могу импортировать этот единственный файл со всеми 50 рабочими страницами внутри 50 таблиц отдельно в Access db?

Может кто-то помочь, поскольку я получаю сообщение об ошибке при использовании простой опции внешних данных в Access.

+1

Какое сообщение об ошибке вы получаете? – Karlomanio

ответ

0

Использование Excel.Application объекта, чтобы получить из Excel Workbook все имена в Worksheets коллекции, а также зарегистрировать имена всех листов в книге:

Dim App As Object           'Excel interface 
Dim File As Object           'Your file  
Dim ws As Variant            'Your worksheet 

Set App = CreateObject("Excel.Application")     'This opens excel application windows 
Set File = App.Workbooks.Open(fileName)      'This opens your particular excel file (or workbook) 

For each ws In File 
    'Register Name in a table named tblSheetNames, Containing a field named 'ShtNm': 
    CurrentDb.Execute "INSERT INTO tblSheetNames(ShtNm) VALUES ('" & ws.Name & "')" 
Next 
'Close the App to allow link to the Excel file 
App.Close: Set App = Nothing 

Затем импортировать все эти листы:

'Import all these worksheets: 
Dim rst as DAO.Recordset 
Set rst = CurrentDb.OpenRecordset("tblSheetNames") 
Do While Not rst.Eof 
    'Link to SpreadSheet, **make sure you add the '!' to the spread-sheet-name for the *Range* parameter** 
    DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "Temp", fileName, rst!ShtNm & "!" 
    'Dump sheet into table 'MyTable' and then Delete Link: 
    CurrenDb.TableDefs.Delete("Temp") 
rst.MoveNext: Loop 

add the '!' to the spread-sheet-name for the Range parameter

+0

Извините за мои ограниченные знания и глупый вопрос. Где я вставляю эти макросы в один файл excel или Access db? – user2430036

+0

В доступе. Вам также необходимо указать значение для 'fileName' в коде. – marlan

+0

Для второго макроса я получаю сообщение об ошибке «Вы ввели неправильный тип данных для одного из аргументов. Я использую .. Sub ImportData() Dim rst As DAO.Recordset Установить rst = CurrentDb.OpenRecordset (" tblSheetNames ") Do While Not rst.EOF Ссылка на SpreadSheet, ** убедитесь, что вы добавили '!' на имя расширенного листа для параметра * Range * ** DoCmd.TransferSpreadsheet acLink, acSpreadsheetTypeExcel12, "Temp", "C: \ File.xlsx", rst! ShtNm & "!" 'Дамп лист в таблицу' MyTable», а затем Удалить Ссылка: CurrenDb.TableDefs.Delete („Temp“) rst.MoveNext:? Loop End Sub – user2430036

0

'Импорт данных из всех файлов EXCEL в одной папке через Trans ferSpreadsheet (VBA) '

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 = False 

' Replace C:\Documents\ with the real path to the folder that 
' contains the EXCEL files 
strPath = "C:\Documents\" 

' Replace tablename with the real name of the table into which 
' the data are to be imported 
strTable = "tablename" 

strFile = Dir(strPath & "*.xls") 
Do While Len(strFile) > 0 
     strPathFile = strPath & strFile 
     DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ 
      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 

Идея приходит прямо здесь.

http://www.accessmvp.com/KDSnell/EXCEL_Import.htm#ImpFolderFiles

проверить ссылку. Там вы найдете несколько других действительно крутых и утилитарных концепций.

+0

Тонкий код и ссылка вы принесли @ ryguy7272, обратите внимание, что запрос был кодом для импорта Рабочие листы из одного файла. – marlan

Смежные вопросы