关于python中使⽤Excel.application打开⽂件出错“不能识别的
格式”的解决⽅法
今天使⽤python语⾔第三⽅模块库openpyxl操作excel⽂件时遇到问题,整整⽤了⼀天的时间才解决了,事情是这样的:
python怎么读入excel本来使⽤xlwings模块操作excel挺顺⼿的,突然想看看别的模块怎么样,好不好使⽤,帮使⽤openpyxl模块操作excel表,在操作excel表时发现这个模块有⼀个问题,就是读取不到使⽤公式计算出的结果值 ,在⽹上度娘问了好久,有的好多帖⼦说是在load_workbook ('⽂件名',data_only=True)使⽤参数,data_only=True就能解决这个问题(最后知道,这些帖⼦就是把别⼈的意见,不管对不对,⾃⼰没有做实验,取来粘到⾃⼰的帖⼦⾥,当做⾃⼰的成果胡乱发,你们这样做真的不负责⼈呀),我就着⼿开始按这些⾼⼈的帖⼦开始做实验,实验证明,使⽤data_only=True这个参数,读取有计算公式的单元格时,结果是none;如果不⽤使⽤这个参数或者使⽤data_only=False时,取有公式的单元格时,取出来的是公式,⽆论⽤什么⽅式都不能获取到公式计算出来后的结果,所以说⽹这样说的帖⼦都不正确,到这⾥⼜给卡住啦。
继续问度娘,问了好久,问到有这样的说法,使⽤openpyxl读取有公式的单元格值 时,需要⼿⼯将⽂件打开后⼿⼯保存就可以啦,原理是excel保存了两份数据,⼀份是数据,⼀份是公式,这个我真的不清楚,
没去深⼊研究,就按这些同志的学法试试,经过python创建了⼯作表,然后⼿⼯打开并保存,最后再⽤python去读这个⼯作表,嘿,还甭说,这种⽅法还真的能读取到公式的值,但这种半⾃动处理⽅式不实现,给⼈家开发了⼀个程序,处理很多数据,算是完了,⼈家读不到,告诉⼈家,你运⾏了那个模后,或者你点了那个按钮后,你先别着急处理别的,你得先将那个⽂件夹下的那个⽂件⼿⼯打开并保存⼀下,假如客户计算机不是很给⼒,数据量⼤的话,⽤了10分钟打开,⽤了5分钟保存,这肯定会把客户⽓死的。所以说这种半⾃动处理⽅式不可⾏,那放弃使⽤openpyxl这个模块库吗?也许会有别的解决办法,继续问度娘,没有到解决办法,以前⽤其它语⾔开发时使⽤“Excel.application”直接调⽤excel程序操作excel表,那我想使⽤这个application不就是⼿动⼀样吗?试试这种⽅法是否可⾏?结果试这个的时候试出了问题
程序如下:
import os
from win32com.client import Dispatch
path = os.path.abspath('.')
filaname = os.path.join(path, "test.xlsx")
xlApp = Dispatch("Excel.Application")
xlApp.Visible = False
place('\\','/')
xlBook = xlApp.Workbooks.Open(filename)
xlBook.Save()
xlBook.Close()
xlapp.Application.Quit()
xlapp=''
结果出现’不能识别的格式',⼀直不能解决,经过多次测试发现没有打开指定⽂件,打开不对,经过跟踪发现⽂件路径没问题呀,咋就不到⽂件,但打开的⽂件是不正确,取到的表名是test是⽂件名⼀样,感觉是不是⽂件路径上有问题呀,后来发现问题出现在'\'的路径上,最后加了place('\\','/')这条语句,将路径中'\'替换成'/',这样⼯作表名读取没问题啦,但经过
这个程序保存后再打开就还是提⽰‘不能识别的格式',⼿⼯打开后发现,⾥边全部是中⽂乱码,⼿式重新建⽴后再次使⽤此程序打开保存后,依然是乱码,实在不出原因,放下啦,准备放弃,可我不死⼼,就是不明⽩为什么会这样,最后考虑到会不会是因为我电脑安装office2003和2007两个版本有关系呀?可是⼿动打开的时候可是默认是2007版本呀,我打开com组件服务中 没有看到excel application服务,⼼⾥感觉可能问题出在这⾥,打开注册表搜索2003版的路径,发现与excel有不少,搜索2007版的路径发现与excel的指向不多,⼲脆把凡是涉及到2003版本的⽂件指向路径全部改成了2007版本的指向路径,赶紧测试这个程序,结果再也没有错误提⽰啦。
总结 :操作excel⽂件是,出现’不能识别的格式‘后,⼀请检查你的⽂件路径是否是’\',如是请改成'/','\'这个右斜杠在python和C语⾔中都是转义符;⼆看你是否装有两个版本,或者是旧版本没有卸载⼲净,打开注册表搜索旧版本⽂件路径,然后全部改成新版本的;三看当前语⾔加载的模块是否⽀持你这个版本。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。