文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何解决使用openpyxl时遇到的问题

2023-06-14 04:49

关注

本篇内容主要讲解“如何解决使用openpyxl时遇到的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决使用openpyxl时遇到的问题”吧!

最近在用python处理Excel表格是遇到了一些问题

1, xlwt最多只能写入65536行数据, 所以在处理大批量数据的时候没法使用

2, openpyxl 这个库, 在使用的时候一直报错, 看下面代码

from openpyxl import Workbookimport datetimewb = 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 <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 pymysqlimport pandas as pdfrom sqlalchemy import create_engineengine = 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() ; 即可避免openpyxl 和lxml 的冲突

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—使用Openpyxl的dataframe_to_rows的一个小坑

这个坑说大不大,说小遇到了也头疼。

一般我们把dataframe直接写到Excel文件,直接 df.to_excel即可。不过如果想把多个表格写入同一个工作表呢,那就需要用openpyxl的dataframe_to_rows功能。

看下面一段代码。

import pandas as pdfrom openpyxl import Workbookfrom openpyxl.utils.dataframe import dataframe_to_rowsdf1=pd.DataFrame([[1,4],[2,5],[3,6]] ,index=['a','b','c'],columns=['a','b'])df2=pd.DataFrame([[1,4],[2,5],[3,6],[7,8]] ,index=['d','e','f','g'],columns=['a','b'])wb=Workbook()ws=wb.active #打开工作表#把df1写入工作表for row in dataframe_to_rows(df1): ws.append(row)#换行ws.append([])#把df2写入工作表for row in dataframe_to_rows(df2): ws.append(row)wb.save('text.xlsx')

这段代码就是把df1,df2都写入到一个工作表,但一看结果,傻了,怎么行和内容之间多了空行啊

如何解决使用openpyxl时遇到的问题

看看空行是如何产生的呢

如何解决使用openpyxl时遇到的问题

原来多了一个None啊,难怪是空行,目测None是index带来的,那就把index去掉呗

如何解决使用openpyxl时遇到的问题

这回None是没有了,但是index的内容也想要显示,怎么办呢,这么办:

如何解决使用openpyxl时遇到的问题

哈哈,这样就完美了。这里reset_index的意思就是把index列,变成普通列,比如:

如何解决使用openpyxl时遇到的问题

如上图,如果直接reset_index,index列变成普通列,但是列头自动变成了index,这可不好,所以先给index列赋值,也就是df1.index.name=‘code'

最后代码如下

import pandas as pdfrom openpyxl import Workbookfrom openpyxl.utils.dataframe import dataframe_to_rowsdf1=pd.DataFrame([[1,4],[2,5],[3,6]] ,index=['a','b','c'],columns=['a','b'])df2=pd.DataFrame([[1,4],[2,5],[3,6],[7,8]] ,index=['d','e','f','g'],columns=['a','b'])wb=Workbook()ws=wb.active #打开工作表df1.index.name='code1'df2.index.name='code2'#把df1写入工作表for row in dataframe_to_rows(df1.reset_index(),index=False): ws.append(row)#换行ws.append([])#把df2写入工作表for row in dataframe_to_rows(df2.reset_index(),index=False): ws.append(row)wb.save('text.xlsx')

结果,哈哈,完美

如何解决使用openpyxl时遇到的问题

到此,相信大家对“如何解决使用openpyxl时遇到的问题”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯