使用相同的输入可以使用XlsxWriter使输出二进制相同吗?
我尝试将创建的属性更改为相同的日期,这有点帮助。仍然在 sharedStrings.xml 中获得了很多不同。
由于
答案 0 :(得分:1)
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表的布局,从而导致不相同的文件。这也是Excel的情况。
注意:这需要XlsxWriter 1.0.4或更高版本才能运行。
答案 1 :(得分:0)
尽管previous answer的作者似乎拥有repudiated,但这似乎是正确的,但不是全部。我在Python 3.7和XlsxWriter 1.1.2上做了自己的测试。如果文件很小,您将不会注意到创建时间的问题,因为它们会被如此快地写入,其默认创建时间“ now()
”将是相同的。
第一个答案缺少的是,您需要对write_*
方法进行相同数量的调用。例如,如果您在其中一个工作簿的同一单元格上依次呼叫write
和merge_range
,则对于另一个工作簿,您需要具有相同的调用顺序。例如,您不能跳过write
呼叫,而只能执行merge_range
。如果这样做,即使sharedStrings.xml
的值相同,count
文件也将具有不同的uniqueCount
值。
如果您可以安排这些事情成真,那么您的两个工作簿应在二进制级别上相等。