我想使用xlwings在我的.xlsm
工作簿中复制工作表的粘贴范围。我想保留源格式和前导单引号,因此我使用了.copy
,{{ 1}}方法。
在成功复制工作表1后,尝试运行代码.paste
时遇到此错误。循环中的第一张纸被正确复制,但是在完成第一张纸后会显示上述错误。
这是我用来复制跨表粘贴范围的代码:
(-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Select method of Range class failed', 'xlmain11.chm', 0, -2146827284), None)
答案 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来进行完全控制。