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

خطأ NameError: name 'sheet' is not defined أثناء جلب القيمة من ملف excel - بايثون

Ahmed Ahmed64

السؤال

أرجو منكم  تصحيح الكود للوصول لقيمة sheet

def openFile():
    
    filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*")))
    wb = load_workbook(filepath)
    sheet = wb.active 
                                          
def a():
     
    abc=sheet.cell(row=9,column=4).value
    print(abc)
openFile()
a()

حيث يظهر الخطأ التالي 

NameError: name 'sheet' is not defined

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الخطأ يوضح أن المتغير sheet غير معرف وهذا واضح ، ﻷنك تقوم بإستدعاءه من دالة أخرى . 

لتصحيح الخطأ قم بإرجاع المتغير في الدالة openFile بهذا الشكل 

def openFile():
    
    filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*")))
    wb = load_workbook(filepath)
    sheet = wb.active 
    return sheet

ثم في الدالة الثانية 

def a():
    sheet = openFile() # استرجاع المتغير 
    abc=sheet.cell(row=9,column=4).value
    print(abc)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يبدو الكود الذي قدمته أنه من المفترض أن يفتح ملف Excel باستخدام وحدة filedialog ، وتحميل الورقة النشطة من المصنف workbook ، ثم استرداد قيمة خلية معينة (الصف 9 ، العمود 4) وطباعتها.

ومع ذلك ، هناك مشكلتان في الكود تمنعه من العمل بشكل صحيح.

يتم تعريف الورقة داخل دالة

openFile ()

، ولكن تتم الإشارة إليها في دالة

a ()

. لإصلاح ذلك ، تحتاج إلى التأكد من تعريف الورقة على أنها متغير عام بحيث يمكن الوصول إليها من خلال كلتا الوظيفتين. يمكنك القيام بذلك عن طريق إضافة "global sheet" في بداية دالة

openFile ()

.يقوم التابع

filedialog.askopenfilename()

بإرجاع سلسلة نصية ، لكن دالة 

load_workbook () 

تتوقع كائنًا يشبه المسار. لذلك تحتاج إلى تحويل السلسلة التي تم إرجاعها إلى كائن يشبه المسار عن طريق إضافة مكتبة "pathlib" واستخدام دالة

pathlib.Path ()

لتحويل السلسلة إلى كائن يشبه المسار.

هذا هو الكود المصحح: 

from pathlib import Path
import openpyxl
from openpyxl import load_workbook
import filedialog

def openFile():
    global sheet
    filepath = filedialog.askopenfilename(initialdir="C:\\Users\\Cakow\\PycharmProjects\\Main",title="Open file okay?",filetypes= (("text files","*.xlsx"),("all files","*.*")))
    filepath = Path(filepath)
    wb = load_workbook(filepath)
    sheet = wb.active 
                                          
def a():
    global sheet
    abc=sheet.cell(row=9,column=4).value
    print(abc)

openFile()
a()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

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

الرجاء التوضيح بكتابة الكود ليسهل عليا الفهم والتطبيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...