使用xlwings如何将工作表数据复制到另一工作簿的已有指定工作表
解决方案
你之前调用的Copy是工作表对象的复制方法,会直接复制整张表生成新工作表,无法实现追加数据到已有工作表的效果。可以参考以下两种实现方案:
方案1:仅复制数值(执行效率高)
如果不需要保留单元格格式、公式等属性,直接通过数组赋值的方式写入,速度最快:
import xlwings as xw # 配置文件路径 source_path = r"source.xlsx" target_path = r"target.xlsx" # 启动Excel程序,设置后台运行不显示窗口,关闭弹窗提示 with xw.App(visible=False, add_book=False) as app: app.display_alerts = False # 打开源文件和目标文件 wb_source = app.books.open(source_path) sht_source = wb_source.sheets[0] # 读取源工作表所有已使用区域的数据 source_data = sht_source.used_range.value # 如果源表第一行是表头不需要重复写入,替换为下行代码即可 # source_data = sht_source.used_range[1:,:].value wb_target = app.books.open(target_path) sht_target = wb_target.sheets[0] # 计算目标工作表最后一行数据的行号,定位到下一行的第一个单元格作为写入起始位置 last_row = sht_target.used_range.last_cell.row target_start_cell = sht_target.range(f"A{last_row + 1}") # 写入数据 target_start_cell.value = source_data # 保存关闭 wb_target.save() wb_target.close() wb_source.close()
方案2:保留原格式/公式/数据验证等属性
如果需要完整保留源数据的所有格式,调用单元格区域的Copy方法即可:
import xlwings as xw source_path = r"source.xlsx" target_path = r"target.xlsx" with xw.App(visible=False, add_book=False) as app: app.display_alerts = False wb_source = app.books.open(source_path) sht_source = wb_source.sheets[0] source_range = sht_source.used_range # 如果不需要复制源表表头,替换为下行代码即可 # source_range = sht_source.used_range[1:,:] wb_target = app.books.open(target_path) sht_target = wb_target.sheets[0] last_row = sht_target.used_range.last_cell.row target_start_cell = sht_target.range(f"A{last_row + 1}") # 复制源区域到目标起始位置 source_range.api.Copy(Destination=target_start_cell.api) wb_target.save() wb_target.close() wb_source.close()
注意事项
- 运行前请确认两个文件没有被其他程序占用,避免读写失败
- 如果数据量极大(十万行以上),优先选择方案1减少性能消耗
内容的提问来源于stack exchange,提问作者show000
相关产品推荐
相关产品推荐

