吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3028|回复: 16
收起左侧

[Python 原创] 使用 openpyxl 操作 Excel

  [复制链接]
简讯 发表于 2022-10-18 10:59

由于单位有任务,需要按照名册制作多个工作表。手动复制和修改内容太费事了,所以使用python完成此项工作,为之后的此类工作提供一个通用脚本。

安装依赖库

pip install openpyxl lxml

我们需要用到openpyxl。在官方文档中提到,如果需要处理较大的文件,在安装了lxml后会非常有用,而且python在解析一些html和其他文本时也会用到lxml,所以借这个机会安装完成。

如果在操作Excel时需要处理图片,还需要安装pillow

pip install pillow

这样我们就把全部依赖安装好了。

使用

在操作之前,我先说一下需求。单位已经给我了一个考评表模板,需要根据这个模板,按名册生成工作表(sheet),并把每一个工作表的名称改成名册中的名字。每一个工作表需要修改天填表日期,分数,和扣分项。

这样就有了思路,简单来说就是打开一个Excel表格,先按照名册的人数复制工作表,把工作表的名称替换成名册中的名字,再把每个工作表中对应坐标格内的数据批量(随机)修改。

因为我们操作已经存在的文件,所以直接加载文件就行。我们通过faker库生成若干虚拟名字,这样一个名册就准备好了。接下来就是复制工作表了。

import openpyxl

# 文件位置
doc_path = "~/考评表.xlsx"

# 加载文件
wb = openpyxl.load_workbook(doc_path)

# 注:names 列表通过 faker 库生成
names = ['邓淑兰','董凤兰','田洋','陈波','逯丽','柯金凤','王勇','陈玉梅','王飞','殷秀芳','胡旭','韩玲','李杰','陈建军','张杨','蔡成','徐倩','贾颖','刘峰','陈桂珍','宋淑珍','苏红霞','杜玉','林辉','陈佳','朱军','罗洋','王亮','王鹏','黄东']

我们根据名册数量,复制相应数量工作表并保存。

# 复制 sheet 工作表
people_number = len(names)
for item in range(1, people_number):
    ws = wb.active
    target = wb.copy_worksheet(ws)
wb.save(doc_path)

再根据名称批量修改工作表。

# 根据姓名列表修改工作表名称
sheet_names = wb.sheetnames
for num, item in enumerate(sheet_names):
    open_sheet = wb[item]
    open_sheet.title = names[num]
wb.save(doc_path)

再根据需求完成工作表的遍历修改,因为每一个工作表相当于用坐标表示的,所以我们只要根据坐标来批量或随机修改工作表中的内容。

例如考评表中分数在 A17 的格子内,那我们遍历所有的工作表,修改 A17 的格子。

# 得分所在坐标
record_loc = "A17"

# 修改姓名和得分
for item in wb.sheetnames:
    ws = wb[item]
    ws[record_loc] = f"姓名:{item}  得分:{random.choice([90, 100])}"
wb.save(doc_path)

WX20221017-171212@2x

这些操作基本就把所有的表格修改完成,如果得分是在某个范围,我们就可以使用 random 函数随机打分,并通过对应表格中的扣分项随机扣分。实现批量操作表格的目的。

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
十口月十一星 + 1 + 1 用心讨论,共获提升!
xiao123456hai + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cao777 发表于 2022-10-26 11:13
python操作excel文件真的是相当的方便 比c++容易多了 c++前前后后换了十几个库 哈哈
Hangjau 发表于 2022-11-3 21:24
xlwings  这个库从兼容性 和操作维度等 应该是最强大和适用的了。通过ipython 或者 jupyter 可实现交互式运行
异常马粥 发表于 2022-10-18 11:12
openpyxl库用起来简单。但是有个问题,往一个单元格里存入大量文本(几百个简体中文字)会出现丢失情况。目前找不到解决方法。只能换xlsxwriter库。
 楼主| 简讯 发表于 2022-10-18 11:16
异常马粥 发表于 2022-10-18 11:12
openpyxl库用起来简单。但是有个问题,往一个单元格里存入大量文本(几百个简体中文字)会出现丢失情况。目前 ...

对,这个库和其他相比比较好理解了。我还没遇到存大量文本的情况,我稍后测试一下。感谢提醒
wkdxz 发表于 2022-10-18 11:34
按名册做工作表确实好用,但以后要把工作表汇总又是一个大问题。除非每个表格都是自己填写,不乱填数据。
bester 发表于 2022-10-18 11:38
openpyxl这个库 好像不能动态计算公式的结果 能写公式但是得不到公式结果 是我不会操作嘛
dreampower 发表于 2022-10-18 11:39
楼主,用代码控制程序,这看起来好帅,教教俺要学什么,学哪些知识呗,感谢
andyshaw 发表于 2022-10-18 15:32
bester 发表于 2022-10-18 11:38
openpyxl这个库 好像不能动态计算公式的结果 能写公式但是得不到公式结果 是我不会操作嘛

对,我也有这样的需求,好像是不支持。需要将更改后的文件,保存后再读取,才能获取更新后的公式值。有的库支持。
FeiyuYip 发表于 2022-10-26 10:23
谢谢分享经验,最近也在用openpyxl处理表格,挺方便的。
paist 发表于 2022-10-26 19:46
只用过简单的情况,一般还是用VB
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表