吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 753|回复: 6
收起左侧

[学习记录] Python打开excel文件,读取带公式的单元格的值为空

[复制链接]
MyModHeaven 发表于 2024-10-8 20:43
本帖最后由 MyModHeaven 于 2024-10-8 20:47 编辑

如题。

以openpyxl为例。

众所周知,当存在公式时,openpyxl.reader.excel.load_workbook(filename, read_only=False, keep_vba=False, data_only=False, keep_links=True, rich_text=False)中的可选参数data_only要设置为True,这样才能读取公式的结果,而不是读取到=A1-A2这样的公式。

如果,一直只是简单的读取数据,或许并没有调用wb.save()。当同一个文件多次打开,并且同时涉及读取和写入的时候,wb.save()就带来的一点麻烦:python告诉你有公式的单元格的值都为空,手动打开excel文件却发现有值,并且公式也没消失。

昨晚困扰我好长时间,睡前还带来一个坏情绪。本来是在修改旧代码,发现这个问题后,一开始以为屎山代码让我搞崩塌了,后来以为碰见bug了,一度想重启电脑(听说重启电脑能解决99%的问题)。

今天晚上搜了一下才发现,这是一个客观存在的问题,了解到原因后,我想,但凡是没经验、第一次碰到这个问题的人,都不会想到原因吧。

而且,这个问题貌似是通病,无论用openpyxl、pandas还是其他的啥库。

详情见:

https://blog.csdn.net/u013541325/article/details/108246829

https://blog.csdn.net/weixin_45903952/article/details/105073611

我试了一下手动打开,然后关闭,还是读不了。原来是打开之后,需要保存一下再关闭,python就又能读到了。

免费评分

参与人数 2吾爱币 +1 热心值 +1 收起 理由
lizy169 + 1 谢谢分享
pandawatcher + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Scan 发表于 2024-10-8 21:14
因为某些原因,python读的时候,本机不能操作,之前是这样的
bdrdc 发表于 2024-10-8 21:30
wapjsx 发表于 2024-10-9 08:25
建议大家 参考下 xlwings 模块,可以python编程与手动编辑同时使用
cgbchen 发表于 2024-10-9 10:35
留痕一下,碰到的时候研究研究
wudalang123 发表于 2024-10-10 07:48
问题核心

当你使用openpyxl或pandas读取Excel文件时,你可以通过设置data_only=True来获取公式的计算结果,而不是公式本身。但是,如果你在读取后对文件进行了写入并保存,而没有重新计算公式,那么保存后的文件可能会丢失公式的计算结果。
解决方案

    确保Excel文件被正确打开并保存:在你使用Python读取之前,确保Excel文件已经被Excel应用程序打开并保存过。这样可以确保公式的计算结果被更新并存储。

    使用data_only=True:当你使用openpyxl加载工作簿时,确保使用data_only=True参数,这样你可以获取到公式的计算结果。

    手动触发Excel文件的保存:如果你在Python中修改了文件,确保在保存之前,手动打开Excel文件,进行任意小的修改(如更改一个单元格的值),然后保存并关闭。这样可以确保公式的计算结果被更新。

    使用Win32com:如果你需要自动化这个过程,可以使用win32com库来模拟Excel应用程序的行为,打开文件,保存并关闭。

示例代码

这里是一个使用win32com来打开、保存并关闭Excel文件的示例:

python

import os
from win32com.client import Dispatch

def save_excel_with_formulas(file_path):
    try:
        xlApp = Dispatch("Excel.Application")
        xlApp.Visible = False
        xlBook = xlApp.Workbooks.Open(os.path.join(os.getcwd(), file_path))
        xlBook.Save()
        xlBook.Close()
    except Exception as e:
        print(f"Error: {e}")
    finally:
        xlApp.Quit()

# 使用示例
save_excel_with_formulas("your_file.xlsx")
qlu50of5 发表于 2024-10-12 07:53
你也可以将Excel表格的公式复制,选择粘贴为值,这样Python就能正藏读了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 03:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表