Python用openpyxl读取单元格中的公式或读取公式计算值

这篇具有很好参考价值的文章主要介绍了Python用openpyxl读取单元格中的公式或读取公式计算值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文参考了CSDN博主「claria029」的文章,原文链接:https://blog.csdn.net/claria029/article/details/116486904

Python使用openpyxl读取带公式的单元格时,可以选择读取公式还是读取公式计算值。其关键在于打开文件时给出data_only参数,当该参数的值设为False时,读取的是单元格中的公式;当该参数的值设为True时,读取的是单元格中的公式计算值。当省略该参数时,默认为False。

如下两种打开文件方式,都读取的是公式:

wb = openpyxl.load_workbook(filename)

wb = openpyxl.load_workbook(filename, data_only=False)

如下打开文件方式,读取的是公式计算值:

wb = openpyxl.load_workbook(filename, data_only=True)

注意:如果该工作簿是用openpyxl创建的,并且在创建后未曾用Microsoft Excel打开过,那么想要读取公式计算结果是无法得到正确结果的,只会读出None。

其原因如下:

当xlsx表格被生成并在Excel程序中打开并保存之后(这个过程Excel会把公式结果计算出来),该文件中所有单元格附带有两套值,一套是公式全都没有计算的,一套是公式计算了结果的。此时,openpyxl以data_only=False打开可以读取公式,以data_only=True打开可以得到公式计算出的结果。

如果openpyxl创建的工作簿没有被Excel打开并保存,则只有data_only=False的一套值,没有公式计算结果的那一套值。所以data_only=True读取会得到None。

另外:如果用openpyxl的data_only=True状态打开文件,并且最后用save()函数保存了后,则xlsx文件中的公式会被替换为计算结果(即消除了公式)。

而如果用openpyxl的data_only=False状态下打开文件,最后用save()函数保存了的话,原xlsx文件也会只剩下data_only=False的那套值(即公式),另一套(data_only=True)的值会丢失,如想重新获得两套值,则仍旧需要手动用Excel程序打开该文件并保存一次。

那么能否不用手动用Excel程序打开就能读取公式计算结果呢?可以的!使用win32com自动打开文件并保存一下就好了。代码如下:

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()

补充claria029博主没有介绍的内容:

一、使用Dispatch打开文件时要注意确认后台没有Excel相关的进程处于开启的状态,否则会报错。

若已有Excel相关的进程时怎么办。其实,即使已有Excel相关的进程,可以将上述代码中的Dispatch换成DispatchEx,其他不变,一样可以运行。DispatchEx相比Dispatch是强制新建进程打开文件的,不受原有Excel相关的进程的影响。

二、win32com.client打开文件时并不是以调用它的py程序所在目录为默认路径的,因此要用绝对路径。并且,在win系统中,openpyxl打开文件时,文件路径写成r"D:\文档\text.xlsx"或着"D:/文档/text.xlsx"都是可以的,但win32com.client必须用r"D:\文档\text.xlsx"。

三、如果用xlBook.SaveAs(filename)来保存,会弹出是否覆盖原文件的对话框。如果不想弹出对话框,可以在SaveAs的语句之前加上:

xlApp.DisplayAlerts = 0

这时会直接覆盖而不弹出确认提示。文章来源地址https://www.toymoban.com/news/detail-454623.html

到了这里,关于Python用openpyxl读取单元格中的公式或读取公式计算值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python之使用openpyxl读取excel

    获取最大行和最大列 获取某个单元格的值 获取行和列 通过worksheet.cell获取所有数据方法

    2024年02月15日
    浏览(48)
  • Python用openpyxl操作Excel:读写、遍历、单元格读写

    openpyxl支持读写Excel,自带整合Pandas和NumPy功能。 worksheet cell

    2024年02月16日
    浏览(59)
  • Python:使用openpyxl读取Excel文件转为json数据

    openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files 文档 https://openpyxl.readthedocs.io/en/stable/ https://pypi.org/project/openpyxl/ 安装 环境 读取文件示例:将Excel文件读取为json数据 有如下一个文件 data.xlsx 实现代码 输出读取的json数据 读写示例

    2024年02月15日
    浏览(73)
  • python-爬虫-爬取农产品批发价格中的蔬菜价格周数据

    中华人民共和国农业农村部 http://www.moa.gov.cn/ 点击数据 → 点击周度数据 → 跳转网页 http://zdscxx.moa.gov.cn:8080/nyb/pc/frequency.jsp 抓包,发现getFrequencyData里面有我们想要的数据 查看请求的提交参数 使用postman接口测试工具测试验证getFrequencyData里的url,发现测试返回的数据列表是空

    2024年02月21日
    浏览(54)
  • EXCEl——移除单元格中换行符

    方法一:使用清除格式功能 步骤如下: 1.选中需要取消换行的单元格 2.在“开始\\\"选项卡中找到\\\"清除”功能,点击下拉菜单中的“清除格式\\\" 3.这时单元格的换行就被取消了。 清除前效果图 清除后效果图 方法一:使用函数功能 步骤如下: 1.在一个空白单元格内输入函数=SUBSTIT

    2024年02月16日
    浏览(65)
  • table 单元格中嵌套子表格 样式撑开问题

    如图,表格中的td嵌套表格,里边表格把外层撑开,不能按100%显示; 给父级table 加一个 table-layout:fixed; 样式

    2024年02月09日
    浏览(35)
  • 按键精灵之自动复制粘贴到Excel单元格中

    本文将分享按键精灵(Q语言)的一个脚本使用,自动实现从输出窗口A中,将输出的数据内容复制,然后粘贴到事先设置好的Excel表格B中。 需n次重复执行复制粘贴操作至Excel表格的不同单元格中(依次)。注意:因使用屏幕坐标进行定位,因此不同分辨率的桌面,运行脚本前

    2024年02月12日
    浏览(65)
  • Python结合openpyxl库读取xlsx文件的每一行或每一列的内容进行处理

    openpyxl库是一个很好处理xlsx的python库。接下来,我主要介绍我是如何通过python代码读取xlsx的每一行或每一列的内容的。 一般xlsx第一列都是数据的字段,所以后续处理需要的话,还是先读取这一行再说 如果要看某一列的数据 例如

    2024年02月11日
    浏览(58)
  • 利用Python中的openpyxl/Pandas库操作excel

    本文主要讲述 openpyxl库对excel文件的读取写入操作以及Pandas库对excel文件的写入操作。 一、openpyxl介绍安装 1.安装openpyxl 2.Excel中的三大对象 二、openpyxl对Excel的操作  使用openpyxl读取excel 使用openpyxl写入excel         三、使用pandas写入excel python中与excel操作相关的模块: xlrd库

    2024年02月08日
    浏览(58)
  • Python+CNN 手写公式识别计算系统

    系统:Win10 环境:Pycharm/Vscode     Python3.7 效果图: 部分代码如下:  

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包