Python刷新excel

Python刷新excel,第1张

用openpyxl读取excel的load_workbook有个data_only参数。

例如:

yb_wb = load_workbook(u"D:\Desktop\xxx.xlsx", data_only=True)顾名思义,True时,只读data,忽略公式

但是有个情景是——得先保留公式,根据旧公式写入新公式。然后再读取值进行 *** 作。也就是说先data_only = False,然后再data_only = True。

这样会导致读取值 *** 作的时候,公式全部没有了。对,全部为空。就是这么奇怪。

wb = openpyxl.load_workbook(‘abc.xlsx’, data_only=True)

当’abc.xlsx’被生成并在Excel程序中打开并保存之后(这个过程Excel会把公式结果计算出来),该文件附带有两套值,一套是公式全都没有计算的(data_only=False(默认)),一套是公式计算了结果的(data_only=True)。(如果没有被Excel打开并保存,则只有一套值(data_only=False的那套,公式没有计算结果的)。

此时,以data_only=True或默认data_only=False打开会得到两种不同的结果,各自独立,即data_only=True状态下打开的,会发现公式结果为None(空值)或者一个计算好的仿乱常数,而不会看到它原本的公式是如何。而data_only=False则只会显示公式而已。因此,data_only=True状态下打开,如果最后用save()函数保存了,则原xlsx文件中,公式会被替换为常数结果或空值。而data_only=False状态下打开,最后用save()函数保存了的话,原xlsx文件也会只剩下data_only=False的那套值(即公式),另仔凯一套(data_only=True)的值会丢失,如想重新获得两套值,则仍旧需要用Excel程序打开该文件并保存。

解决方法:

可以定义一个刷新函数重新打开一次并保存。

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

print('自动更新结束')

filename = r"D:\Desktop\xxx.xlsx"

just_open(filename)

先调用win32com打开一次,就OK,念大唤原公式就会变成值,后面就可以愉快的 *** 作了。

概要

原理

解决

对于需要写入后实时查询的数据,可以通过手动 refresh *** 作将 memory buffer 的数据立即写入到 File system cache 。当老册孙然,该解决方案的代价就是降低了ES的写性能。

源码提供的方法支持refresh参数,默认False,可传True,wait_for。

wait_for:只影响当前用户处理的请求,其他用户并发的 *** 作并不影响;

true:影响所有用户正在处理的请求,会更新所有分片,侍链效率最低;

false:更新数据之后不立刻刷新,在返回结果之后的某个时间点会自动刷新,也就是随机的;

实时性要求较高,牺牲效率满足。

应用场景,姿纯根据自己项目需求来。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12145658.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存