Module openpyxl thao tác file Excel .xlsx (Office 2007+): tạo, đọc, ghi, format, chart.
Cài đặt
pip install openpyxl
1. Tạo workbook, đặt tên sheet
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
print(ws.title) # Sheet
ws.title = "My New Sheet"
print(ws.title) # My New Sheet
2. Ghi dữ liệu
wb = openpyxl.Workbook()
ws = wb.active
# Cách 1: cell(row, col)
ws.cell(row=1, column=1, value="Aadrika")
ws.cell(row=1, column=2, value="Adwaita")
# Cách 2: địa chỉ A1
ws['A2'] = "Satyajit"
ws['B2'] = "Bivas"
wb.save("Book1.xlsx")
3. Thêm sheet
wb.create_sheet(index=1, title="New Sheet")
wb.save("Book1.xlsx")
4. Đọc file
wb = openpyxl.load_workbook("Book1.xlsx")
ws = wb.active
# Kích thước
print(ws.max_row) # 2
print(ws.max_column) # 2
# Đọc cell
print(ws.cell(row=1, column=1).value) # Aadrika
print(ws['A1'].value) # Aadrika
# Đọc hàng 1 (header)
for i in range(1, ws.max_column + 1):
print(ws.cell(row=1, column=i).value, end=" ")
# Aadrika Adwaita
# Đọc cột 1
for i in range(1, ws.max_row + 1):
print(ws.cell(row=i, column=1).value)
# Aadrika
# Satyajit
# Đọc hàng 2
for i in range(1, ws.max_column + 1):
print(ws.cell(row=2, column=i).value, end=" ")
# Satyajit Bivas
5. Duyệt tất cả dữ liệu
for row in ws.iter_rows(values_only=True):
print(row)
# ('Aadrika', 'Adwaita')
# ('Satyajit', 'Bivas')
# Hoặc iter_cols
for col in ws.iter_cols(values_only=True):
print(col)
6. Định dạng (Style)
from openpyxl.styles import Font, Alignment, PatternFill
ws['A1'].font = Font(bold=True, size=14, color="FF0000")
ws['A1'].alignment = Alignment(horizontal="center")
ws['A1'].fill = PatternFill(start_color="FFFF00", fill_type="solid")
Lưu ý
- Chỉ hỗ trợ
.xlsx, không đọc được.xls(cũ) – dùngxlrd. - Không hỗ trợ macro (
.xlsmcầnopenpyxl.load_workbook(..., keep_vba=True)). - Performance:
write_only=Truecho file lớn (chỉ ghi, không đọc).