XlsxWriter可以实现二进制相同的输出吗?

时间:2016-04-25 14:25:43

标签: xlsxwriter

使用相同的输入可以使用XlsxWriter使输出二进制相同吗?

我尝试将创建的属性更改为相同的日期,这有点帮助。仍然在 sharedStrings.xml 中获得了很多不同。

由于

2 个答案:

答案 0 :(得分:1)

如果您在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表的布局,从而导致不相同的文件。这也是Excel的情况。

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

答案 1 :(得分:0)

尽管previous answer的作者似乎拥有repudiated,但这似乎是正确的,但不是全部。我在Python 3.7和XlsxWriter 1.1.2上做了自己的测试。如果文件很小,您将不会注意到创建时间的问题,因为它们会被如此快地写入,其默认创建时间“ now()”将是相同的。

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

如果您可以安排这些事情成真,那么您的两个工作簿应在二进制级别上相等。