Tại sao nên kết hợp Google Sheets và Python?
Dù không phải là một database thực thụ, Google Sheets vẫn là lựa chọn “số 1” cho các dự án quy mô vừa và nhỏ. Nó cực kỳ linh hoạt khi bạn cần làm báo cáo nhanh cho sếp hoặc đồng nghiệp mà không muốn tốn công dựng dashboard phức tạp. Sau hơn 6 tháng vận hành các hệ thống báo cáo tự động trên production, mình nhận ra gspread chính là chìa khóa. Thư viện này giúp biến những bảng tính tĩnh thành một công cụ thu thập và xử lý dữ liệu cực kỳ mạnh mẽ.
Quick Start: Đọc dữ liệu trong 5 phút
Hãy bắt đầu với cách tối giản nhất để lấy dữ liệu từ một file Sheets sẵn có về máy của bạn.
Bước 1: Cài đặt thư viện
Mở terminal và chạy lệnh sau để cài đặt hai thư viện cần thiết:
pip install gspread google-auth
Bước 2: Cấu hình Google Cloud Console
Đây là bước khiến nhiều anh em mới bắt đầu cảm thấy lúng túng nhất. Hãy làm theo trình tự này:
- Truy cập Google Cloud Console và tạo một Project mới (ví dụ: “Sheet-Automation-Tool”).
- Tại mục APIs & Services, bạn cần Enable hai API là Google Drive API và Google Sheets API.
- Vào tab Credentials, chọn Create Credentials rồi chọn Service Account.
- Sau khi tạo, hãy vào tab Keys của Service Account đó. Chọn Add Key -> Create new key (định dạng JSON).
- Lưu file này về máy và đổi tên thành
service_account.jsoncho dễ quản lý.
Bước 3: Chia sẻ quyền truy cập (Quan trọng)
Nhiều người thường bỏ quên bước này dẫn đến lỗi 403. Bạn hãy mở file JSON vừa tải, copy địa chỉ email ở dòng "client_email". Sau đó, mở file Google Sheets cần kết nối, nhấn Share và paste email này vào với quyền Editor.
Bước 4: Chạy script lấy dữ liệu
import gspread
from google.oauth2.service_account import Credentials
# Thiết lập quyền truy cập
scopes = ["https://www.googleapis.com/auth/spreadsheets"]
creds = Credentials.from_service_account_file("service_account.json", scopes=scopes)
client = gspread.authorize(creds)
# Kết nối tới file qua ID
sheet_id = "ID_CUA_FILE_SHEET_NAM_TREN_URL"
workbook = client.open_by_key(sheet_id)
sheet = workbook.sheet1 # Thao tác trên tab đầu tiên
# Lấy toàn bộ dữ liệu dưới dạng danh sách dictionary
data = sheet.get_all_records()
print(data)
Các thao tác xử lý dữ liệu thực chiến
Khi đã kết nối thành công, chúng ta sẽ đi sâu vào các tác vụ thực tế mà mình thường xuyên áp dụng trong công việc hàng ngày.
1. Ghi và cập nhật dữ liệu
Nếu bạn đang làm công cụ log dữ liệu đơn hàng hoặc tracking tiến độ, append_row sẽ là trợ thủ đắc lực. Nó giúp nối thêm một dòng mới vào cuối bảng mà không làm ảnh hưởng đến dữ liệu cũ.
# Thêm dòng mới: Ngày, Sản phẩm, Doanh thu, Trạng thái
new_row = ["2023-12-01", "Macbook M3", 45000000, "Đã giao"]
sheet.append_row(new_row)
# Cập nhật một ô cụ thể (ví dụ: sửa giá ở Hàng 2, Cột 3)
sheet.update_cell(2, 3, 42000000)
2. Tìm kiếm thông minh
Thay vì dùng vòng lặp for để quét hàng nghìn dòng (vốn rất chậm và tốn tài nguyên), hãy tận dụng hàm tìm kiếm có sẵn của gspread:
# Tìm vị trí của một mã đơn hàng cụ thể
cell = sheet.find("ORD-999")
print(f"Đơn hàng nằm tại hàng {cell.row}, cột {cell.col}")
Trong quá trình xử lý chuỗi văn bản phức tạp, ví dụ như lọc mã vận đơn từ email, mình thường dùng Regex. Nếu cần kiểm tra nhanh các pattern trước khi đưa vào code, mình hay dùng regex tester tại toolcraft.app. Công cụ này chạy ngay trên trình duyệt, giúp debug các chuỗi loằng ngoằng cực kỳ tiết kiệm thời gian.
Nâng cao: Tăng tốc với Pandas
Với các tập dữ liệu lớn, việc dùng gspread thuần túy sẽ khá chậm. Giải pháp tối ưu là đổ dữ liệu vào Pandas DataFrame để tính toán, sau đó mới đẩy kết quả ngược lại Sheet.
import pandas as pd
# Chuyển dữ liệu Sheet sang DataFrame
df = pd.DataFrame(sheet.get_all_records())
# Tính tổng doanh thu theo từng loại sản phẩm
summary = df.groupby('Sản phẩm')['Doanh thu'].sum().reset_index()
# Ghi toàn bộ kết quả vào tab "Báo cáo"
result_sheet = workbook.worksheet("Báo cáo")
result_sheet.update([summary.columns.values.tolist()] + summary.values.tolist())
Kinh nghiệm “xương máu” khi chạy Production
Để script chạy ổn định và không bị “văng” lỗi giữa chừng, bạn cần lưu ý 4 điểm sau:
- Kiểm soát Quotas: Google giới hạn khoảng 60 requests/phút cho mỗi project. Nếu bạn dùng
update_celltrong vòng lặp 100 lần, script chắc chắn sẽ dính lỗi429 Too Many Requests. Hãy gom dữ liệu vào một mảng và dùng hàmupdate()một lần duy nhất. - Bảo mật file JSON: Đừng bao giờ push file
service_account.jsonlên GitHub công khai. Hãy dùng biến môi trường hoặc thêm nó vào.gitignorengay lập tức. - Định dạng dữ liệu: Để tránh việc số bị hiểu nhầm thành text, hãy dùng tham số
value_input_option='USER_ENTERED'. Khi đó, Google Sheets sẽ tự nhận diện đúng định dạng ngày tháng và tiền tệ. - Quản lý quyền sở hữu: File tạo bằng code sẽ thuộc về Service Account. Bạn cần dùng lệnh
sh.share('[email protected]', perm_type='user', role='owner')để có toàn quyền quản lý trên Drive cá nhân.
Tự động hóa Google Sheets giúp bạn giải phóng đáng kể thời gian làm việc chân tay. Chỉ với vài dòng code Python, những bảng tính tẻ nhạt sẽ trở thành một hệ thống vận hành tự động và chuyên nghiệp.

