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,公式全部丢失

 

posted @ 2019-01-12 17:00  风聆  阅读(187)  评论(0)    收藏  举报