Python:打开已有Excel文件并统计表格行数

5 投票
2 回答
10433 浏览
提问于 2025-04-18 02:50

我有一个现成的Excel文件。我想打开这个文件,计算一下这个表格里的行数,然后在下一行写入一些内容,再把它保存起来。但是我遇到了以下错误信息:

AttributeError: 'Worksheet' object has no attribute 'nrows'

但很明显,这个方法是存在的,因为大家都在用它来获取行数。我写的代码看起来是这样的:

def write_xls_result(test_case):
    testCase = re.sub("/", "_", test_case)
    automation_report = os.path.expanduser("~/Library/pathtofile/UITests.xctest/Contents/Resources/Automation_Result.xls")
    if os.path.isfile(automation_report):

        w = copy(open_workbook(automation_report))
        copy_sheet = w.get_sheet(0)
        col_width = 256 * 30

        try:
            for i in itertools.count():
                copy_sheet.col(i).width = col_width
        except ValueError:
            pass

        for row in range(copy_sheet.nrows):
             print '{} {}'.format("Row COUNT",copy_sheet.nrows)

        row_index = 10
        copy_sheet.write(row_index,0, testCase)
        w.save('Automation_Result.xls')
        row_index += 1
        print '{} {}'.format("RRRROOOOWWWWW",row_index)

    else:

所以我也尝试了另一种方法:

def write_xls_result(test_case):
    testCase = re.sub("/", "_", test_case)
    automation_report = os.path.expanduser("~/Library/pathtofile/UITests.xctest/Contents/Resources/Automation_Result.xls")
    if os.path.isfile(automation_report):
        workbook = xlrd.open_workbook(automation_report)
        result_sheet = workbook.get_sheet(0)
        rowcount = result_sheet.nrows
        print '{} {}'.format("Row COUNT",rowcount)

        col_width = 256 * 30

        try:
            for i in itertools.count():
                result_sheet.col(i).width = col_width
        except ValueError:
            pass

        row_index = 10
        result_sheet.write(row_index,0, testCase)
        workbook.save('Automation_Result.xls')
        row_index += 1
        print '{} {}'.format("RRRROOOOWWWWW",row_index)

    else:

结果我又遇到了这个错误:

raise XLRDError("Can't load sheets after releasing resources.")
xlrd.biffh.XLRDError: Can't load sheets after releasing resources.

我还是Python新手,也许我只是做错了什么。如果能得到一些帮助或提示就太好了。谢谢!

2 个回答

2

第二种方法是对的,不过你需要把:

w.save('Automation_Result.xls')

换成:

workbook.save('Automation_Result.xls')

因为workbook这个变量是你在代码块中打开的xlrd工作簿的引用。

5

你的代码可能运行方式不同,或者缺少了 xlrd 这个部分,也就是 xlrd.open_workbook...

你可以通过以下方式获取 result_sheet,这样就不会出错:

result_sheet = workbook.sheet_by_index(0)

(我尝试 .get_sheet 时遇到了错误)

你在用什么库?只是 xlrd 吗?我没有看到列有 .width 这个属性(至少在我的例子中,它是 list 类型),而且我不太明白你在那部分代码里想做什么。

你总是想把找到的行数写入第10行吗?这个数字从来没有以功能性的方式被索引,而且在 else 之前的最后一行总是会打印出 11

撰写回答