
معمولاً از اکسل برای نگهداری دادههای ساختاریافته استفاده میکنیم. در برنامه نویسی ممکن است بخواهیم دادههایی را از این فرمت بخوانیم یا اطلاعاتی را در آن بنویسیم. در این آموزش ۳ روش برای کار با اکسل در پایتون آشنا میشویم.
فایل excel یا صفحه گسترده معمولاً با فرمت .xlsx
یا در نسخههای قدیمیتر با .xls
شناخته میشوند. برعکس فرمت .csv
، اگر این فایلها با ویرایشگرهای متنی باز کنیم، محتوای آن را نمیتوانیم ببینیم. (فقط کدهای بهمریخته میبینیم!)
در این آموزش ۳ کتابخانه معروف و با امکانات عالی را بررسی میکنم که برای کار با اکسل در پایتون استفاده میشود. اگر میخواهید با فرمت دیگری کار کنید، میتوانید آموزشهای CSV در پایتون یا کار با فایل در پایتون را ببینید.
فهرست محتوای آموزش
اکسل در پایتون
کتابخانههای مختلفی برای کار با اکسل وجود دارد. هر کدام مزایا و معایب خاص خودشان را دارند و نمیتوان «بهترین کتابخانه» را مشخص کرد. ۴ کتابخانه خوب از نظر من این موارد هستند:
- xlrd برای خواندن فایلهای اکسل
- xlwt برای نوشتن فرمت اکسل
- openpyxl برای خواندن و نوشتن اکسل در پایتون
- کتابخانه pandas برای خواندن و پردازش 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 در قطعه کد بالا) میتوانید آموزش زیر را دنبال کنید:
ایجاد اکسل با xlwt در پایتون
در صورت نیاز، باید این کتابخانه را روی سیستم خود نصب کنید. روند ایجاد اکسل به این صورت است که ابتدا یک فایل میسازیم، سپس sheet را ایجاد کرده و دادهها را در آن ثبت میکنیم. نکته مهم اینکه باید حتماً در انتها، فایل را ذخیره کنیم.
در قطعه کد زیر، به کمک کتابخانه xlwt یک اکسل و sheet با پایتون ایجاد میکنم:
import xlwt
wb = xlwt.Workbook()
sh = wb.add_sheet('my data')
با متد write()
روی شیت، دادههای خود را در سلولهای مورد نظر مینویسیم. این تابع سه ورودی دارد که به ترتیب عبارتاند از:
- شماره ردیف سلول مورد نظر
- شماره ستون مورد نظر
- محتوای سلول بهصورت 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")
بهطور مشابه میتوانیم از حلقهها و حتی سایر ساختارهای زبان برنامه نویسی پایتون در برنامه خود استفاده کنیم.
هر کدام از این کتابخانهها متناسب با نیاز برنامه شما، میتوانند کاربردی و مناسب باشند. در این آموزش سعی کردم علاوه بر آموزش استفاده از آنها، یک دید کلی نسبت به کارهایی که هر کدام میتوانند انجام دهند به شما ارائه دهم.
شما تجربهای در کار با اکسل در پایتون دارید؟ خوشحالم میشیم تجربه یا نظر خودتان را از قسمت دیدگاهها با ما و دیگران به اشتراک بذارید. 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام . ممنونم از آموزش مفیدتون
اگر بخواهیم داده ها بر اساس یک ستون خاص (مثلا ستون دوم ) مرتب شود (بر اساس حروف الفبا ) بعد شیتهای جدیدی ایجاد کند به اسم همان سلولهای مرتب شده
مثلا در ستون دوم ، اسم افراد است ، بعد شیتهایی به اسم افراد ایجاد کند و تمام سطرهای مربوط به اون ستون را داخل شیت جدید بیاورد
سپس مجدد داخل هر شیت ، سطرها را بر اساس ستون مثلا پنجم و هفتم مرتب کند .
ممنون میشم راهنمایی کنید .
سلام
تا جایی که اطلاع دارم این ماژولها فقط امکان خوندن و نوشتن رو دارند. شما میتونید دادهها رو از داخل اکسل فراخوانی کنید. طبق نیازتون دستهبندی و مرتب کنید و بعدش داخل یک اکسل جدید بنویسید.
سلام ممنون از توضیحات شفافتون
اگر بخواهیم داده های خاصی از یک ستون رو فراخوانی کنیم چطور
مثلا یک شیت اکسل با چند ردیف و ستون داریم میخواهیم از ستون دوم( رندمی از اعداد 1 تا 12) اعداد 6 را استخراج و داده های متناظر با این عدد را درسایر سطرهای ستون های دیگر به من نشان دهد.
سلام
یه راه ساده اینه که روی تک تک ردیفهای دادههاتون حرکت کنید و مقدار ستون دلخواهتون رو بگیرید. مثلاً میتونید این مقدار رو درون یک لیست قرار بدید تا بعداً روی اونها پردازشی انجام بدید. در قطعه کد زیر من ستون دوم رو فقط پرینت کردم:
عالي بود تشكر
خوشحالیم براتون کاربردی بوده 🙂
سلام مال من این ارور رو میده : Excel xlsx file; not supported
این هم کده منه :
سلام
بهنظر در نسخه 2 این ماژول به غیر از فرمت xls فرمتهای دیگه پشتیبانی نمیشن!
یا میتونید با
pip install xlrd==1.2.0
نسخه قبلی رو نصب کنید یا از ماژولهای دیگه کمک بگیرید.ممنون. خیلی عالیه
خیلی عالی بود
خوشحالیم که براتون مفید بوده 🙂
سلام
میشه کدش رو بهم بگید ممنون میشم:
میتونیم کاری کنیم که مثلا بهش بگیم اگر چیزی که توی sheet[“A1”] نوشته شده علی بود پرینت کنه sheet[“A2”]
سلام
از ماژول xlrd برای خوندن سلولهای اکسل استفاده کنید. دقیقاً مراحل این بخش از آموزش رو که پیش ببرید مقدار هر سلولی رو میتونید بخونید.
برای اینکه بگید «اگه» از ساختار شرط if در پایتون کمک بگیرید.
سلام
در قسمت اول xlrd که باید اکسل رو باز کنیم. چطوری ادرس محل فایل رو باید بدیم ؟ چون باز نمیکنه میگخ همچین فایلی موجود نیست
سلام
هم میتونید آدرس کامل اکسل رو بدید (کلیک راست که کنید مسیر فولدره + اسم و فرمتش) یا میتونید نسبی تعریف کنید. آدرس نسبی یعنی نسبت به فایل کدی که داره اجرا میشه. مثلاً توی مثال این آموزش چون کنار هم هستن از حالت نسبی استفاده شده.
خیلی مفید و خوب بود ، ممنووون ام ….
خوشحالیم که براتون کاربردی بوده؛ مرسی که همراهمونید.
میزنه این نوع فایل رو پشتیبانی نمیکنه
با کدوم کتابخونه و چه فرمتی رو باز میکنید؟
kheili khoob va aali
merci
خوشحالیم که آموزش براتون کاربردی بوده. ممنون واسه انرژی خوبتون 🙂