Python读取Excel公式值,结果为None的解决办法

当xlsx表格被生成并在Excel程序中打开并保存之后(这个过程Excel会把公式结果计算出来),该文件附带有两套值,一套是公式全都没有计算的,一套是公式计算了结果的。
(如果没有被Excel打开并保存,则保存的值不会被重新计算,仍然是上次读取后缓存的值。如想重新获得两套值,则仍旧需要用Excel软件打开该文件并保存。

可以用脚本模拟手动打开保存的操作

1.Windows下:

可以使用Python安装win32com的第三方库,模拟一下手动打开在关闭Excel软件的操作,这样可以取到最新的值.
注意此方法必须使用Microsoft Excel软件不能使用WPS

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

2.Linux或Mac下:

libreoffice --headless --convert-to xlsx 要转换的文件路径 --outdir 输出目录
由于Linux或Mac不同于windows系统所以无法使用Python第三方库win32com的解决方案。
解决方案是在服务器上安装:LibreOffice
这是一款开源的Office软件
用它来把代码生成的xlsx表在转化成xls或者将xls转换成xlsx,经过测试相当完成了一次打开保存关闭的操作,这样底层就会生成两套值了
这样就可以获取到最新值.

LibreOffice For Linux安装步骤

安装Libreoffice
1、查看当前yum支持当前Linux安装的LibreOffice版本

yum search libreoffic

2、查看libreoffice安装包基本信息

yum info libreoffice

3、安装libreoffice

yum install -y libreoffice

4.查看是否安装成功

libreoffice --version

5.进行一下文件转换操作,将xls转换为xlsx

libreoffice --headless --convert-to xlsx  要转换的文件路径 --outdir 输出目录

转换后发现缺失字体的可以安装一下Windows的字体包(自行搜索教程)

6.然后重启LibreOffice服务

kill -9 pid

执行

libreoffice

转换完成在重新读取就是最新的值了

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用pandas读取Excel表格时,如果某些列是通过公式计算得到的结果,pandas会将这些公式的单元格读取为NaN(缺失)。这是因为pandas默认情况下只读取Excel表格中的原始数据,而不会计算公式。 如果你想要读取Excel表格中的公式计算结果,可以使用pandas的参数`converters`。你可以定义一个函数来处理每个单元格的,并在函数中使用Excel的计算功能,然后将计算结果返回。这样,pandas就可以正确地读取Excel公式的结果了。 以下是一个示例代码,展示了如何使用pandas读取Excel表格并处理公式计算结果: ```python import pandas as pd def evaluate_formula(cell): try: value = eval(cell) # 使用eval函数计算公式 return value except: return cell df = pd.read_excel('./test.xlsx', sheet_name='Sheet1', converters={'column_name': evaluate_formula}) print(df) ``` 在上述代码中,`converters`参数可以传入一个字典,其中键是要处理的列名,是处理函数。在这个例子中,我们定义了一个处理函数`evaluate_formula`,它使用`eval`函数计算公式,并返回计算结果。然后,我们将这个处理函数应用于指定的列名,以便pandas读取并处理Excel公式的结果。 注意:使用`eval`函数来计算公式可能存在一定的风险,因为它可以执行任意的代码。在实际使用中,请确保只对受信任的Excel表格执行此操作,并避免使用具有潜在安全风险的公式。 通过以上方法,你应该能够读取Excel表格中公式的计算结果,而不是NaN。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [解决python pandas读取excel中多个不同sheet表格存在的问题](https://download.csdn.net/download/weixin_38614825/12849810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [已解决Python pandas读取Excel表格某些数字段结果为NaN问题](https://blog.csdn.net/yuan2019035055/article/details/126287611)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值