Python với Excel – Đọc và ghi dữ liệu giữa các files Excel

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Xem bài viết [URL='www.giaiphapexcel.com/diendan/threads/python-v%E1%BB%9Bi-excel-m%E1%BB%9F-%C4%91%E1%BA%A7u-v%C3%A0-c%C3%A0i-%C4%91%E1%BA%B7t-th%C6%B0-vi%E1%BB%87n.142514/']Python với Excel – Mở đầu và cài đặt thư viện để cài đặt Python và thư viện cần thiết.

Mượn chủ đề này: [URL='www.giaiphapexcel.com/diendan/threads/l%E1%BB%97i-khi-l%E1%BA%A5y-d%E1%BB%AF-li%E1%BB%87u-b%E1%BA%B1ng-ado.142470/']Lỗi Khi lấy dữ liệu bằng ADO để viết xử lý bằng Python.

Mô tả: Cần lấy dữ liệu ở một file1 và ghi vào một file2 khác. Công việc lặp lại theo chu kỳ/ yêu cầu nào đó, dữ liệu mới ghi vào sẽ ghi nối tiếp vào phía dưới của file2.

Trong bài này có sử dụng module tkinter để mở cửa sổ cho phép chọn file Excel theo mong muốn..

from openpyxl import load_workbook
import tkinter as tk
from tkinter import filedialog

def select_excel_file(idex_title):
""" idex_title = 1 -> File cần lấy dữ liệu
idex_title = 2 -> File ghi dữ liệu vào """
titles = {1: "Chọn file cần lấy dữ liệu", 2: "Chọn file cần ghi dữ liệu vào"}
excel_filetypes = [('Excel files', '*.xls*'), ('All files', '*')]
root = tk.Tk()
root.withdraw()
file_path = ""
file_path = filedialog.askopenfilename(title = titles, filetypes = excel_filetypes)
return file_path

def Read_Write(start_row, last_column):
""" Lấy dữ liệu trong sheets(1) của excel_file1
rồi ghi (nối tiếp các lần lấy) vào file excel_file2

start_row = 8 # dòng đầu tiên cần lấy dữ liệu trong excel_file1
last_column = 18 # cột cuối cùng cần lấy dữ liệu trong excel_file1, mặc định lấy từ cột đầu tiên của bảng tính """

s_file = select_excel_file(1) # chọn file cần lấy dữ liệu

if len(s_file) > 0:
d_file = select_excel_file(2) # chọn file cần ghi dữ liệu vào
if len(d_file) > 0:
# load excel_file1
wb_1 = load_workbook(s_file)
ws_1 = wb_1.active
lastRow = len(ws_1)
if lastRow >= start_row:
# load excel_file2
wb_2 = load_workbook(d_file)
ws_2 = wb_2.active
# lấy và ghi dữ liệu
res = []
for i in range(start_row, lastRow + 1):
scode = (ws_1.cell(row = i, column = 2).value)
if scode is not None:
for k in range(1, last_column + 1):
value_ = ws_1.cell(row = i, column = k).value
res.append(value_)
ws_2.append(res)
res.clear()
# lưu file excel_file2
wb_2.save(d_file)
print("Done!")

""" thực hiện sao chép dữ liệu
start_row = 8
last_column = 18 """
Read_Write(8, 18)

Tải file dưới, giải nén và mở file read_write_data.py bằng IDLE của Python rồi nhấn F5..
(Đừng bất ngờ về tốc độ đọc và ghi dữ liệu).

2896

www.giaiphapexcel.com/diendan/threads/python-v%E1%BB%9Bi-excel-%C4%90%E1%BB%8Dc-v%C3%A0-ghi-d%E1%BB%AF-li%E1%BB%87u-gi%E1%BB%AFa-c%C3%A1c-files-excel.142516/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:

    Cần tự đặt cho mình một cách đặt tên biến và theo sát nó.
    Ở đây, tên biến chưa đồng chuẩn.
    Đang dùng luật từ nối nhau bằng gạch dưới (s_file), tự dưng lọt vào kiểu lạc đà (lastRow).

    python có ưu điểm mạnh nhất là tôn thờ tự do, mà bác lại yêu cầu gò theo quy luật vậy, có ngược đường không nhỉ
    muốn theo đồng chuẩn thì chắc nên dùng C, C++ như kiểu mát đa chăng?

    python có ưu điểm mạnh nhất là tôn thờ tự do, mà bác lại yêu cầu gò theo quy luật vậy, có ngược đường không nhỉ
    muốn theo đồng chuẩn thì chắc nên dùng C, C++ như kiểu mát đa chăng?

    Tôi nói là "tự đặt chuẩn cho mình", có bảo theo ai đâu?
    Thống nhất từ đầu chí cuối là tiêu chuẩn của khoa học. Có ai đầu nói chuyện mét, đuôi nói chuyện yard rồi tự biện hộ "xứ tự do, tôi muón nói gì thì nói"?
    Python có tự do đến mức nào cũng không thể phản khoa học và tự vỗ ngực "do tôi tôn trọng tự do"

    Đúng là tự do trong khuôn khổ, nhưng tự do trong programming thì đôi khi hại chính chủ. Song cũng cần nhấn mạnh Python chủ trương là muốn mang sự tự do thoải mãi.

    ========================

    Xem bài viết [URL='www.giaiphapexcel.com/diendan/threads/python-v%E1%BB%9Bi-excel-m%E1%BB%9F-%C4%91%E1%BA%A7u-v%C3%A0-c%C3%A0i-%C4%91%E1%BA%B7t-th%C6%B0-vi%E1%BB%87n.142514/']Python với Excel – Mở đầu và cài đặt thư viện để cài đặt Python và thư viện cần thiết.

    Mượn chủ đề này: [URL='www.giaiphapexcel.com/diendan/threads/l%E1%BB%97i-khi-l%E1%BA%A5y-d%E1%BB%AF-li%E1%BB%87u-b%E1%BA%B1ng-ado.142470/']Lỗi Khi lấy dữ liệu bằng ADO để viết xử lý bằng Python.

    Mô tả: Cần lấy dữ liệu ở một file1 và ghi vào một file2 khác. Công việc lặp lại theo chu kỳ/ yêu cầu nào đó, dữ liệu mới ghi vào sẽ ghi nối tiếp vào phía dưới của file2.

    Trong bài này có sử dụng module tkinter để mở cửa sổ cho phép chọn file Excel theo mong muốn..

    from openpyxl import load_workbook
    import tkinter as tk
    from tkinter import filedialog

    def select_excel_file(idex_title):
    """ idex_title = 1 -> File cần lấy dữ liệu
    idex_title = 2 -> File ghi dữ liệu vào """
    titles = {1: "Chọn file cần lấy dữ liệu", 2: "Chọn file cần ghi dữ liệu vào"}
    excel_filetypes = [('Excel files', '*.xls*'), ('All files', '*')]
    root = tk.Tk()
    root.withdraw()
    file_path = ""
    file_path = filedialog.askopenfilename(title = titles, filetypes = excel_filetypes)
    return file_path

    def Read_Write(start_row, last_column):
    """ Lấy dữ liệu trong sheets(1) của excel_file1
    rồi ghi (nối tiếp các lần lấy) vào file excel_file2

    start_row = 8 # dòng đầu tiên cần lấy dữ liệu trong excel_file1
    last_column = 18 # cột cuối cùng cần lấy dữ liệu trong excel_file1, mặc định lấy từ cột đầu tiên của bảng tính """

    s_file = select_excel_file(1) # chọn file cần lấy dữ liệu

    if len(s_file) > 0:
    d_file = select_excel_file(2) # chọn file cần ghi dữ liệu vào
    if len(d_file) > 0:
    # load excel_file1
    wb_1 = load_workbook(s_file)
    ws_1 = wb_1.active
    lastRow = len(ws_1)
    if lastRow >= start_row:
    # load excel_file2
    wb_2 = load_workbook(d_file)
    ws_2 = wb_2.active
    # lấy và ghi dữ liệu
    res = []
    for i in range(start_row, lastRow + 1):
    scode = (ws_1.cell(row = i, column = 2).value)
    if scode is not None:
    for k in range(1, last_column + 1):
    value_ = ws_1.cell(row = i, column = k).value
    res.append(value_)
    ws_2.append(res)
    res.clear()
    # lưu file excel_file2
    wb_2.save(d_file)
    print("Done!")

    """ thực hiện sao chép dữ liệu
    start_row = 8
    last_column = 18 """
    Read_Write(8, 18)

    Tải file dưới, giải nén và mở file read_write_data.py bằng IDLE của Python rồi nhấn F5..
    (Đừng bất ngờ về tốc độ đọc và ghi dữ liệu).

    Làm thế này thì cần chi Excel nữa nhỉ,
    Nếu vẫn cần excel thì là đi đường vòng
    – mà không cần nữa thì đi ngược lại cái sống còn của diễn đàn này (giải tán GPE, hihihi)
    (befaint có vẻ rảnh nhiều, nên thích cái mới?)

    Chúng ta nên mở rộng cánh cửa "trái tim", luôn sẵn sàng tiếp nhận cái mới, cái hay (không nên bó buộc mặc định cái gì phải làm cái gì).

    Cuối cùng cái ta nhận được nhiều hơn.. rồi hạnh phúc hoặc buồn chán hơn là ở chủ quan tự mỗi người. 😀 😀

    ——
    Đơn giản như bài này:

    http://www.giaiphapexcel.com/diendan/threads/ch%C3%A8n-c%E1%BB%99t-%C4%91%E1%BB%83-%C4%91%E1%BB%93ng-nh%E1%BA%A5t-c%C6%A1-s%E1%BB%9F-d%E1%BB%AF-li%E1%BB%87u.142036/

    … cá rằng chủ thớt bài đó còn không rõ VBA là gì, nhưng hoàn toàn có thể làm theo hướng dẫn và giải quyết được vấn đề.
    Mục đích cuối cùng là xong việc, còn con đường đi tới đích không cần quan tâm (trong trường hợp cụ thể này).

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm