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

Python新手求助:如何将Excel单元格值复制到受密码保护的目标Excel?

解决Excel指定区域复制到受保护工作表的问题

一、先搞定openpyxl的加载报错

你用openpyxl加载目标文件报错,多半是因为工作表处于保护状态,或者加载模式不对。试试下面的调整:

from openpyxl import load_workbook

# 读取源文件
file1 = r"D:\Python Excel copy-paste\New Excel\D1.xlsx"
wb1 = load_workbook(file1)
ws1 = wb1["data"]

# 读取目标文件,明确设为可写入模式
file2 = r"D:\Python Excel copy-paste\New Excel\D2.xlsx"
wb2 = load_workbook(file2, read_only=False)
ws2 = wb2["here"]

# 如果目标工作表有保护密码,先解除(没密码就直接写ws2.unprotect())
ws2.unprotect(password="你的保护密码")

# 复制A1-E4到G1-O4:源行1-4、列1-5,目标列是源列+6(G是第7列)
for row in range(1, 5):
    for col in range(1, 6):
        ws2.cell(row=row, column=col+6).value = ws1.cell(row=row, column=col).value

# 写完后重新保护工作表(不需要的话删掉这行)
ws2.protect(password="你的保护密码")

wb2.save(file2)

要是目标文件是打开需要密码的加密文件,openpyxl搞不定,得换别的方法。

二、pandas能不能用?

pandas确实能用iloc读取指定区域,但有个大问题:它写入时会重写整个工作表,原有的保护设置、单元格格式全丢。除非你手动恢复格式,不然不适合你的场景——毕竟你要保留目标文件的保护状态。

如果不在乎格式和保护,只复制值,可以试试,但不推荐:

import pandas as pd

# 读源文件A1-E4
df_source = pd.read_excel(file1, sheet_name="data", usecols="A:E", nrows=4)

# 写入目标文件G1-O4,先读目标表所有数据再替换
with pd.ExcelWriter(file2, engine="openpyxl", mode="a", if_sheet_exists="overlay") as writer:
    df_target = pd.read_excel(file2, sheet_name="here")
    # 替换第0-3行(对应Excel行1-4)、第6-14列(对应Excel列G-O)
    df_target.iloc[0:4, 6:15] = df_source.values
    df_target.to_excel(writer, sheet_name="here", index=False, header=False)

三、最稳妥的方案:用win32com模拟Excel操作

这个方法直接调用本地Excel程序,完全跟人工操作一样,支持受保护工作表(只要目标区域没锁定),格式和保护设置全保留,新手好上手:

import win32com.client as win32

# 启动Excel,后台运行(设为True能看到操作过程)
excel = win32.gencache.EnsureDispatch("Excel.Application")
excel.Visible = False

# 打开文件
wb1 = excel.Workbooks.Open(r"D:\Python Excel copy-paste\New Excel\D1.xlsx")
ws1 = wb1.Worksheets("data")
wb2 = excel.Workbooks.Open(r"D:\Python Excel copy-paste\New Excel\D2.xlsx")
ws2 = wb2.Worksheets("here")

# 复制源区域,粘贴值到目标区域
ws1.Range("A1:E4").Copy()
ws2.Range("G1:O4").PasteSpecial(Paste=-4163)  # -4163是只粘贴值的参数

# 保存关闭
wb2.Save()
wb2.Close()
wb1.Close()
excel.Quit()

先装pywin32库:pip install pywin32,确保本地有Excel就行,不需要管工作表保护——Excel本身允许在受保护表编辑未锁定区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:00:52