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

التعامل مع Excel Workbooks من خلال class بإستخدام مكتبة Openpyxl

Ali Ali49

السؤال

السلام عليكم

أتعامل مع لغة 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

تستطيع الوصول إلى المتغير a في دالة S_Names() عن طريق تمريره كوسيطة إلى الدالة.

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

ثم استدعاء الدالة S_Names() وتمرير المتغير a إليها لاستخراج أسماء أوراق العمل. 

S_Names(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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...