我一直在Python中使用xlwings,但一直无法弄清楚如何复制工作表。我想将特定工作表视为模板,并在每次修改之前复制该工作表。
我正在使用xlwings的0.11.4版本。如果没有内置这样的功能,我可以在xlwings之外使用pywin32函数来实现这一点。
答案 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")