前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教学|还在手动汇总Excel子表格数据?

手把手教学|还在手动汇总Excel子表格数据?

作者头像
用户2966292
发布2022-06-08 19:02:25
9220
发布2022-06-08 19:02:25
举报
文章被收录于专栏:CoXie带你学编程CoXie带你学编程

学习、生活、工作中,你一定遇到过,在一个 Excel 表格中,你需要将多个子表格的数据汇总到一个子表格中,看图:

实现这一功能,可以直接用 Excel自带的语法,但操作上还是比较复杂的,今天我给大家科普一下用 Python也能完成以上操作,先把基本思路告诉大家:

  • pandas 处理多个表格

直接上实操,这里我们以之前给大家看过的工资表为例,如果大家没有数据的话,可以自己先造点数据。

合并多个 sheet 数据到汇总 sheet

其实,如果你的源文件是 csv 格式导入进来的话,可以直接用openpyxl来处理,但是很多时候我们拿到手上的表格中带了各种各样的格式,那么我们使用 openpyxl处理数据就会有麻烦。因为openpyxl在处理数据的时候,会识别样式,认为这些有样式的行是有数据的,所以纯粹的sheet.append()方法是无法将数据写入这些所谓的空行。

所以我们这里为了普适性,利用 pandas。pandas还是非常方便的,因为他可以无视表格的样式。

代码语言:javascript
复制
path = glob.glob(/demo3.xls)[0]
workbook_1 = load_workbook(filename=path)

# 获取总表数
sheet_names = workbook.sheet_names 
df_lst = []

for i in range(1, len(sheet_names )):
    df = pd.read_excel(path_new , encoding='utf-8', sheet_name=i, skiprows=1)
    df_lst.append(df)

# 把获取的各表纵向合并,
df_total = pd.concat(df_lst,axis=0,ignore_index=True)
# 注意纵向合并常常需要重置索引,索引是从0开始,利用索引+1重置各记录的编号
df_total['编号'] = df_total.index + 1

完成 Excel 中 Sheet 的读取并合并汇总到汇总表之后,所有的数据就可以在“汇总”这个表中看到了。

但是,这里我们要注意,由于直接使用 dataframe.to_excel会把原来的 Excel 全都覆盖掉了。

什么意思?

也就是说你执行完程序之后,只剩下一个有且仅有汇总表数据的 Excel了,其他 sheet 会全部丢失。

所以,为了保险起见,我建议另存为一个新的 Excel。我们可以利用 pd.ExcelWriter 将汇总数据另存为一个新 Excel。

代码语言:javascript
复制
writer = pd.ExcelWriter(path, engine='openpyxl')
writer.book = workbook
workbook.remove(workbook['汇总'])
df_total.to_excel(excel_writer=writer, sheet_name=u'汇总', index=None)
writer.close()
workbook._sheets.insert(0, workbook._sheets.pop())
workbook.save(filename= '/demo3-1.xls')

大功告成,唯一的缺点就是没有格式了,不过一般这样汇总之后肯定要重新整理格式的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python不等式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 合并多个 sheet 数据到汇总 sheet
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档