跨工作表复制粘贴范围时出错 xlwings
Error while copy pasting ranges across sheets xlwings
我想在我的 .xlsm
工作簿中复制 sheet 的粘贴范围 xlwings.I 想保持源格式和前导单引号,因为我已经使用了.copy
, .paste
方法。
我在成功复制 sheet 1 之后尝试 运行 代码 (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Select method of Range class failed', 'xlmain11.chm', 0, -2146827284), None)
时遇到此错误。循环中的第一个 sheet 被正确复制,但在 sheet 1 完成后显示上述错误。
这是我用来复制粘贴 sheets 范围的代码:
wb = xw.Book('standalone.xlsm')
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('B1').select()
sht.api.paste
sht.api.Application.CutCopyMode=0
wb.save('standalone.xlsm')
wb.close()
PS :- I don't want to use `.value` method of copying ranges as it doesn't preserve source formatting and cells which start with single quote
sheet 必须处于活动状态才能 select 在其上设置范围。使用 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()
Mouwsy 的回答很好。或者,您可以使用 pastespecial,有了它,您就不必 select sheet
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 才能完全控制。
我想在我的 .xlsm
工作簿中复制 sheet 的粘贴范围 xlwings.I 想保持源格式和前导单引号,因为我已经使用了.copy
, .paste
方法。
我在成功复制 sheet 1 之后尝试 运行 代码 (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', 'Select method of Range class failed', 'xlmain11.chm', 0, -2146827284), None)
时遇到此错误。循环中的第一个 sheet 被正确复制,但在 sheet 1 完成后显示上述错误。
这是我用来复制粘贴 sheets 范围的代码:
wb = xw.Book('standalone.xlsm')
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('B1').select()
sht.api.paste
sht.api.Application.CutCopyMode=0
wb.save('standalone.xlsm')
wb.close()
PS :- I don't want to use `.value` method of copying ranges as it doesn't preserve source formatting and cells which start with single quote
sheet 必须处于活动状态才能 select 在其上设置范围。使用 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()
Mouwsy 的回答很好。或者,您可以使用 pastespecial,有了它,您就不必 select sheet
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 才能完全控制。