解决python利用openpyxl读取excel中公式结果值的问题 您所在的位置:网站首页 excel公式返回0而不是空白 解决python利用openpyxl读取excel中公式结果值的问题

解决python利用openpyxl读取excel中公式结果值的问题

2023-10-15 02:09| 来源: 网络整理| 查看: 265

    在之前的一段时间里,我一直试图让openpyxl库来读取单元格值。但是每次我运行这个程序时,如果我把它设置为data_only = True,它就会返回None。如果我不添加数据,它只返回我使用的公式。这是我的代码:

import openpyxl wb = openpyxl.load_workbook(filename) ws = wb.active value = ws.cell(row = 11 , column = 6).value print(value)

    经过网上检索,其原因如下:

    当xlsx表格被生成并在Excel程序中打开并保存之后(这个过程Excel会把公式结果计算出来),该文件附带有两套值,一套是公式全都没有计算的(data_only=False(默认)),一套是公式计算了结果的(data_only=True)。(如果没有被Excel打开并保存,则只有一套值(data_only=False的那套,公式没有计算结果的)。     此时,以data_only=True或默认data_only=False打开会得到两种不同的结果,各自独立,即data_only=True状态下打开的,会发现公式结果为None(空值)或者一个计算好的常数,而不会看到它原本的公式是如何。而data_only=False则只会显示公式而已。因此,data_only=True状态下打开,如果最后用save()函数保存了,则原xlsx文件中,公式会被替换为常数结果或空值。而data_only=False状态下打开,最后用save()函数保存了的话,原xlsx文件也会只剩下data_only=False的那套值(即公式),另一套(data_only=True)的值会丢失,如想重新获得两套值,则仍旧需要用Excel程序打开该文件并保存。

    参考http://blog.51cto.com/antidarkness/1974684

    据此,有如下两套解决方案:

1.手动打开该excel文件,手动保存后关闭,再使用openpyxl打开(注意参数data_only=True),就可以得到数值了。

2.自动化解决方案,使用win32com自动打开文件并保存,参考https://www.cnblogs.com/vhills/p/8327918.html

from win32com.client import Dispatch def just_open(filename): xlApp = Dispatch("Excel.Application") xlApp.Visible = False xlBook = xlApp.Workbooks.Open(filename) xlBook.Save() xlBook.Close()

注意:有时候会出现没保存的情况,这时候把代码的Save改成SaveAs就好了。

from win32com.client import Dispatch def just_open(filename): xlApp = Dispatch("Excel.Application") xlApp.Visible = False xlBook = xlApp.Workbooks.Open(filename) xlBook.SaveAs(filename) xlBook.Close()

    接下来再使用openpyxl读取单元格的时候,就能显示数值了。 

本博客采用 CC BY-NC-SA 4.0 进行许可,转载请注明原作者。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有