python处理excel踩过的坑

您所在的位置:网站首页 用python程序生成课程表 python处理excel踩过的坑

python处理excel踩过的坑

2023-03-18 08:01| 来源: 网络整理| 查看: 265

python

处理

excel

踩过的坑

——data_only

,公式全部丢失

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

 

先调⽤

win32com

打开⼀次,就

OK

,原公式就会变成值,后⾯就可以愉快的操作了。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3