جداول بيانات إكسل في بايثون - المهارات الرقمية - ثاني متوسط
الفصل الدراسي الأول
الوحدة الأولى: جمع المعلومات
الوحدة الثانية: مخطط المعلومات البياني
الوحدة الثالثة: البرمجة باستخدام لغة بايثون
الفصل الدراسي الثاني
الوحدة الأولى: تحليل البيانات
الوحدة الثانية: التواصل عبر الإنترنت
الوحدة الثالثة: البرمجة مع بايثون
الفصل الدراسي الثالث
الوحدة الأولى: إنتاج مقطع فيديو
الوحدة الثانية: المخططات البيانية
الوحدة الثالثة: برمجة الروبوت
رابط الدرس الرقمي www.ien.edu.sa الدرس الرابع: جداول بيانات إكسل في بايثون لقد تعلمت سابقًا كيفية استخدام إكسل لإجراء معالجة البيانات البسيطة، مثل إنشاء جداول البيانات، وتطبيق الدوال لتحديد البيانات وفرزها وتنسيقها وإنشاء بعض المخططات بناءً على بياناتك. ستتعلم في هذا الدرس كيفية استخدام بايثون إلى جانب إكسل. العمل مع إكسل و بايثون نظرًا لأنك تعلم بالفعل كيفية استخدام إكسل، فقد تتساءل عن سبب استخدام بايثون للعمل معه. السبب هو أنه باستخدام بايثون يمكنك أتمتة بعض المهام المتكررة، وإجراء بعض العمليات الحسابية المعقدة بشكل أسرع من العمل مع إكسل فقط. لاستخدام بايثون مع إكسل تحتاج إلى مكتبة تسمى أوبين بيكسل .(openpyxl). المكتبة في لغات البرمجة هي عبارة عن حزمة مقاطع برمجية مكتوبة سابقًا، وتؤدي بعض المهام بحيث لا يحتاج المبرمجون إلى كتابة المقطع البرمجي من البداية في كل مرة. مكتبة أوبين بيكسل يوجد في بايثون العديد من المكتبات المثبتة سابقًا، ولكن هناك العديد من المكتبات المتاحة التي يمكنك تنزيلها وتثبيتها، مكتبة أوبين بیکسل (openpyxl هي إحدى تلك المكتبات. يمكنك باستخدامها إجراء عمليات مثل القراءة والكتابة والحسابات الرياضية، وإنشاء الرسوم، والمخططات البيانية. وزارة التعطير Ministry of Education 2024-1446 → python™ X OpenPyXL
Structure Bookmarks 7 لتثبيت مكتبة أوبين بيكسل (openpyxl) > في نافذة Charm باي (تشارم اضغط على Packages .(الحزم). 1 > اكتب openpyxl (أوبين بيكسل) في شريط البحث. @ > اختر openyxl أوبين بيكسل)، واضغط على Install .(تثبيت 0 ® > ستظهر رسالة تُخبرك بأن التثبيت قد اكتمل . 5 File Edit View Navigate Code Refactor Run Tools VCS Window Help G8 52-main-py 68 52 main.py Project Project 68 S2 C\Users\oloikonomou PycharmProjects\68 $2 Iverww literary toot main.py > External Libraries Scratches and Consoles Python Packages main.py Q openpyxl 2 Add Package openpyxl Documentation * Installed (0 found) ▼PyPI repository (13) openpyxi openpyxl-stubs openpyxl-templates openpyxl-utilities openpyxl-dictreader 3 Version Control TODO 6 Problems 1 Coverage 45% Introduction Python Packages Python Console Download pre-built shared indexes: Reduce the indexing time and CPU load with pre-built Python package وزارة التعليم Ministry of Education 2024-1446 5 123 Te Packages installed successfully Installed packages: 'openpyxl main 4 latest Install Event Log ython 3.9 (GS S2) 226
استيراد مكتبة أوبين بيكسل لاستخدام مكتبة أوبين بيكسل بعد تثبيتها، تحتاج إلى استيرادها. يمكنك القيام بذلك باستخدام أمر الاستيراد (import). استيراد مكتبة أوبين بيكسل # import openpyxl العمل مع دفاتر العمل كما تعلم، يمكن أن تحتوي ملفات إكسل على أكثر من ورقة عمل واحدة ، ويمكنك إدخال البيانات ومعالجتها في كل ورقة. في مكتبة أوبين بيكسل، يُطلق على ملف إكسل اسم دفتر العمل ،(Workbook) ، ويمكنك إما إنشاء ملف إكسل جديد أو تحميل ملف موجود سابقًا. دالة تحميل دفتر العمل (()load_workbook) للعمل على ملف اكسل موجود ستستخدم دالة تحميل دفتر العمل (()load_workbook). وعليك وضع الملف في نفس المجلد. جزء المقطع البرمجي، أو استخدام المسار المطلق للملف. سمات أسماء أوراق العمل (sheetnames) مع عادة ما تعمل على ورقة محددة من دفتر العمل، ومن المفيد جدًا معرفة أسماء هذه الأوراق. لرؤية أسماء الأوراق التي يحتوي عليها دفتر العمل، يمكنك استخدام سمة أسماء أوراق العمل (sheetnames). مسار ملف إكسل import openpyxl path = "nutrition.xlsx" wb = openpyxl.load_workbook(path) تعد دالة تحميل دفتر العمل (()load_workbook) وحدة داخل مكتبة أوبين بيكسل (openpyxl) لرؤية أسماء الأوراق في دفتر العمل # sheet_name = wb.sheetnames (sheet_name, يحتوي ملف إكسل على أوراق العمل التالية: ")print يحتوي ملف إكسل على الأوراق التالية : [english", "arabic"] وزارة التعد22 Ministry of Education 2024-1446
سمة الصف الأقصى max_row attribute) وسمة العمود الأقصى max_column attribute) عند العمل باستخدام ملف إكسل، فمن الجيد معرفة عدد الصفوف والأعمدة الموجودة في الورقة للقيام بذلك، يمكنك استخدام سمة الصف الأقصى (max_row) و سمة العمود الأقصى (max_column في ورقة العمل. import openpyxl path wb = = "nutrition.xlsx" openpyxl.load_workbook(path) sheet_obj = wb['arabic'] row = sheet_obj.max_row column = sheet_obj.max_column row "إجمالي السطور: ")print يُحمّل هذا الأمر الورقة المسماة (column, "إجمالي الأعمدة: ")print "arabic" في متغير .sheet_obj السمات Attributes هي بعض الخصائص المضمنة لنوع خاص من المتغيرات، وتسمى الكائنات. إجمالي الصفوف : 12 إجمالي الأعمدة: 12 الوصول إلى الخلايا تحتوي كل خلية في ورقة عمل إكسل على خاصيتين رئيستين، هما موقعها في الملف وقيمته غالبًا ما ستحتاج إلى الوصول إلى قيمة الخلية من أجل طباعتها على الشاشة، أو تغييرها، أو استخدامها لإجراء عمليات حسابية أخرى مثل العثور على مبلغ وما إلى ذلك. يُحمّل هذا الأمر الخلية "A1" في .sheet_obj وزارة التعليم Ministry of Education 2024-1446 هذا يعني الانتقال من الخلية "B1" الى الخلية "B5" import openpyxl path = "nutrition.xlsx" wb = openpyxl.load_workbook(path) wb['arabic' ] sheet_obj = الوصول إلى الخلايا من ورقة العمل كمفاتيح لدفتر العمل # cell = sheet_obj["A1"] لعرض نوع الخلية # print(type(cell)) cell_range print(cell) = sheet_obj["B1" : "B5"] <class 'openpyxl.cell.cell.Cell'> <Cell "arabic".A1> اسم الورقة وموقع الخلية 228
الوصول إلى قيم الخلايا لقد تعلمت كيفية الحصول على موقع الخلية. لكن في معظم الأوقات، تحتاج إلى قيمتها للحصول على قيمة الخلية، تحتاج إلى استدعاء سمة قيمة كائن خلية معين. هذا المثال ستستخدم ملف إكسل للتغذية لطباعة عدد السعرات الحرارية (Kcal من الحليب. كما رأيت من قبل، يحتوي هذا الملف على 12 صفًا و12 صفًا. للحصول على عدد السعرات الحرارية (KCal) من الحليب، عليك أولا العثور على موقعها، وهو "C3" ثم يمكنك استدعاء سمة القيمة في هذه الخلية. C 100 جرام الكالسيوم الحديد الصوديوم الماء الطاقة البروتين الدهون الكربوهيدرات الفوسفور (P) مكونات (Ca) (Na) (Fe) سعر حراري جرام جرام جرام مليجرام البوتاسيوم (K) مليجرام 2 234 مليجرام مليجرام مليجرام 3 الحليب الدجاج 6 برجر بالجبن التفاح الكعك و مثلجات بالشوكولاتة 10 حليب بالشوكولاتة 11 الحس 12 الموز 150 38 0 101 123 4.63 3.25 3.27 61 88.1 132 129 1.67 184 48 0.96 8.65 12.4 143 75.8 239 117 0.94 184 12 0 5.23 23.9 149 69.9 211 508 2.46 201 239 23.9 11.8 13.9 261 48 104 0.02 10 6 15.6 0.16 0.15 65 83.6 245 314 2.28 111 29 69.6 13.7 5.79 430 8.85 249 76 0.93 107 109 28.2 11 3.8 216 55.7 372 79 2.35 208 189 59.4 29.7 7.65 535 1.5 253 0 0.95 30 35 3.24 0.26 1.24 20 94.7 358 0.26 22 5 22.8 0.33 1.09 89 74.9 import openpyxl path = wb = "nutrition.xlsx" openpyxl.load_workbook(path) sheet_obj = wb['arabic' ] position = "C3" cell = sheet_obj[position] value = cell.value print(value) 61 الوصول إلى قيمة أكثر من خلية واحدة افترض الآن أنك تريد الحصول على جميع الحقائق الغذائية للحليب. يمكنك العثور يدويًا على موقع كل خلية ثم استدعاء سمة قيمتها، ولكن ذلك سيستغرق وقتًا طويلًا ومن الممكن أيضًا أن تكون قد ارتكبت بعض الأخطاء. لذلك، يوجد دالتان لهما وظيفتان مفيدتان في اختيار أكثر من خلية واحدة وهما iter_rows و iter_cols. وزارة التعود2 229 Ministry of Education 2024-1446
230 دالة Iter_rows تُستخدام دالة Iter_rows عندما تريد الحصول على جميع القيم لصف أو أكثر في ورقة عمل إكسل. iter_rows (min_row=None, max_row=None, min_col=None, max_col=None) فهرس العمود الأصغر والأكبر فهرس الصف الأصغر والأكبر إذا لم تحدد الفهرس ، فسيبدأ نطاق البحث من الخلية الأولى"A1". ستستخدم دالة iter_rows الآن للحصول على جميع الحقائق الغذائية للحليب. عليك الحصول على جميع مواقع الخلايا لصف الحليب، وهو "3D" ثم استدعاء سمة القيمة. import openpyxl path = "nutrition.xlsx" wb = openpyxl.load_workbook(path) sheet_obj = wb['arabic'] أنشئ متغير صفوف يحتوي على مواقع حقائق التغذية الخاصة بالحليب # sheet_obj.iter_rows(min_row=3, max_row=3, min_col=3, max_col=11) rows = الآن استخدم حلقات for المتداخلة لطباعة قيمة كل خلية # (" "=end , حقائق غذائية عن الحليب: ")print for row in rows: for cell in row: print(cell.value, end=" ") حقائق غذائية عن الحليب: 3.276188.1 1235.633.25 101 0 38 150 وزارة التعليم Ministry of Education 2024-1446
دالة Iter_cols تُستخدام دالة Iter_cols عندما تريد الحصول على جميع القيم لعمود أو أكثر في ورقة عمل إكسل. iter_cols (min_col=None, max_col=None, min_row=None, max_row=None) فهرس الصف الأصغر والأكبر فهرس العمود الأصغر والأكبر إذا لم تحدد الفهرس، فسيبدأ نطاق البحث من الخلية الأولى "A1". ستستخدم Iter_cols للحصول على عدد السعرات الحرارية (kal) لجميع المكونات الموجودة في ورقة العمل. ستحتاج إلى الحصول على مواقع جميع الخلايا ثم استدعاء سمة القيمة. import openpyxl path = "nutrition.xlsx" wb = openpyxl.load_workbook(path) sheet_obj = wb['arabic' ] أنشئ متغير Cols يحتوي على مواقع حقائق الطاقة لجميع المكونات # cols = sheet_obj.iter_cols(min_col=3, max_col=3, min_row=3, max_row=12) الآن استخدم حلقات for المتداخلة لطباعة قيمة كل خلية # (" "=end ,"السعرات الحرارية لجميع المكونات: ")print for col in cols: for cell in col: print(cell.value, end=" ") السعرات الحرارية لجميع المكونات: 2164306526114914361 535 20 89 وزارة التعدد2 Ministry of Education 2024-1446
كتابة القيم لقد تعلمت كيفية الحصول على الخلايا والقيم من ورقة العمل من الأمور المهمة عند العمل على ملفات إكسل هي كتابة القيم في الخلايا، حيث يمكنك إما إنشاء صفوف وأعمدة جديدة وإضافة قيم في خلايا فارغة، أو يمكنك تغيير قيم الخلايا الموجودة. يمكنك تغيير قيمة الخلية باستخدام دالة الخلية (cell). cell(row=None, column=None) فهرس الصف والعمود ستعمل على ملف التغذية في إكسل وتغير القيم الموجودة في هذا الملف، ستُحسب قيم العناصر الغذائية لكل مكون في كل 100 جرام. إذا كنت ترغب في تحويل هذه القيم لإظهارها في كل 30 جرامًا من المكونات، فيجب عليك تغيير كل قيمة وفقًا للصيغة التالية: new_value = old_value * 30 / 100 عليك أولا تغيير قيمة B1 من 100 جرام إلى 30 جرام". عند حفظ التغييرات في ملف إكسل من خلال أوامر بايثون، يجب فتح الملف فقط في بايثون وإلا فلن تحدث التغييرات، وستظهر رسالة خطأ في حال كان ملف الإكسل مفتوحًا في برنامج إكسل في نفس الوقت. import openpyxl path = "nutrition.xlsx" wb = openpyxl.load_workbook(path) sheet_obj = wb["arabic"] غير الخلية B1 # sheet_obj.cell(row=1, column=2).value wb.save("nutrition.xlsx") 30 = E لحفظ دفتر العمل "30 جرام" الآن إذا فتحت ملف إكسل مرة أخرى، فستتغير قيمة الخلية "B1". الكالسيوم الحديد الصوديوم الفوسفور (P) البوتاسيوم (K) | (Ca) (Na) (Fe) مليجرام مليجرام مليجرا مليجرام 150 38 0 101 123 4.63 3.25 3.27 132 129 1.67 184 48 0.96 8.65 12.4 الماء الطاقة البروتين الدهون الكربوهيدرات مكونات جرام سعر حراري جرام جرام جرام 2 مليجرام 3 الحليب 4 البيض 61 88.1 143 75.8 239 117 0.94 184 12 5.23 23.9 149 69.9 5 الدجاج 211 508 2.46 201 239 23.9 11.8 13.9 261 48 104 1 0.02 10 6 15.6 0.16 0.15 65 83.6 245 314 2.28 111 29 69.6 13.7 5.79 430 8.85 249 76 0.93 107 109 28.2 11 3.8 216 55.7 372 79 2.35 208 189 59.4 29.7 7.65 535 1.5 6 برجر بالجبن 7 النفاح 8 الكعك و مثلجات بالشوكولاتة 10 حليب بالشوكولاتة 253 0 0.95 30 35 3.24 0.26 1.24 20 94.7 358 0.26 22 5 22.8 0.33 1.09 89 74.9 11 الخس 12 الموز وزارة التعليم Ministry of Education 2024-1446 232
لتغيير كل خلية تغذية عليك بتطبيق الصيغة ثم حفظ دفتر العمل. للقيام بذلك، عليك استخدام حلقتين for ، واحدة تمر عبر كل صف import openpyxl والأخرى تمر عبر كل عمود. wb = openpyxl.load_workbook(filename="nutrition.xlsx") sheet_obj = wb["arabic"] for row in range (3,13): for col in range (2,12): = لأن قيم الخلايا هي من نوع كائن (object)، ستحتاج إلى تحويلها إلى عدد عشري (float) لإجراء العمليات الحسابية old_value new_value = float(old_value) * 30 / 100 sheet_obj.cell(row=row, column-col).value sheet_obj.cell(row= row, column=col).value wb.save("nutrition.xlsx") = new_value H E 45 11,4 30,3 36,9 39,6 38,7 55,2 14,4 71,7 35,1 0,282 55,2 3,6 الماء الطاقة مكونات جرام شعر حراري الدهون الكربوهيدرات البروتين جرام جرام 30 جرام الكالسيوم الحديد الصوديوم الفوسفور (P) البوتاسيوم (K) | (Ca) (Na) (Fe) جرام مليجرام مليجرام مليجرام | مليجرا مليجرام 3 الحليب 4 البيض 1,389 0,975 0,981 18,3 26,43 0,288 2,595 3,72 42,9 22,74 0 1,569 7,17 44,7 20,97 5 الدجاج 63,3 152,4 0,738 60,3 71,7 7,17 3,54 4,17 78,3 14,4 31,2 0,3 0,006 3 1,8 4,68 0,048 0,045 19,5 25,08 73,5 94,2 0,684 33,3 8,7 20,88 4,11 1,737 129 2,655 74,7 22,8 0,279 32,1 32,7 8,46 3,3 1,14 64,8 6 برجر بالجين التفاح 8 الكعك و مثلجات بالشوكولاتة 16,71 111,6 23,7 0,705 62,4 56,7 17,82 75,9 0 0,285 9 10,5 0,972 107,4 0,3 0,078 6,6 1,5 6,84 10 حليب بالشوكولاتة 11 الخس 12 الموز كما ترى فقد تغيرت جميع القيم الغذائية، واستغرقت هذه المهمة وقتًا أقل بكثير من تغيير كل قيمة يدويًا. هذا النوع من الأتمتة مفيد للغاية خاصة إذا كنت تعمل مع ملفات كبيرة جدًا. 8,91 2,295 160,5 0,078 0,372 6 0,45 28,41 0,099 0,327 26,7 22,47 وزارة التعد23 Ministry of Education 2024-1446
234 لنطبق معًا تدريب 1 اكتب ناتج المقطع البرمجي التالي: import openpyxl wb = openpyxl.load_workbook(filename="nutrition.xlsx") sheet_obj = wb ["arabic"] rows = sheet_obj.iter_rows(min_row=3, max_row=5, min_col=1, max_col=11) for row in rows: for cell in row: print(cell.value, end=" ") print(" ") الناتج وزارة التعليم Ministry of Education 2024-1446
تدريب 2 ما وظيفة المقطع البرمجي التالي؟ وما مخرجاته؟ تدريب 3 import openpyxl wb = openpyxl.load_workbook(filename="nutrition.xlsx") sheet_obj = wb["arabic"] for row in range (3,13): value = float(sheet_obj.cell(row=row, column=5).value) if (value < 2): print(sheet_obj.cell(row=row, column=1).value) الناتج اكتب مقطعًا برمجيًا باستخدام مكتبة أوبين بيكسل (openyl)، يعمل على تحميل مجموعة بيانات ملف التغذية وطباعة قيم عناوين الأعمدة. تدريب 4 اكتب مقطعًا برمجيًا باستخدام مكتبة أوبين بيكسل (openpyxl)، يعمل على تحميل مجموعة بيانات ملف التغذية وطباعة جميع القيم الغذائية الأصغر من 25. وزارة التعر23 Ministry of Education 2024-1446