Chào mọi người,
Mình mới tìm hiểu về Python để tương tác với Excel và có một chút kinh nghiệm muốn chia sẻ với anh em. Dạo này sếp mình hay yêu cầu tạo các file Excel có danh sách thả xuống (dropdown list) để nhập liệu cho chuẩn, mà làm thủ công trên file lớn thì khá mất thời gian.
Sau một hồi mày mò, mình đã tìm ra cách dùng thư viện pandas và openpyxl trong Python để tự động tạo danh sách thả xuống này. Cách này rất tiện, đặc biệt khi bạn cần tạo nhiều dropdown list với các tùy chọn khác nhau hoặc cập nhật danh sách đó thường xuyên.
Cụ thể, mình sẽ lấy dữ liệu cho dropdown list từ một cột khác trong cùng một file Excel hoặc từ một file CSV riêng. Dưới đây là một ví dụ code đơn giản:
import pandas as pd
from openpyxl.worksheet.datavalidation import DataValidation
# Giả sử bạn có file Excel 'data.xlsx'
# và muốn tạo dropdown list cho cột 'B' (từ B2 trở đi)
# dựa trên dữ liệu ở cột 'A' (từ A2 trở đi)
df = pd.read_excel('data.xlsx')
# Đọc dữ liệu cho dropdown list
dropdown_options = df['ColumnA'].unique().tolist()
# Tạo một ExcelWriter object
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl')
df.to_excel(writer, sheet_name='Sheet1', index=False)
workbook = writer.book
worksheet = writer.sheets['Sheet1']
# Tạo DataValidation object
dv = DataValidation(type='list', formula1=f"'{'Sheet1'}!$A$2:$A${len(dropdown_options) + 1}" if len(dropdown_options) > 0 else None, allow_blank=True)
# Áp dụng validation cho cột B (từ hàng 2)
for row_num in range(2, len(df) + 2):
worksheet.cell(row=row_num, column=2).data_validation = dv
writer.save()
print("Đã tạo file 'output.xlsx' với dropdown list!")
Lưu ý:
- Bạn cần cài đặt
pandasvàopenpyxlnếu chưa có:pip install pandas openpyxl - Đoạn code trên là ví dụ, bạn cần điều chỉnh tên file, tên sheet, tên cột cho phù hợp với dữ liệu của mình.
- Phần
formula1có thể cần điều chỉnh tùy thuộc vào cách bạn muốn lấy dữ liệu (ví dụ: từ một vùng cố định, hoặc từ một cột khác). Trong ví dụ này, mình giả định dữ liệu nguồn nằm ở cột A.
Hy vọng chia sẻ này giúp ích được cho mọi người. Có ai có cách làm hay hơn hoặc gặp vấn đề gì thì cùng thảo luận nhé!