Ahmed Ahmed64 نشر 17 يناير 2023 أرسل تقرير نشر 17 يناير 2023 import openpyxl wb = openpyxl.load_workbook("test.xlsx") ws=wb['ورقة1'] if ws['E2'].value >50: ws['G2'] = ws['E2'].value elif ws['F2'].value >50: ws['G2'] = ws['F2'].value elif ws['F3'].value >50: ws['G2'] = ws['F3'] .value else: ws['L2'] = ws['E2'].value wb.save("test.xlsx") تعديل الكود حيث يمر على كل إسم وينفذ كما نفذ هذا الكود اقتباس
0 Kais Hasan نشر 18 يناير 2023 أرسل تقرير نشر 18 يناير 2023 سأعطيك الفكرة العامة و يمكنك محاولة تطبيقها لوحدك حيث أنها تقريبا نفس الكود الخاص بك. بشكل أساسي أنت تريد المرور على كل اسم، كل اسم يحوي سطرين، و بالتالي بدلاً من كودك الذي يقوم بوضع قيم الأسطر بشكل ثابت يمكننا القيام بذلك بشكل ديناميكي باستعمال حلقة for. إن الأسطر الخاصة بالأسماء تبدأ من السطر الثاني و بالتالي يمكننا بدء حلقة ال for من ال 2، و في كل مرة نقوم بزيادتها بمقدار 2 (حيث أن كل اسم يحتاج سطرين)، في حال كان اسم المتغير الخاص بالحلقة هو i فإننا نريد الأسطر i و i+1. الباقي نفس الشيء حيث أن الأعمدة لا تختلف هنا. 1 اقتباس
0 Ahmed Ahmed64 نشر 18 يناير 2023 الكاتب أرسل تقرير نشر 18 يناير 2023 أخي إستصعب علي الكود هل هذه البداية صحيحة حيث أنه أريد البحث في عمودين لكل إسم و إيجاد أكبر قيمة مثلا في مادة عربي يكشف عن العمود E و العمود F for row in ws.iter_rows(row=2, col=5,values_only=True): id=row 1 اقتباس
0 Kais Hasan نشر 18 يناير 2023 أرسل تقرير نشر 18 يناير 2023 بتاريخ 55 دقائق مضت قال Ahmed Ahmed: أخي إستصعب علي الكود هل هذه البداية صحيحة حيث أنه أريد البحث في عمودين لكل إسم و إيجاد أكبر قيمة مثلا في مادة عربي يكشف عن العمود E و العمود F for row in ws.iter_rows(row=2, col=5,values_only=True): id=row تحتاج لحلقة for عادية تمر على الأرقام و ليس على السطور بشكل مباشر، حيث أنه يمكنك أن تجعل الخطوة بمقدار 2 و ذلك عن طريق ثالث وسيط في ال range. يمكنك تكوين اسم الخانة على شكل سلسلة نصية، لاحظ في كودك قمت بوضع E2 هنا بدل هذا يمكنك وضع E و رقم السطر بعدها. رقم السطر يكون في الحلقة. 1 اقتباس
0 Ahmed Ahmed64 نشر 18 يناير 2023 الكاتب أرسل تقرير نشر 18 يناير 2023 (معدل) هل بهذه الكيفية الكود يكتب for ws_row in range (2,ws.max_row+1): g=ws.cell(ws_row,4) x=ws.cell(ws_row,5) if g.value >int(50): x.value=g.value print(g.value) ws_row = ws_row + 2 تم التعديل في 18 يناير 2023 بواسطة Ahmed Ahmed اقتباس
0 Ahmed Ahmed64 نشر 18 يناير 2023 الكاتب أرسل تقرير نشر 18 يناير 2023 أين الخطأ هنا for ws_row in range (2,ws.max_row+1): g=ws.cell(ws_row,5).value r=ws.cell(ws_row,6).value q=ws.cell(ws_row+1,6).value if g.value ==int(50): ws.cell(row=ws_row,column=7).value = g elif r.value ==int(50): ws.cell(row=ws_row,column=7).value =r elif q.value ==int(50): ws.cell(row=ws_row,column=7).value = q اقتباس
0 Ahmed Ahmed64 نشر 18 يناير 2023 الكاتب أرسل تقرير نشر 18 يناير 2023 توصلت لهذه المرحلة كيف أجعل الكود يمر الخانات الفارغة دون حدوث خطأ سؤال أخر ( كيف أجعل النتيخة في العمود G والذي يحتوي على خلايا مدموجة for ws_row in range (2,ws.max_row,2): for wk in range (2,ws.max_row,1): if ws.cell(ws_row,5).value > 50: ws.cell(row=ws_row,column=8).value = ws.cell(ws_row,5).value elif ws.cell(wk,6).value > 50: ws.cell(row=wk,column=8).value = ws.cell(wk,6).value اقتباس
السؤال
Ahmed Ahmed64
تعديل الكود حيث يمر على كل إسم وينفذ كما نفذ هذا الكود
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.