python - 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)
解决方案
考虑纯 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()
推荐阅读
- gitlab - 如何在 readme.md 中显示每个分支的 gitlab 徽章
- javascript - 如何使用 100 个其他值重复脚本最多 100 次
- entity-framework-6 - 实体框架 - 搜索加密列
- android-studio-3.0 - Dart Flutter:为什么 Android Studio Emulator 没有 Gallery?
- hibernate - 如何使用 CrudRepository findByName 通过抽象 MappedSuperClass 获取实体
- intellij-idea - Intellij Scala Formatter 将注释和方法定义放在同一个
- node.js - 如何删除 mongo 中的循环依赖错误?我正在使用猫鼬和快递
- visual-studio - opencv 3.4.1 视觉工作室 2017
- javafx - JavaFX 最小化和最大化带有动画的未装饰舞台
- css - Webkit-tap-highlight-color 不适用于 li 元素?