首页 > 技术文章 > openpyxl 使用公式

Teyisang 2021-05-03 15:16 原文

查看所有公式

from openpyxl.utils import FORMULAE
print(len(FORMULAE))
print(FORMULAE)

# 公式是否存在
print('x' in FORMULAE) # 返回为 True

 

from openpyxl import Workbook

wb = Workbook()
sheet = wb.active
sheet['a1'] = '销量A'
sheet['B1'] = '销量B'
sheet['C1'] = '总销量'
sheet['a2'] = 10
sheet['a3'] = 15
sheet['b2']= 20
sheet['b3'] = 25

for i in range(2,4):
    cell_a = 'A'+str(i)
    cell_b = 'B'+str(i)
    cell_c = 'C'+ str(i)
    sheet[cell_c] = '=sum({},{})'.format(cell_a,cell_b)
    
wb.save('new_test.xlsx')

显示公式值

wbook = load_workbook(filename='formula_1.xlsx',data_only=True)
# load_workbook方法中涉及到较多的属性,包括read_only,keep_vba,guess_types,data_only等。
# data_only用于读取cell中的值,当单元格中的值是一个公式的时候,会返回计算到的结果。
# data_only 控制具有公式的单元格是否具有公式(默认值)或上次Excel读取工作表时存储的值。

我们运行替换后的代码的后,打印cell_C2值的时候是为却为None,这是为什么呢?查询相关的资料的解释可以参考:

https://blog.51cto.com/antidarkness/1974684

那么这个问题该怎么解决呢?我们可以使用win32库进行打开关闭的操作之后,在使用openpyxl打开文件传入data_only=True即可,使用win32打开保存的代码如下:(注意filaname需要传一个全路径)

from win32com.client import Dispatch
filename
= r'C:\Users\LEGION\Desktop\tweets_code\formula_1.xlsx' xlApp = Dispatch('Excel.Application') xlApp.Visible = False xlBook = xlApp.Workbooks.Open() xlBook.Save() xlBook.Close()

 

推荐阅读