Hướng dẫn copy sheet xlwings - sao chép tờ xlwings

Tôi đã sử dụng XLWings trong Python, nhưng không thể tìm ra cách sao chép một bảng tính. Tôi muốn coi một bảng tính cụ thể như một mẫu và sao chép bảng tính đó mỗi lần trước khi thực hiện sửa đổi.

Tôi đang sử dụng phiên bản 0.11.4 của XLWings. Nếu chức năng như vậy không được tích hợp, tôi ổn khi đi ra ngoài XLWings để sử dụng các chức năng PyWin32 để thực hiện điều này.

Hướng dẫn copy sheet xlwings - sao chép tờ xlwings

Cody Grey ♦

Phim thương hiệu vàng 234K50483 Huy hiệu bạc562 Huy hiệu đồng50 gold badges483 silver badges562 bronze badges

Khi được hỏi ngày 29 tháng 8 năm 2017 lúc 21:01Aug 29, 2017 at 21:01

3

Sau khi chọc vào một số nơi và đọc tài liệu PyWin32, tôi đã tìm thấy một giải pháp để sao chép bảng tính:

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)

Điều này đi ra ngoài chức năng gốc được cung cấp bởi XLWings. Bởi vì XLWings là một trình bao bọc xung quanh PyWin32, cuộc gọi .api() cho phép truy cập vào các chức năng PyWin32 không có giấy tờ trong XLWings.

Cũng lưu ý rằng lệnh 'After' không hoạt động trong bảng tính; Nó sẽ mở một sổ làm việc mới với tờ được sao chép. Điều này không nên đặt ra một vấn đề quá lớn, vì tôi tin rằng các chỉ mục có thể được sắp xếp lại nếu cần.

2

Đối với bất kỳ ai đấu tranh về cách sao chép tờ vào một sổ làm việc khác, đây là một ví dụ:another workbook, here is an example:

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")

Đã trả lời ngày 18 tháng 7 năm 2020 lúc 15:07Jul 18, 2020 at 15:07

Hướng dẫn copy sheet xlwings - sao chép tờ xlwings

Gleb sgleb sGleb S

1321 Huy hiệu bạc12 Huy hiệu đồng1 silver badge12 bronze badges

1

Lưu ý rằng trong các phiên bản gần đây của XLWings, giờ đây bạn luôn có thể sử dụng hàm Simple Copy () thay vì api.copy () - ngay cả để sao chép giữa các sổ làm việc khác nhau:

# Create two books and add a value to the first sheet of the first book
first_book = xw.Book()
second_book = xw.Book()
first_book.sheets[0]['A1'].value = 'some value'

# Copy to same Book with the default location and name
first_book.sheets[0].copy()

# Copy to same Book with custom sheet name
first_book.sheets[0].copy(name='copied')

# Copy to second Book requires to use before or after
first_book.sheets[0].copy(after=second_book.sheets[0])

Xem tài liệu ở đây.

Đã trả lời ngày 11 tháng 3 lúc 10:55Mar 11 at 10:55

RobertrobertRobert

1.12812 huy hiệu bạc24 Huy hiệu đồng12 silver badges24 bronze badges

Khi sao chép vào một sổ làm việc khác, bạn có thể sử dụng:

import xlwings as xw

wb_from = xw.Book(r"test1.xlsx")
wb_to = xw.Book(r"test2.xlsx")

ws_from = wb_from.sheets['Sheet1']
ws_to = wb_to.sheets['Sheet1']

# Copy the sheet BEFORE the sheet of another book.
ws_from.api.Copy(Before=ws_to.api)

# Copy the sheet AFTER the sheet of another book.
ws_from.api.Copy(None, After=ws_to.api)

Nếu bạn muốn sao chép bảng tính trong sổ làm việc hiện tại, bạn cũng có thể sử dụng .copy() tích hợp kể từ phiên bản XLWings 0.22:

# Copy the sheet BEFORE ws_from.
sheet.copy(before=ws_from, name="name_of_copied_sheet")
# Copy the sheet AFTER ws_from.
sheet.copy(after=ws_from, name="name_of_copied_sheet")

Đã trả lời ngày 18 tháng 11 năm 2021 lúc 15:08Nov 18, 2021 at 15:08

Mouwsymouwsymouwsy

1.1277 Huy hiệu bạc17 Huy hiệu đồng7 silver badges17 bronze badges

Tôi cần phải sao chép nhiều tờ để tôi bỏ cuộc và sử dụng phương pháp vĩ mô siêu xấu xí ...super ugly hybrid macro approach...

Tạo một tờ 'Tiện ích' được gọi là 'my_macros.xlsm' với macro sau trong mô -đun1

Sub CopySheetsToAnotherSheet(fromName, toName)
    Workbooks(fromName).Sheets(Array("SheetA", "SheetB")).Copy Before:=Workbooks(toName).Sheets(1)
End Sub

Sau đó, đảm bảo rằng bảng nguồn và mục đích được mở và thực hiện các mục sau:-

my_macros = xw.Book('my_macros.xlsm')
a_macro = my_macros.macro('CopySheetsToAnotherSheet')
a_macro('source_sheet.xlsm', 'target_sheet.xlsx')

Đã trả lời ngày 16 tháng 5 lúc 8:39May 16 at 8:39

Hướng dẫn copy sheet xlwings - sao chép tờ xlwings

Michael Dausmannmichael DausmannMichael Dausmann

3,8952 Huy hiệu vàng33 Huy hiệu bạc46 Huy hiệu đồng2 gold badges33 silver badges46 bronze badges