使用xlwings和python复制工作表

时间:2017-08-29 21:01:17

标签: python excel xlwings

我一直在Python中使用xlwings,但一直无法弄清楚如何复制工作表。我想将特定工作表视为模板,并在每次修改之前复制该工作表。

我正在使用xlwings的0.11.4版本。如果没有内置这样的功能,我可以在xlwings之外使用pywin32函数来实现这一点。

2 个答案:

答案 0 :(得分:0)

在几个地方四处浏览并阅读了pywin32文档后,我找到了一种复制工作表的解决方案:

import xlwings as xw
wb = xw.Book('filename.xlsx')
sheet = wb.sheets['Sheet1']

#copy within the same sheet
sheet.api.Copy(Before=sheet.api)

#copy to a new workbook
sheet.api.Copy()

#copy a third time at the beginning of the sheets
sheet2 = wb.sheets['sheet1 (2)']
sheet.api.Copy(Before=sheet2.api)

#copy to an existing workbook by putting it in front of a worksheet object
sheet.api.Copy(before=existingSheet.api)

超出了xlwings提供的本机功能。由于xlwings是pywin32的包装,因此.api()调用允许访问xlwings中未记录的那些pywin32函数。

还请注意,“ After”命令在工作表中不起作用;它将打开一个新的工作簿并复制工作表。这不应该引起太大的问题,因为我认为可以根据需要对索引进行重新排序。

答案 1 :(得分:0)

对于正在努力将工作表复制到另一个工作簿的任何人,下面是一个示例:

import xlwings as xw

wb = xw.Book("spravoc" + "/" + "spravoc.xlsx")  # file FROM you want to copy sheet
sht = wb.sheets["Dictionary"]  #select sheet you want to copy
new_wb = xw.Book("spravoc" + "/" + "spravoc_new.xlsx")     # file where you want TO copy
new_wb.sheets.add("Temp", after=1) # add temp sheet, if you want to copy sheet after some other sheet (after=1 - after first sheet)
print(new_wb.sheets)
# copy needed sheet to the new_wb *before* Temp:
sht.api.Copy(Before=new_wb.sheets['Temp'].api)
# now, remove Temp from new_wb
new_wb.sheets['Temp'].delete()
new_wb.save("spravoc" + "/" + "spravoc_new.xlsx")