python处理excel踩过的坑 |
您所在的位置:网站首页 › 用python程序生成课程表 › python处理excel踩过的坑 |
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 |