首页 > 技术文章 > 旧版本excel文件pandas读取‘Workbook is encrypted’错误

moneymaster 2021-05-22 13:32 原文

使用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操作不一样,最好不用

推荐阅读