前面我们学习了Python使用openpyxl模块处理Excel文件的大部分内容,今天,我们通过一个例子来学习Python使用Excel公式的方法,引出今天的主题利用openpyxl处理Excel公式。
一、使用openpyxl模块处理Excel公式的方法
先构造一个应用Excel文件
# -*- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook('example.xlsx')
ws=wb.active
ws["A1"]=1000
ws["A2"]=2000
ws["A3"]=3000
直接将公式内容写入响应的Cell实例(单元格)中即可,为单元格设置公式就像设置其他文本值一样。
ws["A4"] = "=SUM(1, 1)"
ws["A5"] = "=SUM(A1:A4)"
print(ws["A4"].value) # 默认只打印公式内容,不打印结果
print(ws["A5"].value) # 同上
# 保存文件
wb.save("example.xlsx")
Excel单元格中插入公式
插入公式后打印单元格内容
打开Excel表格后显示效果(默认不设置任何参数的时候显示公式计算后的数值),如下图所示。
默认情况下Excel显示效果
如果你希望看到该公式的计算结果,而不是原来的公式,就必须将load_workbook()的data_only关键字参数设置为True。这意味着Workbook对象要么显示公式,要么显示公式的结果,不能兼得(但是针对一个电子表格文件,可以加载多个Workbook对象)。
在交互式环境中输入以下代码,看看有无data_only关键字参数时,加载工作簿的区别。
(一)使用data_only参数
# -*- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook('example.xlsx', data_only=True)
ws=wb.active
print(ws[‘A4’].value)
print(ws[‘A5’].value)
data_only为True时打印效果
在这里必须说明的是,当使用data_only=True时,虽然你能看到公式及显示的结果,除非你再次将Excel打开并保存一下,否则,公式是不会应用到Excel表格中,虽然你执行了wb.save(‘example.xlsx’)操作。这是和不设置参数是不一样的。
(二)使用data_only参数
# -*- coding: utf-8 -*-
from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook('example.xlsx')
ws=wb.active
print(ws[‘A4’].value)
print(ws[‘A5’].value)
默认不设置data_only时的效果
上面演示了data_only参数设置效果,当data_only=True请牢记上面的“坑”。
二、实例演示
我们以前面的“population.xlsx”为原始表格,统计“20XX年X国人口统计”表格的人口总数。将统计结果放在“人口数量”列的最后一行,并将该行前三个单元格进行合并(样式自己定义哦)。
不赘述直接上代码
import openpyxl
wb = openpyxl.load_workbook("population.xlsx")
ws = wb.get_sheet_by_name(wb.get_sheet_names()[0])
row = ws.max_row
ws.merge_cells("A{0}:C{0}".format(row + 1))
ws['A{0}'.format(row+1)].value = "总计"
ws.cell(row = row + 1, column = 4).value = "=SUM(D3:D{0})".format(row)
# 保存
wb.save("population.xlsx")
程序运行效果图
三、实例分析
Excel公式赋予电子表格一定程度的编程能力,但对于复杂的任务,很快就会失去控制。例如,即使你非常熟悉Excel的公式,要想弄清楚=IFERROR(TRIM(IF(LEN(VLOOKUP(F7,Sheet3!$C$1:$D$10000,2,FALSE))>0,SUBSTITUTE(VLOOKUP(F8, Sheet2!$B$3:$A$30000, 1, FALSE), " ", ""),"")), "")实际上做了什么,也是一件非常头痛的事。Python代码的可读性要好得多。因此,利用Python对打开的数据对象进行复杂的条件判断,这个过程中使用的是Python语法,而非公式,这样可以大大提高代码的可读性和处理具体问题的效率。上面的例子只是简单的对求和公式进行了例举,这个例子只起了个抛砖引玉的效果,如果涉及更多复杂的条件筛选单元格,使用Python进行处理是不错的选择,我们将在以后的梳理过程中逐渐增加这部分内容。对于Excel函数不怎么感冒的同学,可以试试使用Python进行处理。
可爱的python
未完待续!