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

Python中打开加密Excel后,如何读取数据至最后一行?

衔接加密Excel解密方法的读取方案(读到最后一行)

嘿,我知道你已经按照帖子里的方法成功打开了加密Excel,但用openpyxl直接加载又踩坑了——这很正常,因为openpyxl本身不支持直接读取加密文件嘛。下面给你几个能完美衔接之前解密操作的方案,轻松读取到最后一行数据:

方案1:直接用win32com读取(不用换库)

如果你之前用的是win32com打开加密文件,那完全可以在同一个会话里完成读取,没必要再碰openpyxl。直接看示例:

import win32com.client as win32

# 这部分就是你之前用的打开加密文件的代码
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False  # 后台运行,不弹出Excel窗口
wb = excel.Workbooks.Open(r'sample.xlsx', False, True, None, '你的文件密码')
ws = wb.ActiveSheet  # 要是指定工作表就改成wb.Worksheets('Sheet1')

# 读取到最后一行的核心操作
# 先拿到最后一行的行号(用xlUp常量定位最后有数据的行)
last_row = ws.Cells(ws.Rows.Count, 1).End(-4162).Row
# 循环读取每一行数据
all_data = []
for row_num in range(1, last_row + 1):
    current_row = []
    # 遍历当前行的所有已使用列
    for col_num in range(1, ws.UsedRange.Columns.Count + 1):
        current_row.append(ws.Cells(row_num, col_num).Value)
    all_data.append(current_row)

# 别忘了收尾,关掉Excel进程
wb.Close(False)
excel.Quit()

方案2:解密后存临时文件,再用openpyxl读取

要是你偏爱openpyxl的语法,那可以先把加密文件解密后存成无密码的临时文件,再用openpyxl正常读取:

import win32com.client as win32
import openpyxl
import os

# 第一步:解密并另存为无密码文件
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = False
wb = excel.Workbooks.Open(r'sample.xlsx', False, True, None, '你的文件密码')
wb.SaveAs(r'temp_no_pass.xlsx', Password='')  # 密码设为空就是无保护版本
wb.Close(False)
excel.Quit()

# 第二步:用openpyxl读取临时文件到最后一行
wb = openpyxl.load_workbook('temp_no_pass.xlsx')
ws = wb.active
last_row = ws.max_row
# 用iter_rows快速读取所有行,values_only=True直接获取单元格值
all_data = [row for row in ws.iter_rows(min_row=1, max_row=last_row, values_only=True)]

# 可选:用完临时文件后删除它
os.remove('temp_no_pass.xlsx')

方案3:用msoffcrypto解密后直接内存读取(无需存文件)

如果之前用的是msoffcrypto-tool这个库解密,那可以直接在内存里处理,不用生成临时文件,更高效:

import msoffcrypto
from io import BytesIO
import openpyxl

# 解密文件到内存流
with open('sample.xlsx', 'rb') as f:
    office_file = msoffcrypto.OfficeFile(f)
    office_file.load_key(password='你的文件密码')
    decrypted_stream = BytesIO()
    office_file.decrypt(decrypted_stream)

# 重置流指针到开头,然后用openpyxl读取
decrypted_stream.seek(0)
wb = openpyxl.load_workbook(decrypted_stream)
ws = wb.active
last_row = ws.max_row
all_data = [row for row in ws.iter_rows(min_row=1, max_row=last_row, values_only=True)]

这几个方案都能完美衔接你之前的解密操作,避开openpyxl直接读加密文件的报错,还能轻松读取到最后一行的数据~

内容的提问来源于stack exchange,提问作者Nav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:10