Python:打开现有的Excel文件并计算工作表中的行数

5

我有一个现有的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个回答

5

您的代码可能在运行时与正常情况不同,或者缺少xlrd.open_workbookxlrd部分...

您可以通过使用以下方法来获取没有错误的result_sheet

result_sheet = workbook.sheet_by_index(0)

我试图使用.get_sheet时遇到了错误。
您在使用什么库?仅仅是xlrd吗?在我的例子中,我没有看到列的.width属性(至少是列表类型),而且我不确定您对代码的这部分是在做什么。
您是否总是希望将找到的行数写入第10行?那个数字永远不会以功能化的方式索引,而且else之前的最后一行总是会打印11

我希望每个单元格都有相同且足够宽的宽度。因此,我指定了列应该具有这种宽度。到目前为止,这样做起作用了。最后几行只是一个测试,最终我希望实际行数为索引+1,在该行编写,然后增加计数。但实际上我不需要增加计数,因为当脚本再次运行时,它并不知道。因此,只需编写到行索引(实际计数)+1即可。我导入xlrd、xlwt和xlutils。我将尝试在没有复制和sheet_by_index的情况下再次运行它。感谢您的输入! - julesmummdry
你说得对,现在我看到错误了,它是一个列表。用这个片段,我只想让每一列都有相同的更大的宽度。让我们看看如果不进行列宽度的操作,代码是否能够工作。 - julesmummdry

2
第二种方法是正确的,但是您应该替换为:
w.save('Automation_Result.xls')

使用:

workbook.save('Automation_Result.xls')

由于workbook变量是代码块中已打开的xlrd Workbook的引用。


啊是的,这是个打字错误,谢谢指出。但是更改它不会对错误信息造成影响。我仍然会得到:raise XLRDError("Can't load sheets after releasing resources.") xlrd.biffh.XLRDError: Can't load sheets after releasing resources. - julesmummdry
@julesmummdry 好的,那我们来看看,你能发一下回溯信息吗?它在哪一行报错了? - alecxe
get_sheet 导致了这个问题。我会尝试使用 sheet_by_index。 - julesmummdry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接