You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas读取仅受修改保护的Excel文件?

解决方案:读取仅修改保护的Excel文件到Pandas DataFrame

这种情况我碰到过不少——这是Excel的修改保护(而非内容加密),但xlrd库会误将其判定为加密工作簿。下面有几个无需密码就能读取数据的方案,按优先级推荐:

方案1:使用openpyxl作为读取引擎(最简单)

xlrd对这类仅限制修改的文件支持不好,但openpyxl可以正确识别并读取内容。

步骤:

  1. 先安装openpyxl(如果还没装):
pip install openpyxl
  1. 修改你的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(只读模式不需要密码),然后读取数据。

步骤:

  1. 安装pywin32:
pip install pywin32
  1. 使用以下代码读取:
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。

步骤:

  1. 确保已安装LibreOffice(大多数Linux发行版自带,macOS可以通过brew安装)。
  2. 执行命令转换文件:
libreoffice --headless --convert-to csv "你的文件路径.xlsx" --outdir ./output
  1. 读取转换后的CSV文件:
import pandas as pd

data_inctl = pd.read_csv("./output/你的文件名.csv")

这个方法跨平台通用,适合需要在非Windows环境下自动化处理的场景。

内容的提问来源于stack exchange,提问作者João Areias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 17:22:38