آموزش کار با اکسل در پایتون : خواندن و نوشتن excel

معمولاً از اکسل برای نگهداری داده‌های ساختاریافته استفاده می‌کنیم. در برنامه نویسی ممکن است بخواهیم داده‌هایی را از این فرمت بخوانیم یا اطلاعاتی را در آن بنویسیم. در این آموزش ۳ روش برای کار با اکسل در پایتون آشنا می‌شویم.

فایل excel یا صفحه گسترده معمولاً با فرمت .xlsx یا در نسخه‌های قدیمی‌تر با .xls شناخته می‌شوند. برعکس فرمت .csv، اگر این فایل‌ها با ویرایشگرهای متنی باز کنیم، محتوای آن را نمی‌توانیم ببینیم. (فقط کدهای بهم‌ریخته می‌بینیم!)

در این آموزش ۳ کتابخانه معروف و با امکانات عالی را بررسی می‌کنم که برای کار با اکسل در پایتون استفاده می‌شود. اگر می‌خواهید با فرمت دیگری کار کنید، می‌توانید آموزش‌های CSV در پایتون یا کار با فایل در پایتون را ببینید.

اکسل در پایتون

کتابخانه‌های مختلفی برای کار با اکسل وجود دارد. هر کدام مزایا و معایب خاص خودشان را دارند و نمی‌توان «بهترین کتابخانه» را مشخص کرد. ۴ کتابخانه خوب از نظر من این موارد هستند:

  • xlrd برای خواندن فایل‌های اکسل
  • xlwt برای نوشتن فرمت اکسل
  • openpyxl برای خواندن و نوشتن اکسل در پایتون
  • کتابخانه pandas برای خواندن و پردازش excel

در این آموزش نحوه کار با سه مورد اول را بررسی می‌کنیم. اگر می‌خواهید اکسل را برای اهداف داده کاوی (علم داده یا هوش مصنوعی) استفاده کنید، احتمالاً پاندا برایتان مناسب‌تر است.

در بخش‌های خواندن اکسل در این آموزش، یک فایل آزمایشی با محتوای زیر در اختیار داریم:

دیتاهای درون excel نمونه
دیتاهای درون excel نمونه

خواندن اکسل با xlrd پایتون

اگر فقط می‌خواهید مجموعه‌ای از داده‌ها را از excel در پایتون بخوانید، به نظر من، کتابخانه xlrd گزینه بسیار مناسبی برایتان خواهد بود. در ابتدا آن را نصب می‌کنیم:

pip install xlrd

اگر نمی‌دانید دستور pip چیست یا با نحوه اجرای آن مشکل دارید، به آموزش pip پایتون مراجعه کنید.

با متد open_workbook() فایل اکسل را باز می‌کنیم. این تابع یک ورودی به صورت string می‌گیرد که آدرس (path) فایل مورد نظر است. مقدار خروجی را در متغیری نگه می‌داریم.

import xlrd
wb = xlrd.open_workbook('sbzd.xlsx')

همانطور که می‌دانید، هر اکسل می‌تواند چند sheet داشته باشد. قدم بعدی، انتخاب sheet در اکسل است. دو روش برای این کار داریم:

  • انتخاب با ایندکس: مثلاً sheet_by_index(1) دومین sheet اکسل را انتخاب می‌کند. (دقت کنید که شماره‌گذاری از صفر شروع می‌شود.)
  • انتخاب با نام: مثلاً sheet_by_name('scores') صفحه‌ای را به نام scores انتخاب می‌کند.

ماژول‌هایی که در این آموزش با آن‌ها کار می‌کنیم، از sheetهای با نام فارسی نیز پشتیبانی می‌کنند. 🙂

در قطعه کد زیر، با روش اول، sheet اول در اکسل را با پایتون انتخاب می‌کنم:

sh = wb.sheet_by_index(0)

پیشنهاد: اگر قرار است اکسل‌هایی با ساختارهای متفاوت را پردازش کنید، از index استفاده کنید. در انتخاب sheet با نام، اگر اسم انتخابی در اکسل نباشد، با خطا مواجه می‌شویم. البته می‌توانید با روش مدیریت خطا در پایتون آن را مدیریت کنید.

خواندن هر سلول اکسل

حالا می‌توانیم با صدازدن متدهای مختلف روی متغیر sheet داده‌های سلول‌ها یا ردیف‌های مورد نظرمان را بخوانیم. برای گرفتن سلول خاص از cell_value(x, y) استفاده می‌کنیم. خروجی آن، مقدار سلول در سطر x و ستون y است.

متد دیگری نیز وجود دارد که سلول را به صورت شئ xlrd.sheet.Cell برمی‌گرداند. این شیء نوع و مقدار سلول را در خودش نگه می‌دارد. روش دوم قطعه کد زیر از value آن استفاده کرده‌ام:

# Solution 1
print( sh.cell_value(1,0) )

# Solution 2
cell = sheet.cell(1,0)
print( cell.value )

برای گرفتن همه مقادیر یک سطر اکسل در پایتون از متد row(x) استفاده می‌کنیم. خروجی این تابع، لیستی از اشیاء شبیه به کد بالاست. هر کدام از اعضای این لیست در پایتون یکی از ستون‌های آن ردیف است.

row2 = sh.row(2)

print( row2 )
# [text:'omid', number:18.5, text:'passed']

print( row2[1].value )
# 18.5

به‌طور مشابه، متد col(y) را داریم که مقادیر موجود در ستون y را به ما برمی‌گرداند.

در قطعه کد زیر، به کمک یک حلقه for مقادیر ستون‌های اول و دوم همه ردیف‌ها را در خروجی چاپ می‌کنم. از nrows برای گرفتن تعداد سطرها کمک گرفته‌ام. (بیشتر بدانید: حلقه در پایتون)

import xlrd

wb = xlrd.open_workbook('sbzd.xlsx')
sh = wb.sheet_by_index(0)

for i in range(sh.nrows):
    print(f"{sh.cell_value(i, 0)}:   {sh.cell_value(i, 1)}")

خروجی قطعه کد بالا چیزی شبیه به تصویر زیر می‌شود:

خروجی قطعه کد خواندن اکسل با پایتون
خروجی قطعه کد خواندن اکسل با پایتون

برای یادگیری فرمت دهی رشته متنی (f-string در قطعه کد بالا) می‌توانید آموزش زیر را دنبال کنید:

فرمت دهی رشته متن در پایتون با format

فرمت دهی رشته متن در پایتون با format

ایجاد اکسل با xlwt در پایتون

در صورت نیاز، باید این کتابخانه را روی سیستم خود نصب کنید. روند ایجاد اکسل به این صورت است که ابتدا یک فایل می‌سازیم، سپس sheet را ایجاد کرده و داده‌ها را در آن ثبت می‌کنیم. نکته مهم اینکه باید حتماً در انتها، فایل را ذخیره کنیم.

در قطعه کد زیر، به کمک کتابخانه xlwt یک اکسل و sheet با پایتون ایجاد می‌کنم:

import xlwt

wb = xlwt.Workbook()
sh = wb.add_sheet('my data')

با متد write() روی شیت، داده‌های خود را در سلول‌های مورد نظر می‌نویسیم. این تابع سه ورودی دارد که به ترتیب عبارت‌اند از:

  1. شماره ردیف سلول مورد نظر
  2. شماره ستون مورد نظر
  3. محتوای سلول به‌صورت string

در قطعه کد زیر، اسامی موجود در لیست names را در سطرهای مختلف اکسل می‌نویسم. (بیشتر بیاموزید: حلقه در پایتون)

names = ['omid', 'amirreza', 'ghazal', 'mina']

for i in range(len(names)):
    sh.write(i, 0, names[i])

در انتها، برای ذخیره‌سازی اکسل در پایتون از متد save() استفاده می‌کنیم. به عنوان ورودی، باید نام و فرمت excel را مشخص کنیم:

wb.save('names-list.xlsx')

این کتابخانه توابع بیشتری برای ویرایش اکسل با پایتون در اختیار ما می‌گذارد. مثلاً می‌توانیم مقدار یک سلول را بازنویسی کرده یا برای نوشتن از فونت خاصی استفاده کنیم. همه توابع آن در مستندات xlwt وجود دارد.

یادآوری: شمارش ردیف و ستون‌های اکسل در پایتون از صفر شروع می‌شود. یعنی سلول A1 برابر موقعیت (0,0) خواهد بود.

کار با اکسل در python

کتابخانه openpyxl یک کتابخانه کامل‌تر است که هم برای خواندن و هم نوشتن اکسل در پایتون استفاده می‌شود. ابتدا باید آن را نصب کنیم:

pip install openpyxl

روند خواندن و نوشتن مشابه کتابخانه‌های قبلی است. یک مزیت openpyxl نسبت به دوتای دیگر این است که برای دسترسی به سلول‌ها می‌توانیم از اسامی آن‌ها نیز استفاده کنیم. در قطعه کد زیر، مقدار ۳ سلول مختلف از شیت scores را در خروجی چاپ می‌کنیم:

from openpyxl import load_workbook

wb = load_workbook("sbzd.xlsx")
sh = wb['scores']

print( sh['A2'].value )
print( sh['B4'].value )
print( sh.cell(row=3, column=2) )

برای ایجاد اکسل جدید نیز می‌توانیم پس از تعریف نام sheet، دیتاهای مورد نظر را به دو روش (نام سلول یا شماره سطر و ستون) تعریف کنیم. در انتها با متد save() نتایج را در یک فایل اکسل ذخیره می‌کنیم:

form openpyxl import Workbook

wb = Workbook()
sh = wb.active
sh.title = "My Sheet"   # sheet name

sh['A1'] = 'omid'
sh['B1'] = 'programmer'
sh['A2'] = 'Nazanin'
sh['B2'] = 'marketer'

sh.cell(row=3, column=2).value  = 'Project Manager'

wb.save("sample-employee.xlsx")

به‌طور مشابه می‌توانیم از حلقه‌ها و حتی سایر ساختارهای زبان برنامه نویسی پایتون در برنامه خود استفاده کنیم.

هر کدام از این کتابخانه‌ها متناسب با نیاز برنامه شما، می‌توانند کاربردی و مناسب باشند. در این آموزش سعی کردم علاوه بر آموزش استفاده از آن‌ها، یک دید کلی نسبت به کارهایی که هر کدام می‌توانند انجام دهند به شما ارائه دهم.

شما تجربه‌ای در کار با اکسل در پایتون دارید؟ خوشحالم می‌شیم تجربه یا نظر خودتان را از قسمت دیدگاه‌ها با ما و دیگران به اشتراک بذارید. 🙂