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

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

你可能感兴趣的:(python,excel)