Python 3.0 Импорт файла Excel в файл доступа - PullRequest
1 голос
/ 20 ноября 2019

Я использовал Python 3 для создания файла Excel (.xlsx). Теперь я хочу преобразовать этот файл Excel в файл Access (.accdb). Я знаю, что Access может импортировать файл Excel, но я пытаюсь использовать Python для автоматизации этого.

В файле Excel 3 листа. Я установил связь между Excel и Access, но не уверен, как вставить листы / значения в файл Access. Большое вам спасибо за вашу помощь! Большое спасибо!

writer=pd.ExcelWriter('ETABS.xlsx',engine='xlsxwriter')
pointcord.to_excel(writer, sheet_name='Sheet1')
jointreaction.to_excel(writer, sheet_name='Sheet2')
writer.save()

import pyodbc
pyodbc.drivers()

DBFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.accdb'
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+DBFile)

exFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.xlsx'
conn1 = pyodbc.connect('DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ='+exFile,autocommit=True)
curs1 = conn1.cursor()
# the following returns list of tuples
excel_results = curs1.execute().fetchall()

curs.executemany("INSERT INTO ETABS values (?,?)", excel_results)
conn.commit()

for row in curs1.tables():
    print (row.table_name)

1 Ответ

0 голосов
/ 21 ноября 2019

Рассматривайте чистый SQL как механизм JET / ACE, позволяющий напрямую запрашивать внешние книги и базы данных. Вы можете сделать это либо из соединения с MS Access, либо из соединения с Excel, так как используется тот же базовый механизм. Нет необходимости в построчном добавлении курсора.

Ниже предполагается, что ВСЕ столбцы рабочего листа Excel совпадают один к одному с ВСЕМИ столбцами таблицы Access в том же порядке. Если вы используете поле автонумерации в таблице Access, рассмотрите возможность явного указания столбцов в пунктах INSERT INTO и SELECT запроса на добавление.

Подключение доступа (добавление таблицы локальной БД)

DBFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.accdb'
exFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.xlsx'

conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+DBFile)

# APPEND TO LOCAL TABLE
sql = """INSERT INTO ETABS
         SELECT * FROM [Excel 12.0 Xml; HDR = Yes;Database={myfile}].[Sheet1$];
      """

curs = conn1.cursor()
curs.execute(sql.format(myfile = exFile))
conn.commit()

Кстати, вы даже можете выполнить запрос таблицы составления вместо добавления к существующей таблице:

SELECT * INTO myNewTable FROM [Excel 12.0 Xml; HDR=Yes; Database={myfile}].[Sheet1$]

Подключение к Excel (добавление к внешней таблице БД)

DBFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.accdb'
exFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.xlsx'

conn = pyodbc.connect('DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ='+exFile)
curs1 = conn1.cursor()

# APPEND TO EXTERNAL TABLE
sql = """INSERT INTO [{myfile}].[ETABS]
         SELECT * FROM [Sheet1$];
      """

curs = conn.cursor()
curs.execute(sql.format(myfile = DBFile))
conn.commit()
...