解决Python Workbook处理Excel文件打开报错问题:部分内容损坏导致无法正常打开

使用python workbook处理excel文件、保存后,再次打开提示:

#发现“新建 Microsoft Excel 工作表.xlsx”中的部分内容有问题。是否让我们尽量尝试恢复?如果您信任此工作簿的源,请单击“是”。
#Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃。
#单击查看修复记录:file:///C:/Users/Administrator/AppData/Local/Temp/error003840_01.xml

经测试隔离原因为:python 库处理excel中文字符内容并保存后,写入的格式化字符操作系统不兼容问题。

1)手动改写保存过的excel,且内容含中文时,用workbook处理保存后,再打开会报错
2)而当excel文件内容仅有英文字符时,则不会报错。
3)因此怀疑和python库对中文字符的处理相关,手动保存、系统自动保存写入的格式,与python库写入的格式,有差异,操作系统不兼容。

解决方案:

用workbook或pandas再打开、保存一次,再次打开不再报错。

代码样例:

test_file = "D:/Test/试试.xlsx" #单元格内容存在中文字符
wb_tar = openpyxl.load_workbook(test_file)

#xxxx处理(可选),之后保存
wb_tar.save(test_file)

#workbook再打开、保存一次(可保留源文件单元格颜色、字体、合并单元格等格式)
wb_tar = openpyxl.load_workbook(test_file)
wb_tar.save(test_file)

#或pandas再打开、保存一次(会丢失原文件单元格颜色、字体、合并单元格等格式)
df = pd.DataFrame(pd.read_excel(test_file))
df.to_excel(test_file,index=False)

参考:

https://ask.csdn.net/questions/7892152/54089130

故障原因详细剖析:

修改.xlsx为.rar或.zip,打开压缩包,从excel文件对应的压缩包内容来看,xl/sharedStrings.xml文件丢失了,不知道python库为什么会导致这个结果。

用VB再打开这个python库处理过的问题excel文件,报如下错误:不能取得类Workbooks的Open属性。

总之,怪哉怪哉。好在经测试,再次用workbook打开、保存一次问题excel文件,再次打开就正常了,算是临时规避吧。

详细比较python保存的excel文件,和windows系统保存的excel文件,格式差异较大:

python保存的文件缺少了xl/shareStrings.xml文件(存放单元格列名的),其他xml头部格式少了很多内容,具体如下:

1、外层目录结构相同

2、_rels/.rels,python保存的文件无xml行


3、docProps目录下文件数相同

4、docProps/app.xml,python保存的文件内容少太多,无excel页签信息

 
5、docProps/custom.xml,python保存的文件内容同样少太多,属性也要少几个

 


python处理系统保存的excel文件,程序编译时也会warning提示不识别_readonly、_change、_full-control几个属性

import warnings
warnings.filterwarnings("ignore")

#C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\packaging\custom.py:203: UserWarning: Unknown type for _readonly
#  warn(f"Unknown type for {prop.name}")
#C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\packaging\custom.py:203: UserWarning: Unknown type for _change
#  warn(f"Unknown type for {prop.name}")
#C:\Users\Administrator\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\packaging\custom.py:203: UserWarning: Unknown type for _full-control
#  warn(f"Unknown type for {prop.name}")

6、xl目录下,python生成文件缺少了shareStrings.xml,该文件存放了列名信息


7、xl/worksheets下工作表xml文件,python保存的文件头部格式内容少,且整个xml文件组织结构差异较大

 

 

因此python保存的excel文件会有系统兼容性问题。

期待python社区能解决这个差异兼容性问题。 

物联沃分享整理
物联沃-IOTWORD物联网 » 解决Python Workbook处理Excel文件打开报错问题:部分内容损坏导致无法正常打开

发表评论