概述
最近在用python
处理Excel
表格是遇到了一些问题
- 1,
xlwt
最多只能写入65536行数据, 所以在处理大批量数据的时候没法使用 - 2,
openpyxl
这个库, 在使用的时候一直报错, 看下面代码
from openpyxl import Workbook
import datetime
wb = Workbook()
ws = wb.active
ws['A1'] = 42
ws.append([1,2,3])
ws['A2'] = datetime.datetime.now()
wb.save('test.xlsx')
- 报错信息如下
File "srclxmlserializer.pxi", line 1652, in lxml.etree._IncrementalFileWriter.write TypeError: got invalid input value of type <class 'xml.etree.ElementTree.Element'>, expected string or Element
- 有没有人知道是什么原因呀? 惆怅!!!
- got invalid input value of type <class ‘xml.etree.ElementTree.Element’>, expected string or Element
填坑:
- 出现这个问题好久了, 不知道怎么解决, 也去
google
和baidu
搜索, 一篇文章提到了可能是包冲突的问题, 抱着试一试的心态, 没想到解决了 lxml
这个包和openpyxl
起冲突, 解决办法, 先卸掉lxml
pip uninstall lxml
- 最后运行上面处理
excel
的代码, 运行成功, 无错误!!! 困扰了我很长时间的问题得以解决!!!
还有另一种方法:
- 由于
lxml
包经常要用到, 所以每次卸载掉再安装实在是麻烦, 所以我有下面的想法 - 例如下面的代码, 从数据库中取数据存入表格
import pymysql
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine("mysql+pymysql://user:password@ip:port/database",encoding='utf-8')
sql = """SELECT catalog_1 as '目录一',catalog_2 as '目录二',catagory as '目录三',
region as '区域',year as '年份',data as '数据',unit as '单位' from table
where catalog_1 = "农业" limit 100
"""
df = pd.read_sql_query(sql, con=engine)
# writer = pd.ExcelWriter(r'C:UsersAdministratorDesktoptest.xlsx')
# df.to_excel(writer)
# writer.save()
- 这时候, 我们不选择
to_excel()
这个函数, 而是选择使用to_csv()
; 即可避免openpyxl
和lxml
的冲突
df.to_csv(r'C:UsersAdministratorDesktoptest.csv',index=False)
# 经过验证, 此种方法是行得通的
- 最后得到的
csv
文件用Excel
可以直接打开, 也可以另存为*.xlsx
文件
最终解决办法
- 今天发现我使用的
openpyxl
版本是3.0.2
, 卸载此版本, 安装3.0.0
版本 - 最新更新于
2020-3-16
, 经过测试, 此报错解除;
最后
以上就是雪白小笼包为你收集整理的使用openpyxl时遇到的坑的全部内容,希望文章能够帮你解决使用openpyxl时遇到的坑所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复