首页 > 解决方案 > Python 3.0 将 Excel 文件导入访问文件

问题描述

我使用 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)

标签: pythonexcelms-accesspyodbc

解决方案


考虑纯 SQL,因为 JET/ACE 引擎允许直接查询外部工作簿和数据库。您可以通过 MS Access 连接或 Excel 连接执行此操作,因为使用了相同的底层引擎。无需逐行游标追加。

下面假设所有 Excel 工作表列与所有 Access 表列以相同的顺序一对一匹配。如果您在 Access 表中使用自动编号字段,请考虑在附加查询中明确说明列INSERT INTOSELECT子句。

访问连接 (本地数据库表追加)

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()

推荐阅读