openpyxl কী?
openpyxl হলো পাইথন লাইব্রেরি এক্সেল ২০১০+ (.xlsx, .xlsm, .xltx, .xltm) ফাইল পড়া, লিখা, মডিফাই করার জন্য।
স্থাপন
pip install openpyxl
নতুন ওয়ার্কবুক তৈরি ও শিট টাইটেল
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
print(ws.title) # 'Sheet'
# টাইটেল পরিবর্তন
ws.title = "My New Sheet"
print(ws.title) # 'My New Sheet'
সেলে ডেটা লিখা
wb = openpyxl.Workbook()
ws = wb.active
# মেথড ১: cell()
c1 = ws.cell(row=1, column=1, value="Aadrika")
c2 = ws.cell(row=1, column=2, value="Adwaita")
# মেথড ২: Координа্ট স্ট্রিং
ws['A2'] = "Satyajit"
ws['B2'] = "Bivas"
# সেভ
wb.save("Book1.xlsx")
নতুন শিট যোগ করা
wb = openpyxl.Workbook()
wb.create_sheet(index=1, title="New Sheet")
wb.save("Book1.xlsx")
এক্সেল ফাইল পড়া
import openpyxl
wb = openpyxl.load_workbook("Book1.xlsx")
ws = wb.active
# ম্যাক্স রো/কলাম
print("Max row:", ws.max_row) # 2
print("Max col:", ws.max_column) # 2
# নির্দিষ্ট সেল
print(ws.cell(row=1, column=1).value) # Aadrika
print(ws['A1'].value) # Aadrika
# সব কলাম হেডার
for col in range(1, ws.max_column + 1):
print(ws.cell(row=1, column=col).value, end=" ")
# Aadrika Adwaita
# প্রথম কলামের সব ভ্যালু
for row in range(1, ws.max_row + 1):
print(ws.cell(row=row, column=1).value)
# Aadrika
# Satyajit
# নির্দিষ্ট রো (২য় রো)
for col in range(1, ws.max_column + 1):
print(ws.cell(row=2, column=col).value, end=" ")
# Satyajit Bivas
ইটারেটর ব্যবহার (বড় ফাইলের জন্য দক্ষ)
# সারি ভালো করে ইটারেট
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, values_only=True):
print(row)
# ('Aadrika', 'Adwaita')
# ('Satyajit', 'Bivas')
# কলাম ভালো করে ইটারেট
for col in ws.iter_cols(min_col=1, max_col=ws.max_column, values_only=True):
print(col)
স্টাইলিং (ফন্ট, রঙ, বর্ডার, অ্যালাইনমেন্ট)
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
ws['A1'].font = Font(bold=True, size=14, color="FF0000")
ws['A1'].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
ws['A1'].alignment = Alignment(horizontal="center", vertical="center")
thin_border = Border(
left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin')
)
ws['A1'].border = thin_border
ফর্মুলা লিখা
ws['A1'] = 10
ws['B1'] = 20
ws['C1'] = '=A1+B1' # ফর্মুলা স্ট্রিং হিসেবে
wb.save("formula.xlsx")
সাধারণ সমস্যা ও সমাধান
| সমস্যা | সমাধান |
|---|---|
| FileNotFoundError | পথ চেক করুন, raw string (r"path") বা ডবল ব্যাকস্ল্যাশ ব্যবহার করুন |
| PermissionError | ফাইল অন্য প্রোগ্রামে খোলা আছে কিনা চেক করুন |
| ডেটা টাইপ মিসম্যাচ | openpyxl স্ট্রিং/নাম্বার অটো হ্যান্ডেল করে; ডেটের জন্য datetime অবজেক্ট দিন |
| বড় ফাইল ধীর | read_only=True, write_only=True মোড ব্যবহার করুন |