openpyxl操作excel:公式
公式以一个等号开始,可以配置单元格,让它包含通过其他单元格计算得到的值。你将利用 openpyxl 模块,用编程的方式在单元格中添加公式,就像 添加普通的值一样。举个栗子:
import openpyxl wb = openpyxl.Workbook() sheet = wb['Sheet'] sheet['A1'] = 200 sheet['A2'] = 300 sheet['A3'] = '=SUM(A1:A2)' wb.save(r'C:\Users\Cherry\Desktop\styled.xlsx')
单元格 A1 和 A2 分别设置为 200 和 300。单元格 A3 设置为一个公式,求出 A1 和A2 的和。如果在 Excel 中打开这个电子表格,A3 的值将显示为 500。 如下:

也可以读取单元格中的公式,就像其他值一样。但是,如果你希望看到该公式 的计算结果,而不是原来的公式,就必须将 load_workbook()的 data_only 关键字参 数设置为 True。这意味着 Workbook 对象要么显示公式,要么显示公式的结果,不能兼得(但是针对一个电子表格文件,可以加载多个 Workbook 对象)。示例如下:
显示公式:
import openpyxl wb = openpyxl.load_workbook(r'C:\Users\Cherry\Desktop\styled.xlsx') sheet = wb['Sheet'] print(sheet['A3'].value) #结果如下: =SUM(A1:A2)
或者
显示公式的结果:
注意:在此之前,须先手动打开excel并保存一下,然后data_only=True读取才会有值,否则得到的结果为None!!!(也就是说,如果这个计算是手动操作excel得到的,即能通过data_only=True取到值;如果是Python插入的,则取不到值)
import openpyxl # 在此之前,须先手动打开excel并保存一下,然后data_only=True读取才会有值,否则得到的结果为None wb1 = openpyxl.load_workbook(r'C:\Users\Cherry\Desktop\styled.xlsx',data_only=True) sheet1 = wb1['Sheet'] value1 = sheet1['A3'].value print(value1)
网上查看原因,有可能是:
It depends upon the provenance of the file. data_only=True depends upon the value of the formula being cached by an application like Excel. If, however, the file was created by openpyxl or a similar library, then it's probable that the formula was never evaluated and, thus, no cached value is available and openpyxl will report None as the value.(来自:https://stackoverflow.com/questions/36116162/python-openpyxl-data-only-true-returning-none)
补充:
python 处理excel踩过的坑——data_only,公式全部丢失

浙公网安备 33010602011771号