NameError:未定义名称“工作表”

python django

1818 观看

4回复

53 作者的声誉

这个问题已经在这里有了答案:

我收到一个错误:

NameError:名称“工作表”未定义。我想解析excel并打印内容。

我写的代码:

class ReadData():
    def __init__(self, sheet_path):
        self.book = xlrd.open_workbook(sheet_path)
        self.sheet = self.book.sheet_by_index(1)
        self.companies = []

    def read(self):
        for row_index in range(2, sheet.nrows):
            rows = sheet.row_values(row_index)
            print(rows)

x = ReadData('./data/excel1.xlsx')
x.read()

我真的不明白为什么会发生此错误。我应该添加一些要使用init的方法吗?

作者: user8563636 的来源 发布者: 2017 年 9 月 15 日

回应 4


1

41071 作者的声誉

您应该使用self.sheet而不是sheet。因此,将您的方法更新为

def read(self):
    # ------------------------v
    for row_index in range(2, self.sheet.nrows):
       #---------v
        rows = self.sheet.row_values(row_index)
        print(rows)
作者: Rohan 发布者: 2017 年 9 月 15 日

1

880 作者的声誉

在读取功能中,没有定义工作表。你应该使用self.sheet.nrows

作者: Max 发布者: 2017 年 9 月 15 日

0

729 作者的声誉

尝试这个

class ReadData():
    def __init__(self, sheet_path):
        self.book = xlrd.open_workbook(sheet_path)
        self.sheet = self.book.sheet_by_index(1)
        self.companies = []

    def read(self):
        for row_index in range(2, self.sheet.nrows):
            rows = self.sheet.row_values(row_index)
            print(rows)

x = ReadData('./data/excel1.xlsx')
x.read()

我在第8行的self.前面添加了一个sheet

作者: Old Panda 发布者: 2017 年 9 月 15 日

0

1550 作者的声誉

该错误本身表明它无法sheet在您的read()方法中找到属性。您sheet在两个地方使用过:1:在for循环中range 2:在循环的第一行中for

如果要在中的任何方法内使用任何属性python,则它只能是类变量或局部变量或实例变量或某些导入的属性。

class variableinstance variable可以通过访问self

在您的情况下,sheetinstance variable,因此只能使用进行访问self

因此,如果您更改sheetby的这两次出现self.sheet,它将起作用。

这是您的更正代码

class ReadData(object):
    def __init__(self, sheet_path):
        self.book = xlrd.open_workbook(sheet_path)
        self.sheet = self.book.sheet_by_index(1)
        self.companies = []

    def read(self):
        for row_index in range(2, self.sheet.nrows):
            rows = self.sheet.row_values(row_index)
            print(rows)

x = ReadData('./data/excel1.xlsx')
x.read()
作者: Amit Yadav 发布者: 2017 年 9 月 15 日
32x32