让 Excel 起飞的超强 Python 库:xlwings
0. 引子
又在高铁上了,不能总是发高铁的照片,发一张中国空间站的吧,向中国航天致敬!
高铁上,一个长达5个半小时的旅程。可以认真想想写什么了。
毕竟内容太多,是进入一个新的话题,还是继续细化上一帖的问题与细节?
关于 Excel - Python 的话题,希望写哪些内容,或者有什么好的思路,请各位学友,随时提出您的建议,就此谢过!
这次,还是不拘泥细节,开一个新的知识点:xlwings
1. xlwings - Make Excel Fly!
xlwings - Make Excel Fly! 这句话是 xlwing 官方文档的第一句话。官网文档地址:https://docs.xlwings.org/en/stable/
我们上一帖已经讲了 Pandas,知道 Pandas 是一个强大的数据分析处理库,其中的 read_excel() 和 to_excel() 方法可以将 Excel 文件的内容读到 DataFrame 中,或者写回去。
而数据一旦在 DataFrame 中,我们就可以随便玩儿了,各种处理,得到想要的结果。
很灵活,但是,DataFrame 本质上和 Excel 文件是没有关系的。数据读过来以后,就和当初那个 Excel 没关系了。直到你写回当初那个 Excel 文件。
我们可不可以通过 Python 代码,直接随时处理 Excel 中的数据呢?
我们先来试一把:
请先直接在电脑中打开一个现成的 Excel 文件,那就还是我们的 orders2.xlsx 吧。如下:
然后,在 Jupyter 中输入如下代码:
- import xlwings as xw
- xw.Range('C2').value = 888
复制代码
瞬间,这个 Excel 文件中的 圆珠笔 数量 由100 变为 888 了。 惊奇不惊奇?!
我们没做别的,没有用前面帖子中的代码。就只是上面的两句代码,其实应该说,就第二行这一行代码。
这就是 xlwings ! 让 Excel 起飞的 Python 库。
2. xlwings 的基本概念
上面的代码太奇妙了,我们甚至都没有说是哪个文件。事实上,我们是需要指出是哪个文件的,如果不具体指出,那就是当前打开的 Excel 的当前 Sheet。
我们来看一段完整的代码:
- import xlwings as xw
- app=xw.App(visible=True,add_book=False)
- wb = app.books.open('d:/demo/orders2.xlsx')
- sh1 = wb.sheets['订单']
- sh1.range('C2').value = 999
- wb.save()
- wb.close()
- app.quit()
复制代码
在 Jupyter 中的截图如下:
在图中第2个 Cell 中:
第1行:App 就是指的 Excel 应用软件。即 用 xlwings 打开 Excel,Excel 应用程序窗口可见,不新建工作簿。如果写成 visible=False,则看不见 Excel 软件,它在后台直接偷偷把事儿干完。
第2行:在打开的 Excel 软件中,打开文件 oders.xlsx。
第3行:指向 sheet 订单
第3个 Cell 中的代码:将这个 sheet 的 C2单元格的值 设为999.
第4个 Cell:
第1行:保存该工作簿。如果您按我的步骤一步步操作的话,前面最开始的设置888的例子,你关闭这个Excel时,他问你存不存。因为没有用代码直接去存。
第2行:关闭该工作簿。就是关闭 orders2.xlsx文件。
第3行:退出 Excel 应用。就是把 Excel 软件给叉叉了。
这样看的话,是不是又觉得比直接用 Pandas 代码多了?
其实本质是:第2个Cell 中和第4个Cell中的代码,只是在开头和结尾用,而第3个Cell,才是核心,在这里,你可以玩儿各种骚操作。
什么是 Cell ?
Cell 是 Jupyter 中写 Python 代码的格子。
什么是 Jupyter?
Jupyter 是一个非常方便的 Python 开发环境。
可以看此前的帖子:“[ Excel-Python ] -3:准备一个写 Python 的环境” http://club.excelhome.net/thread-1587550-1-1.html
如何成为 Jupyter 高手?
最好的方法,是看我的书哦。
3. xlwings 应用举例
下面,我们给出几个使用 xlwings 的例子:
1)批量新建 Excel 工作簿:
- import xlwings as xw
- app = xw.App(visible=False, add_book=False)
- for i in range(10):
- wb = app.books.add()
- wb.save(f'd://demo//NewTest{i}.xlsx')
- wb.close()
-
- app.quit()
复制代码
以上代码,在文件夹 d:\demo\下,新建了10个Excel文件,文件名为 NewTest0.xlsx 到 NewTest9.xlsx
2)批量新建 sheet :
- import xlwings as xw
- app=xw.App(visible=False,add_book=False)
- wb = app.books.open('d:/demo/NewTest1.xlsx')
- for j in range(1,13):
- sh=wb.sheets.add(str(j)+'月绩效')
-
- wb.save()
- wb.close()
- app.quit()
复制代码 以上代码,在文件 NewTest1.xlsx 中,新建了12个月的绩效sheet。
3)合并单元格:
- sheet.range('A1:C2').merge()
复制代码 以上代码,将单元格A1到C2合并
4) 设置字体、字号、颜色
- sh.range('A1').api.Font.Size = 16
- sh.range('A1').api.Font.Bold = True
- sh.range('A1').api.HorizontalAlignment = -4108
- sh.range('A1').color=(0,128,0)
复制代码 以上代码,设置字号为16,粗体,居中,绿色。
其中,HorizontalAlignment : -4108 水平居中。 -4131 靠左,-4152 靠右。
5) 插入公式
- sh.range('C9').formula = '=SUM(C6:C8)'
复制代码 此行代码将公式插入C9中。
6)批量举例
好了,我们把上述代码规整一下,创建公司各员工的绩效表:
这个例子,创建了100个文件 员工x绩效表.xlsx,每个文件中包括12个月的sheet,内部写好了公式。效果如下:
4. 然后
然后,我们会继续。可能是新的功能强大的内容展示,也可能是对此前不求甚解的知识的梳理细化。
也请大家提出继续怎么走的建设性意见。
谢谢
—— HiFrank 我跑,故我在
<<< 上一篇:
[ Excel-Python ] -8:用 Python 处理 Excel 中的行、列、单元格
http://club.excelhome.net/thread-1589109-1-1.html
|