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
相关产品推荐
相关产品推荐

