如何使用Pandas读取仅受修改保护的Excel文件?
解决方案:读取仅修改保护的Excel文件到Pandas DataFrame
这种情况我碰到过不少——这是Excel的修改保护(而非内容加密),但xlrd库会误将其判定为加密工作簿。下面有几个无需密码就能读取数据的方案,按优先级推荐:
方案1:使用openpyxl作为读取引擎(最简单)
xlrd对这类仅限制修改的文件支持不好,但openpyxl可以正确识别并读取内容。
步骤:
- 先安装openpyxl(如果还没装):
pip install openpyxl
- 修改你的pandas读取代码,指定
engine="openpyxl":
import pandas as pd INCTL_DATA_PATH = "你的文件路径.xlsx" data_inctl = pd.read_excel(INCTL_DATA_PATH, sheet_name="Serie Histórica", engine="openpyxl")
这个方案适用于大多数xlsx格式的文件,无需额外复杂操作,直接替换引擎即可。
方案2:用Win32COM自动化Excel(Windows专属)
如果openpyxl无法处理(比如是旧版xls格式),可以用Windows的pywin32库模拟手动打开Excel(只读模式不需要密码),然后读取数据。
步骤:
- 安装pywin32:
pip install pywin32
- 使用以下代码读取:
import pandas as pd import win32com.client as win32 INCTL_DATA_PATH = "你的文件路径.xlsx" # 启动Excel后台进程 excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False # 不显示Excel窗口 # 以只读模式打开文件(无需修改密码) wb = excel.Workbooks.Open(INCTL_DATA_PATH, ReadOnly=True) ws = wb.Worksheets("Serie Histórica") # 获取工作表的已使用区域数据 used_range = ws.UsedRange data = used_range.Value # 转换为DataFrame:第一行作为列名,其余行作为数据 df = pd.DataFrame(data[1:], columns=data[0]) # 清理资源 wb.Close(SaveChanges=False) excel.Quit()
这个方法完全模拟手动操作,几乎能处理所有Excel格式的修改保护文件,但只能在Windows环境下使用。
方案3:用LibreOffice转换为CSV(跨平台)
如果是Linux/macOS环境,没有Win32COM的支持,可以用LibreOffice的命令行工具将Excel文件转换为CSV,再用pandas读取CSV。
步骤:
- 确保已安装LibreOffice(大多数Linux发行版自带,macOS可以通过brew安装)。
- 执行命令转换文件:
libreoffice --headless --convert-to csv "你的文件路径.xlsx" --outdir ./output
- 读取转换后的CSV文件:
import pandas as pd data_inctl = pd.read_csv("./output/你的文件名.csv")
这个方法跨平台通用,适合需要在非Windows环境下自动化处理的场景。
内容的提问来源于stack exchange,提问作者João Areias
相关产品推荐
相关产品推荐

