【问题标题】:Python: open existing Excel file and count rows in sheetPython:打开现有的 Excel 文件并计算工作表中的行数
【发布时间】:2014-05-30 02:40:14
【问题描述】:

我有一个现有的 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 新手,也许我只是做错了什么。一些帮助或提示会很好。 谢谢

【问题讨论】:

    标签: python excel count rows xlrd


    【解决方案1】:

    第二种方法是正确的,只是你应该替换:

    w.save('Automation_Result.xls')
    

    与:

    workbook.save('Automation_Result.xls')
    

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

    【讨论】:

    • 啊是的,这是一个错字,谢谢没看到这个,但是改变它,对错误消息没有影响。我仍然得到:raise XLRDError("Can't load sheet after release resources.") xlrd.biffh.XLRDError: Can't load sheet after release resources.
    • @julesmummdry 好的,让我们看看,你能发布回溯吗?它在哪一行抛出错误?
    • get_sheet 导致了它。我会尝试使用 sheet_by_index。
    【解决方案2】:

    您的顶级代码运行方式不同,或者缺少xlrd.open_workbookxlrd 部分...

    您可以使用以下方法获得result_sheet 而不会出现该错误:

    result_sheet = workbook.sheet_by_index(0)
    

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

    您使用的是什么库?只是xlrd?我没有看到列的.width 属性(至少在我的示例中,它是list 类型),并且不确定您在使用这部分代码做什么。

    您是否总是想将找到的行数写入第 10 行?该数字永远不会以功能方式被索引,并且 else 之前的最后一行总是会打印 11

    【讨论】:

    • 我希望每个单元格都具有相同的宽度和一个相当大的宽度。所以我说列应该是这个宽度。到目前为止,这有效。最后几行现在只是一个测试,最后我希望实际的行数是索引+1,写入该行而不是增加计数。但实际上我不需要增加,因为当脚本再次运行时它不知道它。所以只需写入行索引(实际计数)+1。我导入 xlrd、xlwt、xlutils。我将再次尝试在没有复制和 sheet_by_index 的情况下运行它。感谢您的意见!
    • 你是对的,现在我看到了错误,它是一个列表。有了这个 sn-p,我只想让每一列都具有相同的更大宽度。如果我不做列宽魔术,让我们看看代码是否有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多