跨图纸xlwings复制粘贴范围时发生错误

时间:2020-11-12 17:59:52

标签: python-3.x excel xlwings xlsm

我想使用xlwings在我的.xlsm工作簿中复制工作表的粘贴范围。我想保留源格式和前导单引号,因此我使用了.copy,{{ 1}}方法。 在成功复制工作表1后,尝试运行代码.paste时遇到此错误。循环中的第一张纸被正确复制,但是在完成第一张纸后会显示上述错误。 这是我用来复制跨表粘贴范围的代码:

 (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Select method of Range class failed', 'xlmain11.chm', 0, -2146827284), None)

2 个答案:

答案 0 :(得分:1)

工作表必须处于活动状态,然后才能在其上选择范围。使用sht.select()

import xlwings as xw

wb = xw.Book('test.xlsx')
sheet_names = ['Sheet1', 'Sheet2']
for sheet_name in sheet_names:
    sht = wb.sheets[sheet_name]
    sht.range('A1:A6').api.copy
    sht.select()
    sht['B1'].select()
    sht.api.paste
    wb.app.api.CutCopyMode = False
wb.save('test.xlsx')
wb.close()

答案 1 :(得分:1)

Mouwsy的答案很好用。另外,您也可以使用pastespecial,不必选择工作表

import xlwings as xw

wb = xw.Book('test.xlsx')
sheet_names = ['Sheet1', 'Sheet2']
for sheet_name in sheet_names:
    sht=wb.sheets(sheet_name)
    sht.range('A1:A6').api.SpecialCells(12).copy
    sht.range("R1").api.PasteSpecial("-4104")
    sht.api.Application.CutCopyMode=0
wb.save('standalone.xlsm')
wb.close()

更新: 刚刚发现xlwings已经具有复制粘贴方法,因此简单的复制粘贴将是:

for sheet_name in sheet_names:
    sht=wb.sheets(sheet_name)
    sht.range('A1:A6').copy()
    sht.range("R1").paste()
    sht.api.Application.CutCopyMode=0

这将保留源格式。我找不到从文档中自定义复制和粘贴操作的其他任何选项,所以我想您仍然需要使用api来进行完全控制。