XlsxWriter 是否可以输出相同的二进制文件?

Is binary identical output possible with XlsxWriter?

对于相同的输入,是否可以使用 XlsxWriter 使输出二进制文件相同?

我尝试将 created 属性 更改为同一日期,这有点帮助。 sharedStrings.xml.

还是有很多区别

谢谢

如果您在 worksheet properties 中设置 created 日期,则相同的输入是:

import xlsxwriter
import datetime

for filename in ('hello1.xlsx', 'hello2.xlsx'):
    workbook = xlsxwriter.Workbook(filename)
    workbook.set_properties({'created': datetime.date(2016, 4, 25)})

    worksheet = workbook.add_worksheet()
    worksheet.write('A1', 'Hello world')
    workbook.close()

然后:

$ cmp hello1.xlsx hello2.xlsx

# No output. Files are the same.

将字符串添加到文件的顺序将改变 sharedStrings 的布局 table,从而导致文件不相同。 Excel 通常也是这种情况。

注意:这需要 XlsxWriter 版本 1.0.4 或更高版本才能工作。

虽然是 appears to have repudiated的作者吧,貌似是对的,但不是全貌。我在 Python 3.7 和 XlsxWriter 1.1.2 上进行了自己的测试。如果您的文件很小,您不会注意到创建时间问题,因为它们的写入速度非常快,它们的默认创建时间“now()”将是相同的。

第一个答案中缺少的是您需要对 write_* 方法进行 相同次数的调用 。例如,如果您对其中一个工作簿的同一单元格调用 write followed by merge_range,则需要对另一个工作簿调用相同的顺序。例如,您不能跳过 write 调用而只执行 merge_range。如果这样做,sharedStrings.xml 文件将具有不同的 count 值,即使 uniqueCount 的值相同。

如果你能安排这些事情成真,那么你的两个工作簿在二进制级别应该是相等的。