Python 3.0 将Excel文件导入Access文件

1 人关注

我已经用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)
    
python
excel
ms-access
pyodbc
nseiong
nseiong
发布于 2019-11-21
1 个回答
Parfait
Parfait
发布于 2019-11-21
已采纳
0 人赞同

考虑纯SQL,因为JET/ACE引擎允许直接查询外部工作簿和数据库。你可以从 MS Access 连接或 Excel 连接中这样做,因为使用的是相同的底层引擎。不需要逐行游标追加。

下面假设所有Excel工作表的列与所有Access表的列按相同顺序一一对应。如果你在Access表中使用自动编号字段,请考虑在append查询的 INSERT INTO SELECT 子句中明确说明列。

访问连接 (本地DB表追加)

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 Connection (外部DB表追加)

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$];