Làm cách nào để sao chép các cột từ tệp excel này sang tệp excel khác trong python?

Đâ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. Xong

Thậ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

  1. Bộ lọc tự động
  2. Tự động điều chỉnh
  3. Đị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

  1. 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
  2. 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ố 8

Cầ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]]
3

Vò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

  1. Tên tệp có phần mở rộng [f[0]],
  2. Trạng thái [f[1]] và
  3. 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]]
1

Trong 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]]
3

Chỉ 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[]
7

Mỗ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ặp

iv. Thiết lập tham số và gọi hàm

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
4

# 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 vi

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
8

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à 1001

Sau đó để 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"
1

Nế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"
2

Tươ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"
3

ii. 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]]
5

Hà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 theo

iii. 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"
4

Vì 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"
5

Khi 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]]
17

Trong 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"
6

Sau đó, đ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ác

Bả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"
8

Vì 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 theo

Khi 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"
9

Ví 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]]
38

Nế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

Làm cách nào để sao chép các cột từ trang tính excel này sang trang tính excel khác trong Python?

Bước 1. Nhập thư viện openpyxl. Bước 2. Kết nối/nạp file Excel vào chương trình. Bước 3. Khởi tạo biến với tên sheet nguồn và tên sheet đích. Bước 4. Tạo 2 biến để khởi tạo với tổng số hàng và cột trong sheet Excel nguồn

Làm cách nào để trích xuất dữ liệu cụ thể từ excel trong Python?

Phương pháp 2. Đọc tệp excel bằng Python bằng openpyxl . The load_workbook[] function opens the Books. tệp xlsx để đọc. Tệp này được truyền dưới dạng đối số cho hàm này.

Chủ Đề