Python用openpyxl读取单元格中的公式的值,不生效原因

现象:Python用openpyxl读取单元格中的公式的值,为None

用代码给单元格写了字符串式的公式,但是再次读取时,并没有得到预期的公式结果,现象如下:

def use_formula(name):
    wb = openpyxl.load_workbook(name)
    ws = wb.create_sheet(title='公式demo', index=0)
    ws.cell(2, 1).value = 21
    ws.cell(2, 2).value = 22
    # 写法1
    ws['C2'] = '=sum(A2:B2)'

    # 写法2
    ws.cell(2, 5).value = '=sum(A2:B2)'
    wb.save(name)
    wb.close()


# 使用公式后,读取有公式单元格的值
def read_formula_cell(name):
    wb = openpyxl.load_workbook(name, data_only=True)
    ws = wb['公式demo']
    print(ws.cell(2, 1).value)
    print(ws.cell(2, 2).value)
    print(ws.cell(2, 3).value)
    print(ws.cell(2, 5).value)
    wb.close()

打印出来的值为:
21
22
None
None

但是期望的是:
21
22
43
43

原理分析

公式,实际在Python代码中写入的是公式样式的字符串,并不能运行、得到计算结果;
也就是说,实际的计算过程,并没有进行,代码只是告诉了Excel如何进行计算来得到这个单元格的值;

所以,计算过程是在客户端进行的,比如本地的win电脑里,你打开一下,Excel客户端就开始自动计算、得到结果、呈现,并在退出时保存到了文件信息里

下次打开、读取时,就不用再计算了,直接可读取到公式的结果

正确做法

1、代码生成的表格,必须使用win的Excel客户端软件打开一次,公式才可以得到计算
2、保存后,再次打开时就能读取到公式的值,否则一直读取到的是None!

总结

Python的openpyxl库,是为了方便用代码操作Excel,但绝不意味着此库可以达到与客户端Excel一样强大的功能(包括计算等)。所以,使用这些非主流的方法、属性时,有理解和操作成本,并不会很完美

所以不建议使用太花哨的冷门功能

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值