اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم

أتعامل مع لغة python في كتابة الكود

أستخدم مكتبة Openpyxl للتعامل مع ملفات Excel Workbooks

أحاول أن أطبق عمل class في كتابة الأكواد بحيث يكون لدي ملف مستقل به مجموعة من الأكواد أقوم من  خلاله بإستدعاء الكود المطلوب تنفيذه في البرنامج الرئيسي

أردت أن أطبق عمل class على إستدعاء ملف إكسل وورقة العمل ( Workbooks , sheet )

إعلم أن الكود العادي لتنفيذ ذلك هو كا الأتي

workbook = load_workbook('D:\abc.xlsx')
sheet = workbook.active

كيف أقوم بتحويل هذا الكود  إلى class أو إجراء داخل الكلاس , حيث أستطيع أن أتعامل معه , وأصل إليه في أي مكان عند كتابة الكود داخل البرنامج

أحتاج أن أحتر ف أكثر في كتابة الكود 

وهذا إجتهادي في ذلك

from openpyxl import load_workbook
   
class W_book :
  def __init__(self,workbook,sheet,BATH):
    self.workbook = workbook
    self.sheet = sheet
    self.BATH = BATH
    workbook = load_workbook(BATH)
    sheet = workbook.active

وعند الأستدعاء من صفحة البرنامج 

from cls1 import W.book

بعد ذلك أقوم بتعريف متغير 

a = W.book(workbook, sheet, 'D:\ABC.xlsx' )

هل هذا صحيح , ولاكن كيف أتعامل مع المتغيرات  بسلاسة عند كتابة الأكود كا أن أستدعي إسم sheet مثلا  في باقي الأكود لسحب القيم من الأعمدة و الصفوق مثلا لذلك.

تم التعديل في بواسطة Ali Ali49

Recommended Posts

  • 0
نشر

هناك بعض التعديلات التي يجب إجراؤها كالتالي:

في الدالة __init__ التي تم إنشاؤها في الـ class W_book، يجب تعيين قيمة المتغيرات workbook و sheet إلى القيم التي يتم تمريرها إلى الـ constructor، وذلك باستخدام self للإشارة إلى المتغيرات الخاصة بالـ class. كما يجب تحميل الملف باستخدام load_workbook داخل الـ constructor.

from openpyxl import load_workbook

class W_book:
    def __init__(self, BATH):
        self.BATH = BATH
        self.workbook = load_workbook(BATH)
        self.sheet = self.workbook.active

وعند استدعاء الكلاس من صفحة البرنامج، بإمكانك تمرير مسار الملف إلى الـ constructor لإنشاء كائن الـ class وتعيينه للمتغير a، كمثال:

from cls1 import W_book

a = W_book('D:\ABC.xlsx')

الآن تستطيع الوصول إلى المتغيرات workbook و sheet باستخدام a.workbook و a.sheet على التوالي في باقي الأكواد، مثلاً، إذا كنت ترغب في سحب القيم من الأعمدة والصفوف، باستطاعتك  استخدام a.sheet['A1'].value للوصول إلى قيمة الخلية A1.

  • 0
نشر

أفترض أن لدي دالة  def  ,, الغرض منها إستخراج أسماء أوراق العمل من المتغير a  , كيف يتم ذلك

def S_Names():
        q= a.workbook.sheetnames
        print(q)
        return(q)

هل يمكن الوصول إلى المتغير a  بهذه الكيفية أم هناك طرق أفضل

  • 0
نشر (معدل)

أحسنت , جزاك الله خيراً  أستاذي ( Mustafa )

أستاذي أرجو المعذرة 

أحتاج إضافة على الكود السابق وهو الكود التالي 

from openpyxl import load_workbook

class W_book:
    def __init__(self, BATH):
        self.BATH = BATH
        self.workbook = load_workbook(BATH)
        self.sheet = self.workbook.active

لإضافة السطر التالي

column_values = [cell.value for cell in sheet['A']]

وهذا إجتهادي في تعديل الكود

from openpyxl import load_workbook

class W_book:
    def __init__(self, BATH):
        self.BATH = BATH
        self.workbook = load_workbook(BATH)
        self.sheet = self.workbook
        self.column_values = [cell.value for cell in self.sheet['A']]

 

تم التعديل في بواسطة Ali Ali49
  • 0
نشر

هل ممكن المساعدة على تعديل الكود السابق بحيث لا يتم تحميل الملف تلقائياً عند فتح البرنامج إلا من خلال الضغط على الزر تحميل ملف مثلا 

لأن ذلك يحدث ثقلا عند فتح البرنامج في حين كانت ورقة العمل مليئة.

  • 0
نشر
بتاريخ 5 ساعة قال Ali Ali49:

هل ممكن المساعدة على تعديل الكود السابق بحيث لا يتم تحميل الملف تلقائياً عند فتح البرنامج إلا من خلال الضغط على الزر تحميل ملف مثلا 

لأن ذلك يحدث ثقلا عند فتح البرنامج في حين كانت ورقة العمل مليئة.

يمكنك استخدام خاصية lazy loading لتحميل الملف عند الضغط على زر التحميل، وذلك باستخدام دالة openpyxl.load_workbook، وإرجاع الملف المفتوح في دالة __init__ دون تحميله، كما يلي:

from openpyxl import load_workbook

class W_book:
    def __init__(self, workbook, sheet):
        self.workbook = workbook
        self.sheet = sheet

    def load_workbook(self, path):
        self.workbook = load_workbook(path)

وعند الضغط على زر التحميل، يمكن استدعاء دالة `load_workbook` لتحميل الملف، كما يلي:

بهذه الطريقة، يتم تحميل الملف فقط عند الضغط على زر التحميل، ولا يتم تحميله تلقائيًا عند فتح البرنامج، مما يقلل من عبء تحميل الملف ويجعل عملية فتح البرنامج أسرع.

  • 0
نشر
بتاريخ 46 دقائق مضت قال عبدالباسط ابراهيم:

يمكنك استخدام خاصية lazy loading لتحميل الملف عند الضغط على زر التحميل، وذلك باستخدام دالة openpyxl.load_workbook، وإرجاع الملف المفتوح في دالة __init__ دون تحميله، كما يلي:

from openpyxl import load_workbook

class W_book:
    def __init__(self, workbook, sheet):
        self.workbook = workbook
        self.sheet = sheet

    def load_workbook(self, path):
        self.workbook = load_workbook(path)

وعند الضغط على زر التحميل، يمكن استدعاء دالة `load_workbook` لتحميل الملف، كما يلي:

بهذه الطريقة، يتم تحميل الملف فقط عند الضغط على زر التحميل، ولا يتم تحميله تلقائيًا عند فتح البرنامج، مما يقلل من عبء تحميل الملف ويجعل عملية فتح البرنامج أسرع.

ارجو منك توضيح أكثر لهذا السطر كيف أقوم بذلك ( وإرجاع الملف المفتوح في دالة __init__ دون تحميله )

دالة openpyxl.load_workbook، وإرجاع الملف المفتوح في دالة __init__ دون تحميله، كما يلي:

  • 0
نشر (معدل)
بتاريخ 18 ساعة قال Ali Ali49:

ارجو منك توضيح أكثر لهذا السطر كيف أقوم بذلك ( وإرجاع الملف المفتوح في دالة __init__ دون تحميله )

دالة openpyxl.load_workbook، وإرجاع الملف المفتوح في دالة __init__ دون تحميله، كما يلي:

سأحاول التوضيح أكثر

تحتاج إلى استخدام دالة openpyxl.load_workbook() لتحميل ملف Excel. يمكنك استخدام هذه الدالة لتحميل الملف وإرجاعه ككائن Workbook دون فتحه في الدالة __init__

يمكنك استخدام openpyxl.load_workbook() لتحميل الملف وإرجاعه ككائن Workbook. يمكنك تخزين هذا الكائن المسترجع في متغير داخلي في الكلاس لاستخدامه لاحقًا في أي دوال أخرى في الكلاس.

تم التعديل في بواسطة عبدالباسط ابراهيم
خطأ إملائي

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...