使用openpyxl时遇到的坑

最近在用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 "src\lxml\serializer.pxi", line 1652, in lxml.etree._IncrementalFileWriter.write TypeError: got invalid input value of type , expected string or Element

  • 有没有人知道是什么原因呀? 惆怅!!!
  • got invalid input value of type , expected string or Element

填坑:

  • 出现这个问题好久了, 不知道怎么解决, 也去googlebaidu搜索, 一篇文章提到了可能是包冲突的问题, 抱着试一试的心态, 没想到解决了
  • 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:\Users\Administrator\Desktop\test.xlsx')
# df.to_excel(writer)
# writer.save()
  • 这时候, 我们不选择to_excel() 这个函数, 而是选择使用to_csv() ; 即可避免openpyxllxml 的冲突
df.to_csv(r'C:\Users\Administrator\Desktop\test.csv',index=False)
# 经过验证, 此种方法是行得通的
  • 最后得到的csv 文件用Excel 可以直接打开, 也可以另存为*.xlsx文件

最终解决办法

  • 今天发现我使用的openpyxl版本是3.0.2, 卸载此版本, 安装3.0.0版本
  • 最新更新于2020-3-16, 经过测试, 此报错解除;

你可能感兴趣的:(python)