Đây là một cách tự động hóa khác từ sự sáng tạo [sự lười biếng] của tôi khi thực hiện các nhiệm vụ lặp đi lặp lại. Vì vậy, tôi được yêu cầu kết hợp một số Sổ làm việc Excel theo ngày trong tên tệp. Lúc đầu, tôi rất tích cực, vì nhiệm vụ này đơn giản với việc sử dụng Python. Tất cả những gì tôi cần làm là đọc tệp bằng
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
0, sau đó sử dụng phương pháp # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
1 ma thuật, sau đó lưu tệp đó vào một tệp mới. XongThật không may, kế hoạch này đã không thành công, vì tất cả các Sổ làm việc Excel đều có nhiều Bảng tính bên trong và có một số định dạng được đặt sẵn theo các giá trị trong trang tính. Được rồi, hình nói rõ hơn, Sổ làm việc trông giống như hình bên dưới
Ví dụ sổ làm việc. GIF của tác giả
Vì vậy, định dạng được đặt rất đẹp, kết hợp chúng bằng cách sử dụng
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
0 sẽ loại bỏ tất cả các định dạng, điều này không được chấp nhận. Có MỘT giây tôi nghĩ rằng tôi sẽ làm theo phương pháp KISS [keep it simple ngu ngốc], đó là mở từng Workbook Excel, sao chép và dán từng cái một. Tuy nhiên, tốc độ xử lý đã giết chết tôi🤦♂️Một lần nữa, tôi sẽ sử dụng thư viện Python yêu thích của mình cho tác vụ tự động hóa này, đó là ✨ PyWin32 ✨
25 Workbook để kết hợp trong các ví dụ sau. Hình ảnh của tác giả
Đối với hướng dẫn này, 25 Sổ làm việc Excel, mỗi sổ chỉ có một Trang tính đã được chuẩn bị [được tạo bởi tập lệnh Python]. Sổ làm việc có thông tin về lợi nhuận cho từng chi nhánh của các Quốc gia được chọn tại Malaysia, từ tháng 5 đến tháng 9 năm 2019 như trong hình bên dưới
Giao diện bên trong của mỗi sổ làm việc. Hình ảnh của tác giả
The Workbooks are named following this format: .xlsx, while the Worksheets are named following this format:_.
Mỗi Worksheet có định dạng đặt trước như sau
- Bộ lọc tự động
- Tự động điều chỉnh
- Định dạng có điều kiện
Trong bài viết này, hai loại sao chép-dán của Bảng tính Excel sẽ được trình bày
- Sao chép toàn bộ Trang tính Excel và dán nó dưới dạng Trang tính mới trong Sổ làm việc Excel khác
- Sao chép bảng dữ liệu của một Bảng tính Excel và dán bên dưới bảng dữ liệu hiện có của một Bảng tính Excel khác
Cuối cùng nhưng không kém phần quan trọng, tôi sẽ thường xuyên đề cập đến các từ như Đối tượng, Phương thức hoặc Thuộc tính trong mỗi ví dụ bên dưới. Tôi đã viết một bài báo [Tự động hóa Excel với Python] để giải thích các khái niệm về Đối tượng, Phương thức hoặc Thuộc tính. Độc giả thân mến của tôi được khuyến khích và hoan nghênh đọc bài viết bất cứ khi nào họ có nghi ngờ về ba khái niệm
Hãy bắt đầu
A. Sao chép toàn bộ Trang tính Excel và dán nó dưới dạng Trang tính mới trong Sổ làm việc Excel khác
Bạn có thể xem video hoặc đọc tiếp phần này
1. Sao chép/kết hợp một Worksheet từ một Workbook sang một Workbook hiện có khác
Ví dụ này sẽ chỉ ra cách sao chép một Worksheet từ Workbook này sang Workbook hiện có khác
import win32com.client as win32
from pathlib import Path
win32c = win32.constants# create excel object
excel = win32.gencache.EnsureDispatch['Excel.Application']# excel can be visible or not
excel.Visible = True # False
Bước đầu tiên là nhập thư viện và tạo Đối tượng Excel. Sau đó, chúng ta sẽ mở các Workbook liên quan
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
Trong ví dụ này, chúng tôi đang sao chép một Worksheet có tên “Penang_9” từ “Penang 20190901. xlsx” vào Sổ làm việc hiện có có tên “Sabah 20190901. xlsx”. Sau khi các Workbook được mở lên, chúng ta có thể bắt đầu thao tác sao chép Worksheet
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
Đối với thao tác này, chúng tôi đã sử dụng Phương thức Sao chép từ Đối tượng Bảng tính
# remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
Bước cuối cùng là sử dụng Phương thức Save hoặc SaveAs để lưu Sổ làm việc đã xử lý. Phương thức Đóng được sử dụng để đóng Sổ làm việc Excel, trong khi Phương thức Thoát là để thoát khỏi Đối tượng Excel được tạo bằng Python
2. Sao chép/kết hợp Worksheet từ nhiều Workbook vào một Workbook
Trong ví dụ đầu tiên, tôi đã mã hóa cứng tên Bảng tính, điều này không được khuyến khích khi bạn đang làm điều đó cho nhiều tệp. Kịch bản sẽ rất dài và cần nhiều nỗ lực hơn để lưu tất cả các tên Bảng tính dưới dạng các biến riêng biệt
Đây là nơi chỉ mục của Bảng tính có ích. Bằng cách sử dụng Thuộc tính chỉ mục Excel [Đối tượng, Phương thức và Thuộc tính Excel] như bên dưới, chúng ta có thể tạo một hàm bền vững hơn để kết hợp Trang tính từ nhiều Sổ làm việc
# return Sheet with index = 1 without stating Sheet Name
ws_name = wb1.Sheets[1]
Trong ví dụ này, chúng tôi sẽ kết hợp 25 Sổ làm việc thành 5 theo ngày. Mỗi Workbook ban đầu chỉ có một Worksheet bên trong. Như ví dụ A1 cần có 4 bước
i. Nhập thư viện
________số 8Cần có thư viện Biểu thức chính quy [tái] để xác định ngày trong tên tệp
ii. Xác định hàm để sao chép trang tính
Chức năng này là Sao chép Worksheet từ Workbook này sang Workbook khác. Điều kiện IF-ELSE là để xác định xem có bất kỳ Sổ làm việc nào được mở không. Nó sẽ mở Workbook đầu tiên và lưu nó với tên
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 nếu không có, ngược lại nó sẽ mở Workbook thứ hai và lưu nó với tên # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
4 Sau đó, Worksheet trong # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
5 sẽ được sao chép sang # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3Vòng lặp for bên trong là kết hợp các Workbook trong cùng một
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
7, sau đó vòng lặp bên ngoài sẽ chuyển sang # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
7 tiếp theo khi quá trình hoàn tất. # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
9 là một danh sách lồng nhau có chứa # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
7 bên trong, trong khi ______07 chứa các bộ dữ liệu của- Tên tệp có phần mở rộng [f[0]],
- Trạng thái [f[1]] và
- Ngày của tệp [f[2]]
Mỗi
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
7 chứa các bộ tệp có cùng ngày như trong hình bên dướiẢnh chụp màn hình của tổ hợp_list. Hình ảnh của tác giả
iii. Xác định hàm để đặt tên tệp vào danh sách riêng theo tiêu chí
Chức năng này là để nhóm các tệp theo ngày trong tên tệp và lưu vào
# remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
3. Tất cả tên tệp được lưu trong tham số # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
4. Đối với mỗi tên tệp, chúng tôi sẽ biên dịch một mẫu trên đó bằng Biểu thức chính quy [lại] như hình bên dưới# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
1Trong dòng trên, chúng tôi muốn xác định tên Bang và ngày là một số có 8 chữ số trong tên tệp. x sẽ trả về kết quả tìm kiếm, buy using
# remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
5 ta có thể chọn bất kỳ phần nào trong văn bản để sử dụng# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3Chỉ mục bắt đầu từ 0, chỉ mục 0 đề cập đến toàn bộ văn bản, chỉ mục 1 đề cập đến dấu ngoặc đơn đầu tiên, là tên Bang trong ví dụ này, chỉ mục 2 đề cập đến dấu ngoặc đơn thứ hai đề cập đến ngày tháng. Điều kiện IF-ELSE là lưu ngày đầu tiên nhận được làm ngày tham chiếu, sau đó so sánh nó với phần còn lại của ngày trong tên tệp. Mỗi trận đấu sẽ được lưu vào
# remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
6 dưới dạng Tuple. Sau đó, bộ dữ liệu sẽ được thêm vào danh sách chính, đó là # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
7Mỗi tên tệp được thêm vào
# remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
7 sẽ được thêm vào # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
9, WHILE-LOOP sẽ được tiếp tục cho đến khi độ dài của # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
9 bằng với danh sách ban đầu, # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
4. Một bản sao của # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
4, # return Sheet with index = 1 without stating Sheet Name
ws_name = wb1.Sheets[1]
3 đã được tạo ngay từ đầu và được sử dụng làm tiêu chí của FOR-LOOP. Mỗi khi tên tệp được thêm vào # remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
9, nó sẽ bị xóa khỏi # return Sheet with index = 1 without stating Sheet Name
ws_name = wb1.Sheets[1]
3, do đó sẽ không có sự trùng lặpiv. Thiết lập tham số và gọi hàm
import win32com.client as win324
from pathlib import Path
win32c = win32.constants# create excel object
excel = win32.gencache.EnsureDispatch['Excel.Application']# excel can be visible or not
excel.Visible = True # False
# remove hashtag to save and quit modified Excel file
#wb2.Save[]
#wb2.SaveAs[Filename = r"new file name.xlsx"] # save as new Workbook
#wb2.Close[True]
#excel.Quit[]
4 là danh sách các tệp cần được kết hợp. Vì các tệp được đặt tên theo một định dạng, chúng tôi có thể kết hợp các tệp theo Trạng thái hoặc ngày. Trong ví dụ này, Sổ làm việc được kết hợp dựa trên ngày. Các Sổ làm việc gốc được lưu trong thư mục có tên “Tệp mẫu”, trong khi các Sổ làm việc kết hợp được lưu trong thư mục có tên “Kết hợp”. Cả hai thư mục được đặt trong cùng một thư mụcĐầu ra của tập lệnh tự động hóa
Đầu ra của tập lệnh tự động hóa
Tất cả các Bảng tính có cùng tháng, được kết hợp
Tóm lại, ví dụ này trình bày cách nhóm các Workbook trong cùng một thư mục thành một danh sách theo ngày, sau đó gộp Worksheet của tất cả các Workbook trong cùng một danh sách thành một Workbook
B. Copy bảng dữ liệu của Sheet Excel này và dán vào bên dưới bảng dữ liệu đã có của Sheet Excel khác
1. Kết hợp bảng dữ liệu của hai Worksheet
Để đảm bảo chúng tôi chỉ sao chép bảng dữ liệu, chúng tôi cần biết chính xác số lượng cột và hàng sẽ được sao chép. Do đó, hàm
# return Sheet with index = 1 without stating Sheet Name
ws_name = wb1.Sheets[1]
7 sẽ được sử dụng để lấy số hàng. Trong ví dụ này, số cột được mã hóa cứng vì tác giả chưa tìm ra cách tốt hơn để trả về bảng chữ cái của các cột ngoài việc sử dụng từ điển Python 😂Các bước sao chép bảng dữ liệu hơi khác so với sao chép cả Worksheet [ví dụ A1] là cần biết số hàng. Sự khác biệt chính là việc sử dụng các thư viện
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
0 để đọc kích thước của bảng dữ liệu và Phương thức sao chép được sử dụng ở đây nằm trong Đối tượng phạm viimport win32com.client as win328
from pathlib import Path
win32c = win32.constants# create excel object
excel = win32.gencache.EnsureDispatch['Excel.Application']# excel can be visible or not
excel.Visible = True # False
Ngoài ra, lưu ý rằng Phạm vi được chọn bắt đầu bằng Ô A2 khi sao chép bảng dữ liệu
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
0Điều này là do hàng đầu tiên là hàng tiêu đề và cũng vì điều này, hàng cuối cùng là số hàng được trả về bởi
# return Sheet with index = 1 without stating Sheet Name
ws_name = wb1.Sheets[1]
9. Nếu số hàng của dữ liệu là 1000 hàng không bao gồm hàng tiêu đề [_______80 trả về số hàng không tính đến tiêu đề], hàng cuối cùng sẽ là 1001Sau đó để xác định vị trí dán dữ liệu đã sao chép, chúng ta cần thêm 2 vào số hàng của bảng dữ liệu trong Worksheet đích
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
1Nếu trong Worksheet đích, số hàng của bảng dữ liệu cũng là 1000 thì hàng cuối cùng cũng sẽ là 1001 sau khi đếm ở hàng tiêu đề. Do đó, vị trí để dán bảng dữ liệu đã sao chép sẽ ở hàng thứ 1002
2. Kết hợp bảng dữ liệu của nhiều Worksheet
Trong ví dụ này, tôi đã sử dụng tệp được tạo trong Phần A2. Tên tệp được bắt đầu bằng “Combined_Dated” và mỗi tệp có 5 Bảng tính bên trong, biểu thị bản ghi lợi nhuận cho 5 Quốc gia trong cùng một ngày như trong hình bên dưới
Đầu ra của tập lệnh tự động hóa
Đầu ra của tập lệnh tự động hóa
Vì có nhiều Trang tính, tốt hơn là sử dụng chỉ mục Trang tính để xác định Trang tính, thay vì sử dụng tên Trang tính. Trong phần này, chúng ta sẽ sử dụng hai Thuộc tính đối tượng Excel bên dưới
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
2Tương tự với 3 ví dụ còn lại, phần này cũng gồm 4 bước
i. Nhập thư viện
Trong ví dụ A2, Biểu thức chính quy [lại] được sử dụng để so sánh tên của Workbook. Trong ví dụ này, nó sẽ được dùng để so sánh tên các Worksheet
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
3ii. Xác định chức năng để mở sổ làm việc
Hàm này dùng để mở Workbook và gọi hàm của
import re
import os
import win32com.client as win32
from pathlib import Path
win32c = win32.constants
1 để so sánh các Worksheet giữa 2 Workbook và dán bảng dữ liệu vào Worksheet có cùng tên StateĐiều kiện IF-ELSE là để xác định xem có bất kỳ Sổ làm việc nào được mở không. Nó sẽ mở Workbook đầu tiên và lưu nó với tên
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 nếu không có, nếu không nó sẽ mở Workbook thứ hai và lưu nó với tên # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
5. Khi đó, toàn bộ các bảng dữ liệu trong các Worksheet ở # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
5 sẽ được copy sang # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 bằng hàm import re
import os
import win32com.client as win32
from pathlib import Path
win32c = win32.constants
1. Phương thức Count ở đây sẽ được sử dụng để trả về số tờ trong # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3. và giả sử # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 và # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
5 có cùng số sheet thì kết quả của Count sẽ được sử dụng để lấy tên Worksheet trong # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
5Hàm
import re
import os
import win32com.client as win32
from pathlib import Path
win32c = win32.constants
1 sẽ trả về # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 và # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
13 cho mọi vòng lặp trong FOR-LOOP bên ngoài. Điều này là do mỗi lần sao chép-dán bảng dữ liệu vào # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3, chúng ta cần biết kích thước mới nhất của bảng dữ liệu trong # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 được cập nhật để dán bảng dữ liệu tiếp theoiii. Xác định hàm để sao chép bảng dữ liệu
Hàm này dùng để sao chép bảng dữ liệu của tất cả các Worksheet từ Workbook này sang Workbook khác
Tôi biết kịch bản trên trông đáng sợ, nhưng đừng lo, tôi sẽ nắm tay bạn đi hết hành trình thấu hiểu😉
Có hai FOR-LOOP và hai điều kiện IF-ELSE trong tập lệnh trên. Hãy để tôi giải thích từng cái một
1. FOR-LOOP
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
4Vì chúng tôi đang sao chép nhiều Trang tính từ sổ làm việc này sang Sổ làm việc khác, trước tiên chúng tôi sẽ sử dụng thuộc tính Chỉ mục để chọn một Trang tính trong Sổ làm việc 1 [wb1], sau đó sử dụng thuộc tính Tên để xác định Trang tính trong Sổ làm việc 2 [wb2] có cùng tên Trạng thái
Trong FOR-LOOP bên ngoài, Tập lệnh bên dưới là lấy tên của Trang tính có Chỉ mục hiện tại trong wb1. Biểu thức chính quy sẽ được sử dụng để lấy tên Bang
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
5Khi chúng tôi có một trong các tên Trang tính từ wb1, chúng tôi sẽ so sánh nó với danh sách tên của các Trang tính trong wb2. Có FOR-LOOP bên trong. Danh sách tên các Worksheet trong wb2 đã được lưu trong
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
17Trong FOR-LOOP bên trong, tên Trạng thái cho mọi Trang tính trong Sổ làm việc 2 sẽ nhận được với Biểu thức chính quy như được hiển thị trong tập lệnh bên dưới
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
6Sau đó, điều kiện IF-ELSE được sử dụng để so sánh tên Trạng thái của Trang tính được chọn hiện tại trong Sổ làm việc một với tên Trạng thái cho mọi Trang tính trong Sổ làm việc 2
2. NẾU KHÁC
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
7Điều kiện IF-ELSE bên ngoài là so sánh tên Trạng thái trong tên Bảng tính từ hai Sổ làm việc đang mở. Nếu tên Bang bằng nhau, thì chúng ta sẽ nhập IF-ELSE bên trong
Trong IF_ELSE bên trong, nếu
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
13 trống, điều này có nghĩa là FOR-LOOP bên ngoài điều kiện IF-ELSE này mới bắt đầu, chưa có bảng dữ liệu nào được sao chép. Ở giai đoạn này, chúng tôi sẽ sử dụng # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
19 của # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 ban đầu. Nếu không, chúng tôi sẽ sử dụng # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
13 từ # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 đã xử lýSau đó, chúng tôi sẽ sử dụng hàm
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
33 để lấy hình dạng của bảng dữ liệu trong # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 và # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
5 hiện tại và sử dụng kết quả trong Phương thức sao chép, để dán bảng dữ liệu vào vị trí chính xácBảng dữ liệu trong Trang tính trong Sổ làm việc 2, được tìm thấy có cùng tên Trạng thái với Trang tính được chọn hiện tại trong Sổ làm việc 1, sẽ được sao chép vào Trang tính được chọn hiện tại trong Sổ làm việc 1
3. Sau khi tất cả các vòng lặp được hoàn thành
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
8Vì có nhiều Sổ làm việc, Sổ làm việc 1 phải được lưu mỗi khi kết hợp với Sổ làm việc khác, để gấu trúc có thể đọc hình dạng của Khung dữ liệu mới nhất và tính toán đích chính xác để dán bảng dữ liệu.
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
3 và # copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
13 cũng cần được trả về chức năng chính cho vòng lặp tiếp theoKhi Workbook được lưu lại, sẽ có một cửa sổ bật ra hỏi có lưu trên Workbook hiện có hay không, chỉ cần nhấp vào có 😁
iv. Gọi chức năng chính
# open workbooks
f_path = Path.cwd[] # your path
f1_name = 'Penang 20190901.xlsx'
f2_name = 'Sabah 20190901.xlsx'
filename1 = f_path / f1_name
filename2 = f_path / f2_name
wb1 = excel.Workbooks.Open[filename1]
wb2 = excel.Workbooks.Open[filename2]
sheetname = "Penang_9"
9Ví dụ này đã sử dụng đầu ra từ ví dụ B2. Vì các Worksheet trong Workbook được đặt tên theo một định dạng, định dạng này chúng ta có thể kết hợp các tệp theo Trạng thái. Sổ làm việc kết hợp cuối cùng được lưu trong thư mục có tên “Bảng dữ liệu kết hợp”. Cả hai thư mục được đặt trong cùng một thư mục
Đầu ra của Tập lệnh tự động hóa
Đầu ra của Tập lệnh tự động hóa
Tóm lại, ví dụ này chỉ ra cách nối các Worksheet từ các Workbook khác nhau trong cùng một thư mục thành một Workbook duy nhất theo tên của Worksheet. Ban đầu, mỗi Workbook chỉ có dữ liệu trong một tháng. Sau khi gộp chúng lại, Workbook cuối cùng sẽ có dữ liệu của 5 tháng
Đó là tất cả cho hướng dẫn tự động kết hợp Worksheet từ nhiều Workbook. Cảm ơn vì đã đọc đến cuối
Giữ liên lạcĐăng ký trên YouTube
Ghi chú bên lềTrong Tự động hóa Excel với Python, tôi đã giải thích về Đối tượng, Phương thức và Thuộc tính của Excel VBA. Đây là 3 khái niệm chính bạn sẽ phải biết để sử dụng
# copy worksheet above from wb1 to wb2
wb1.Worksheets[sheetname].Copy[Before=wb2.Sheets[1]]
38Nếu bạn quan tâm đến việc tự động hóa Bảng Pivot và trích xuất dữ liệu đã lọc từ Bảng Pivot sang DataFrame của gấu trúc, tại đây, bạn có thể Tự động hóa Bảng Pivot bằng Python [Tạo, Lọc và Trích xuất]
Nếu công việc của bạn sử dụng Google Trang tính thay vì Microsoft Excel, bạn có thể tham khảo bài viết này, “Tự động báo cáo Google Trang tính” để có thể thực hiện tự động hóa