当xlsx表格被生成并在Excel程序中打开并保存之后(这个过程Excel会把公式结果计算出来),该文件附带有两套值,一套是公式全都没有计算的,一套是公式计算了结果的。
(如果没有被Excel打开并保存,则保存的值不会被重新计算,仍然是上次读取后缓存的值。如想重新获得两套值,则仍旧需要用Excel软件打开该文件并保存。
可以用脚本模拟手动打开保存的操作
可以使用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()
libreoffice --headless --convert-to xlsx 要转换的文件路径 --outdir 输出目录
由于Linux或Mac不同于windows系统所以无法使用Python第三方库win32com的解决方案。
解决方案是在服务器上安装:LibreOffice
这是一款开源的Office软件
用它来把代码生成的xlsx表在转化成xls或者将xls转换成xlsx,经过测试相当完成了一次打开保存关闭的操作,这样底层就会生成两套值了
这样就可以获取到最新值.
安装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
转换完成在重新读取就是最新的值了