openpyxl 使用公式
查看所有公式
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()