让 Excel 插上 Python 的翅膀 主题小结
0. 引子
大家好,前段时间有点空,恰好和朋友聊到用 Python 助力 Excel 的话题,就抓紧出差途中的零星时间,写了几篇文章,简要叙述了用 Python 操作 Excel 的知识。很高兴看到很多朋友对这个话题感兴趣,也感谢许多网友督促更新,谢谢。
但确实工作太忙了,好久没有更新,见谅!
今天又在高铁上,有点时间。
回顾一下前面的帖子,基本概念、思路都讲到了。今天先做个小结吧,因为我确实不能保证有时间及时更新。再次致歉!!
此后有机会,可能会不定期提交几贴。
1. 技术思路
通过前面的帖子我们看到,用 Python 操作 Excel ,技术上,可以简单地分成两种思路:
思路1:用代码将 Excel 的内容读入系统,对读入的数据按需进行处理,得到所需的结果。这些结果可以直接使用,或者写回 Excel 文件。
思路2:用代码直接操纵 Excel 文件本身,或者直接操纵处理 Excel 中的数据。
- 题外话1
技术实现上,一个有意思的问题是:为什么这么多人在讲如何用 Python 操纵 Excel,咋很少看到有人讲用 Python 操纵 WPS ?
一方面,是因为 Excel 的数据结构是开放的。特别是升级到 Excel 2007以后(好像是这个版本,记不清了,反正就是扩展名改为 xlsx 之后。(当时微软还在推动将Office文档的数据结构作为国际标准,推动大家联署签名,当时正好在微软北京开会,有相关人员在会场让大家签名,许多人在签。我是一个不搞清楚为什么就不随意签字的人。搞清楚了之后,我没签。做标准的、开放的数据结构,我支持。但微软自己想成为国际标准,我弃权。))
下面我带大家认识一下 Excel 的 xlsx 文件的结构:
把一个 Excel 文件的扩展名改为 .zip。例如,将 orders.xlsx 文件的文件名改为 orders.zip。注意不是用压缩工具压缩成 zip,而是直接将文件重命名。
然后,您假装这是一个 zip 压缩文件,打开这个假装的压缩包。可以用 winrar,也可以用Windows资源管理器直接打开。(不懂为啥许多人要用winrar?Windows 资源管理器自带压缩啊,右键点一个文件即可发送为.zip文件。双击.zip文件即可打开。我安装winrar,仅仅是因为一些人发给我的文档是rar,抓狂。)
这个假压缩文件,其实也算是真压缩文件了,长这个样子:
我们看到,有完整的、复杂的层级结构。您可以尝试一层层去看,去用纯文本工具如 Notepad++ 打开里面的文件,可以找到您的数据。
具体我就不展开了。
多说一句, Word 也是这样的。请您测试一下:把一个有图片的 .docx 文件,扩展名改成 .zip。打开这个压缩包,可以看到你文档中的任何东西。
最有意思的是,所有图片,集中放到一个 images 文件夹中。
所以,您如果想有一个办法把一个 Word 文档中的所有图片拿出来,方法就是把这个 images 文件夹考出来啊。
还有一个有意思的话题:早期的 .doc 文档,我们知道不能把一个图片来回调整大小,越折腾越模糊。而 .docx 文档,图片随便折腾,还会保持清晰度。原因就是,原图片在 images 文件夹中存着呢,您折腾,只是在设置它的显示大小及方式,并没改原来的图片本身。
话说回来,刚才我说的是,Excel 的数据结构做得很好,很清晰。所以可以很好地用代码操控。
- 题外话2
其实,如果我们直接写代码去控制 Excel,我们自己写代码去操纵上面谈到的数据结构,也足够复杂。
但是,Python 的流行原因,Python 强大之处,在于有大量开源的、现成的库,大量现成的模块,可供我们使用。
其中,全世界有大量的热心人,写了很多对 Excel 进行处理的模块。例如 Pandas 自带的模块、xlwings 等。
但 WPS,就没有这个生态了。真希望有人做这些贡献啊。
- 回到技术思路1
技术思路1, 就是将 Excel 中的数据,直接读入计算机系统中,然后,这些数据已经和 Excel 没有关系了。用 Python 进行处理、使用。
当然,如果处理结果需要写回 Excel,to_excel() 写回去就是了,可以写回源文件,也可以新建一个。
Python 的 Pandas ,本身就提供了很好的支持。因为 Pandas 中的 DataFrame ,就是二维表结构,和 Excel 的 sheet 完全相符。
当然,有很多细节问题。在前面的帖子中,许多读者提出一些问题,能简单回答的,我就直接回复了。但有些一两句说不清的,希望以后有机会可以细讲。
看来,真有必要写一本书,来细细展开讲啊。(不敢再提书的事儿了,上一篇提了一句,管理员直接把我辛辛苦苦写的帖子删了,大大打击了我的积极性。幸亏申述找回。)
有兴趣深入钻研的朋友,可以看 Pandas 的官方文档相关部分:https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html,以及此链接的上下文相关文档。
- 回到技术思路2
简单来说,第二条思路,就是关注的是 Excel 文件本身。更关注处理 Excel 文件,或者直接操纵文件中的内容。
这其中,目前看到最好用的模块,就是 xlwings。真的很方便,其官方网站都说:xlwings - Make Excel Fly! 此言不虚。
我们在上一个帖子中,举了很多例子,大家看到了它的价值。也认可了用 Python 处理 Excel 有不同于 VBA 的强大之处。
同样,有很多细节要讲。目前精力不济啊,见谅。
有兴趣的朋友,建议看官方文档:https://docs.xlwings.org/en/stable/
2. 应用思路
从应用需求的角度,要具体分析。
如果您更关注数据,可以用 Pandas 的 read_excel() 方法,把数据读入系统去处理。这种情况,可以把 Excel 理解为数据收集工具。大量的数据、零散地存在于各个部门各个人员,例如周销售报表、客户填的一些资料等。如果有固定的格式,就可以写代码,批量读入,集中处理。然后存入数据库,做更多分析、处理、存档等。
如果更关注文档,例如上一帖的例子,需要批量创造 Excel 文档,或者批量修改 Excel 文档,可以使用高效的 xlwings 等模块。
另外,在其他一些场合,例如,结合使用 Word 与 Excel,结合使用 CRM 系统与 Excel,结合使用 OA 系统、财务系统 与 Excel 等等场合,都可以让Python发挥巨大的作用。
许多朋友在对比 VBA 与 Python,其实,各有长处吧。
VBA 在 Excel 内部工作,写宏。
Python 可以在每部工作,我的帖子里没有讲到。(看来真得找时间继续写啊),也可以在 Excel 外边工作。前面各贴都是这样的例子。
总之,用 Python 操控 Excel,为我们提高工作效率提供了更多的可能。
学习建议
我喜欢看系统化的官方文档,同时动手操作。
给出几个官方链接,供参考:
Pandas 入门教程: https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
Pandas 用户指南:https://pandas.pydata.org/docs/user_guide/index.html
Matplotlib 官网:https://matplotlib.org/
xlwings 官网:https://www.xlwings.org/
xlwings 官方文档:https://docs.xlwings.org/en/stable/
跋
今天这篇,没有具体的代码,没有展开举例。时间太少,这一篇,权当小结吧。
希望更多的朋友在 Excel 与 Python 间翱翔!
一起加油!
—— 我跑,故我在。 HiFrank
<<< 上一篇:
[ Excel-Python ] -9:让 Excel 起飞的超强 Python 库:xlwings
|