【问题标题】:Comparing openpyxl workbooks比较 openpyxl 工作簿
【发布时间】:2014-07-24 09:40:42
【问题描述】:

当我比较应该相同的工作簿对象时,我得到False 而不是True。这是一个例子:

$ import openpyxl
$ w1 = openpyxl.load_workbook('Foo.xlsx')
$ w2 = openpyxl.load_workbook('Foo.xlsx')
$ w1 == w2
False

发生了什么事?

额外问题:有没有办法比较工作簿? (我正在为操作 Excel 的脚本编写单元测试。)

【问题讨论】:

    标签: python-3.x openpyxl


    【解决方案1】:

    当您调用“load_workbook”时,它会创建一个新的 openpyxl 工作簿对象实例。该变量指向内存中存储该对象的位置。

    当你让 python 比较 w1 和 w2 时,它只能比较对内存位置的引用。只需输入变量名即可在空闲时查看内存地址。

    >>> wb1 = load_workbook('master.xlsx')
    >>> wb2 = load_workbook('master.xlsx')
    >>> wb1 == wb2
    False
    >>> wb1
    <openpyxl.workbook.workbook.Workbook object at 0x03ED3B50>
    >>> wb2
    <openpyxl.workbook.workbook.Workbook object at 0x04AD7E30>
    

    如果您想验证一个工作簿是否与另一个工作簿相同,您需要编写自己的代码来深入了解每个对象。一种方法是使用散列。 (见:https://stackoverflow.com/a/16876405/2535649)

    【讨论】:

    • 这很有帮助,让我朝着正确的方向前进。我写了一些东西,把工作簿变成字典,然后比较它们。
    • @Tom 通常比较工作簿非常困难。您必须指定要比较的工作簿的哪些部分:如果具有相同名称的工作表,它们是否相同?工作表应该相同吗?等
    • @user2385133 我希望结果是True,前提是他们有相同数量的工作表名称和内容相同。 (但是,在我想写一个测试的上下文中,我很高兴假设两者都有一个同名的工作表。)
    • wb1.get_sheet_names() == wb2.get_sheet_names() 将是一个开始。下一步是比较所有工作表中的所有单元格,但可能需要很长时间。完整的比较还必须考虑图表和样式等内容,以免出现误报。
    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多