旧版本excel文件pandas读取‘Workbook is encrypted’错误

使用pandas读取一个excel文件,出现‘Workbook is encrypted'错误,实际上文件没有加密码,而是设置了受保护的视图,pandas是使用xlrd模块读取excel文件,所以xlrd也是不行的

搜索发现一个模块可以对excel文件解密

pip install msoffcrypto-tool

import msoffcrypto
#操作过程略

但是msoffcrypto对03版本的excel无效。

openpyxl也对03版本的excel无效。

最后的解决办法:用pywin32改变excel文件版本,然后解密,实际上改变文件版本后就可以直接读取了

安装:

pip install pywin32

操作:

复制代码
import win32com.client as win32
import pandas as pd

file_old = 'C:\\Users\\john\\Downloads\\20210226T000000.xls' #pywin32的路径分隔符是'\\',而不是'/'否则出错
wb=win32.DispatchEx('Excel.Application').Workbooks.Open(file_old)
try:
    file_new='C:\\Users\\john\\Downloads\\20210226T000000.xlsx'#注意保存在根目录下可能需要管理权限,产生问题
    wb.SaveAs(file_new,FileFormat=51)    #51是新版版本xlsx文件,56是旧版本xls文件
finally:            
    wb.Close()            

reader=pd.read_excel(file_new,sheet_name=0,header=0,dtype=str)
print(reader)
复制代码

 

目前不知道对于有密码的文件是否适用

电脑要安装office,2019可用,精简版不可用,WPS操作不一样,最好不用

posted @   shang的学习园地  阅读(1402)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示