Python读取excel文件中带公式的值的实现
使用程序语言生成或公式生成的值,在使用python调用时只会显示公式,按照
wb = openpyxl.load_workbook('writeFormula.xlsx',data_only=True)
进行调用时,会显示NONE,这是因为公式是代码写进去的,这样读出来就是None。
我从网上查到了几种方式:
手动写入公式并保存,再用openpyxl读取,能读取到公式的结果。
代码写入的公式/值,需要手动打开Excel,并保存,再用openpyxl读取,就能读取到公式了。(使用这种方式也很可能会返回NONE值。)
或者调用win32com.client import Dispatch 模块。运行下面代码后再进行读取,就能读取到数据/值。
最好的方式还是使用代码来完成。

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
sheet['A1'] = 200
sheet['A2'] = 300
sheet['A3'] = '=SUM(A1:A2)'
wb.save('writeFormula.xlsx')
print(sheet['A3'].value)

这是第一步生成excel表格的程序。

import openpyxl
wb = openpyxl.load_workbook('writeFormula.xlsx',data_only=True)
sheet = wb.active
print(wb.sheetnames)
for i in range(1,4):
    print(sheet['A' + str(i)].value)

这是第二部调用excel表格时的程序,这时调用值返回的为NONE值。

from win32com.client import Dispatch
import openpyxl
def just_open(filename):
    xlApp = Dispatch("Excel.Application")
    xlApp.Visible = False
    xlBook = xlApp.Workbooks.Open(filename)
    xlBook.Save()
    xlBook.Close()
just_open('D:\pythonProject\excel\writeFormula.xlsx')
wb = openpyxl.load_workbook('writeFormula.xlsx',data_only=True)
sheet = wb.active
print(wb.sheetnames)
for i in range(1,4):
    print(sheet['A' + str(i)].value)

使用win32模块来重新保存就可以了,这时再调用第二个代码程序,显示的就是实际值,而不是NONE值。但是需要注意一点,如果重新运行第一个模块,则之后需要先运行最后一个模块,否则使用第二个模块的时候返回的还是NONE值。
使用命令
pip install pypiwin32
安装win32模块。
这个时候使用第二个程序调用时,

wb = openpyxl.load_workbook('writeFormula.xlsx',data_only=True)

wb = openpyxl.load_workbook('writeFormula.xlsx',data_only=False)

都可以,显示的都是你想要的值和公式。

更多推荐

Python读取excel文件中带公式的值的实现