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
的值相同。
如果你能安排这些事情成真,那么你的两个工作簿在二进制级别应该是相等的。
对于相同的输入,是否可以使用 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 或更高版本才能工作。
虽然是now()
”将是相同的。
第一个答案中缺少的是您需要对 write_*
方法进行 相同次数的调用 。例如,如果您对其中一个工作簿的同一单元格调用 write
followed by merge_range
,则需要对另一个工作簿调用相同的顺序。例如,您不能跳过 write
调用而只执行 merge_range
。如果这样做,sharedStrings.xml
文件将具有不同的 count
值,即使 uniqueCount
的值相同。
如果你能安排这些事情成真,那么你的两个工作簿在二进制级别应该是相等的。