写点什么

Python:Excel 自动化实践入门篇 甲【送图书门票】

作者:eng八戒
  • 2023-02-26
    广东
  • 本文字数:2989 字

    阅读完需:约 10 分钟

Python:Excel自动化实践入门篇 甲【送图书门票】

*以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=2247485524&idx=1&sn=7af7790002e0e606bc2ba63f3a9a7327&chksm=f96cbcc0ce1b35d6079e63cb87964541c716c8b6b5e9969bb06ff4bcae8460e46293f0d3f306&token=365526592&lang=zh_CN#rd


***


正文开始之前,先给朋友们宣布个好消息,文末有送图书门票的福利活动,不要错过哦!




今天周五,马上就到下午 6 点钟,该下班的时候了,小菜一把抓起手机刷起微信。


突然,她老板跑来小菜身后拍了拍肩膀喊:“小菜啊,我这有几份 excel 表格”,把小菜吓了一跳,立马放下手里的手机。


老板继续说,“邮件发你了,里边都是这次的出货单,明天来加会儿班弄好它,辛苦一下哈!” 说完也不等回应就转身走了


“哎” 小菜狠狠地挤出一句话,却在心里嘀咕着要怎么应付领导的吩咐,“怎么那么倒霉?又来 Excel 表,偏偏又到周末了,头疼啊……哼 ”


虽然离她坐得很远,看着小菜这么苦恼,想起自己其实是个码农,手里也有点私货,于是我走过去把自己私藏了很多年的公众号推荐给了她。「ENG 八戒」




说起办公自动化就离不开对 excel 表格的处理,现在哪个办公族不得每天面对着几份 excel 过日子?那么有没有想过,让机器帮我们自动处理这些杂活,而我们应该留给自己更多的时间去做一些更有意义的事情?


今天就带大家一起来看看怎么用 python 自动化处理 excel 表格!而处理 excel 表格的 python 功能库有很多,常用的是 openpyxl。openpyxl 库可以对 excel 表格做什么呢?比如读写、算术、绘制图表等等。

安装 openpyxl

openpyxl 库不是 python 的自带模块,属于第三方模块,所以需要额外安装才能使用。


在安装 openpyxl 库之前,建议先配置好 python 工程的虚拟环境 venv。这里不展开介绍如何配置虚拟环境,有需要可以点击 《Python:界面开发,wx入门篇 上》前往查看。


本文以下内容基于 windows 10 和 Python3.


终端输入


pip install openpyxl
复制代码


终端输出



由于下面的介绍会用到图片操作的功能,所以还需要安装 Pillow 库。


终端输入


pip install pillow
复制代码


终端输出



看看最后的安装成果,终端输入


pip list
复制代码


终端输出


创建 excel 表格文件

最简单的自动化操作就是创建一个 excel 空白表格文件,暂定文件名为 test.xlsx,然后随意写点什么进去


import openpyxl
workbook = openpyxl.Workbook()sheet = workbook.active
sheet['A1'] = 'hello pytho excel !'workbook.save(filename="./test.xlsx")
复制代码


上面的代码先是导入了库 openpyxl,然后实例化工作簿类 Workbook,通过工作簿的属性 active 获取到活跃的工作表 sheet。


基于字典的操作方式,对工作表 sheet 的 A 列 1 行写入字符串 ‘hello pytho excel !’。如果你使用过 excel 表格,会记得 excel 表格的行是从 1 开始的,列是从 A 开始的。


最后调用工作簿的 save 方法写入硬盘,自动生成文件 test.xlsx。


好了,代码写好怎么跑起来呢?


把上面写好的代码保存到文件(.py)中,我这里随意定为 main.py,然后在令行终端里输入并回车就会执行起来


python main.py
复制代码


执行完毕后,打开程序创建好的 excel 文件 test.xlsx 看看



看起来效果很好。

写入

上面已经知道了怎么创建新的 excel 表格文件,那么怎么在已有的 excel 表格文件的指定单元格 cell 写入内容呢?


上面介绍的方法 Workbook() 会覆盖原有文件,为了不覆盖现有文件,可以改用方法 load_workbook() 同时传入文件名以加载现有的工作簿。


指定单元格有两种方式,通过表格 sheet 的方法 cell() 或者表格 sheet 直接引用单元格名称。


比如


a2 = sheet.cell(row = 2, column = 1)a3 = sheet['A3']
复制代码


找到了单元格 cell,又怎么写入内容呢?直接赋值还是修改属性值?答案是都可以,直接赋值就是对单元格 cell 对象赋值(要求引用单元格名称),修改属性是对单元格 cell 对象的 value 属性赋值


a2.value = "修改属性1"a3.value = "修改属性2"sheet['A4'] = "直接赋值"
复制代码


来一段完整的代码


import openpyxl
workbook = openpyxl.load_workbook("./test.xlsx")sheet = workbook.active
a2 = sheet.cell(row = 2, column = 1)a3 = sheet['A3']
a2.value = "修改属性1"a3.value = "修改属性2"sheet['A4'] = "直接赋值"
workbook.save(filename="./test.xlsx")
复制代码


看看运行效果



如果我们需要往表格里追加大量的数据呢?总不能像上面那样往单元格一个一个地写入吧?


可以使用表格 sheet 的 append() 方法一次性写入一行数据


import openpyxl   workbook = openpyxl.load_workbook("test.xlsx")sheet = workbook.active
data = ( ('a', 'b', 'c'), ('d', 'e', 'f')) for row in data: sheet.append(row)
workbook.save('test.xlsx')
复制代码


看看实际效果


读取

上面介绍了怎么对 excel 表格写入内容,那么怎么读出来呢?


读取单元格内容,可以直接读取单元格 cell 的属性 value 值


print(f"{sheet['A4'].value}")print(f"{sheet.cell(row = 4,                    column = 1).value}")
复制代码


那么如果需要一次性读取一个区域的数据呢?


方法有两种,一种通过遍历指定区域内每个单元格的方式,另一种是通过单元格名称批量读取。


先介绍第一种:需要遍历每个单元格的内容,那么就需要知道行列的最大数量用于控制单元格循环遍历的次数,分别对应表格 sheet 的属性 max_row 和属性 max_column。


下面来试一下把第一列和第二行的所有单元格内容读取并打印出来


import openpyxl
workbook = openpyxl.load_workbook("test.xlsx") sheet = workbook.active row = sheet.max_rowcolumn = sheet.max_columnprint(f"Total Row num: {row}")print(f"Total Column num: {column}")
print("\nValue of first column:")for i in range(1, row + 1): print(sheet.cell(row = i, column = 1).value)
print("\nValue of second row")for i in range(1, column + 1): print(sheet.cell(row = 2, column = i).value, end = " ")
复制代码


终端输出



接着介绍第二种:通过表格的单元格名称批量读取时,单元格名称分别对应矩形区域的左上角和右下角的单元格名称。这种方式类似对列表的切片操作。


下面来试一下批量读取单元格 A4 到单元格 C6 的矩形区域的内容,并打印出来


import openpyxl
workbook = openpyxl.load_workbook("test.xlsx") sheet = workbook.active
cell_obj = sheet['A5:C6']for cell1, cell2, cell3 in cell_obj: print(cell1.value, cell2.value, cell3.value)
复制代码


终端输出




图书 《Python+Excel 报表自动化实战》


————————————


京东价:¥54.50


抢购链接:https://u.jd.com/Ks9SWZt




由于篇幅受限,本系列教程还未完结,下一篇《Python:Excel 自动化实践入门篇 乙》将在本公众号稍后推送,如果你对此教程有兴趣或者想和我一起交流更多精彩内容,欢迎关注我的微信公众号 「ENG 八戒」,等着你哦!



福利来了 !!!

这次搞了个双重福利,两份福利都可领取。


第一重,送图书,这本书是机械工业出版社出版的《Python+Excel 报表自动化实战》。


请点击 传送门 参与领取



第二重,送深圳福田出海展会门票若干,门票由 Cloud Ace 倾情赞助。


请点击 传送门 参与领取


【温馨提示:本活动同时在稀土掘金、博客园、微信公众号举办,互不干扰,欢迎各平台搜索博主 ENG 八戒 参与最新活动】

用户头像

eng八戒

关注

我的微信公众号 ENG八戒 2018-06-01 加入

一枚工程师Engineer自称八戒。从事过嵌入式、GUI、系统集成,涉猎C/C++、Qt、Python、IOT、机器人各领域,不设上限。作为技术传播的年度优秀作者,喜爱读书和写作之余,也爱分享生活乐趣。

评论

发布
暂无评论
Python:Excel自动化实践入门篇 甲【送图书门票】_python excel_eng八戒_InfoQ写作社区