我遇到了一个生产问题,其中两个MD5哈希值在Excel 2003二进制文件的服务器版本(由Syncfusion .NET库生成)与本地二进制文件之间不匹配。 当我上传仅通过双击通过Windows资源管理器打开的本地Excel文件时,服务器发现MD5哈希值不同,并且不允许文件上载。 只需用Excel 2007打开Excel 2003文件(有些报告与Excel 2003相同) 将导致在文件开头更改几个字节(我想在文件开头的Excel元数据中)
确认我使用了CMD控制台的文件比较程序:
fc.exe /b ExcelFile2003binary_Opened.xls ExcelFile2003binary.xls
这是从偏移0000046C开始的两个文件之间的区别:
0000046C: D0 E0 0000046D: 61 51 0000046E: 5D 5E 0000046F: B6 FE 00000470: 76 0E 00000471: BB BC
中间列显示打开文件的6个字节:D0615DB676BB,每次打开文件时都会更改这些字节。由于未打开ExcelFile2003binary.xls,因此最后一列不会更改。
基于[MS -OSHARED]Office Common Data Types and Objects Structure Specification document 受影响的字节位于偏移0000046C(2字节)和0000046E(4字节),每次打开文件时都会发生变化,这显然会改变MD5哈希值。
LinkElement-3示例 这是一个linkElement示例,它说明了包含该链接的文档之外的Web资源的超链接。
Offset Size Structure Value ------------------------------------------------------------ 0000046A 006C VtHyperlink - linkElement-3 0000046A 0008 TypedPropertyValue - dwHash 0000046A 0002 WORD - wType 0x0003 0000046C 0002 WORD - padding 0x0000 0000046E 0004 DWORD - value 0x00320064
如果我理解得很好,“填充”和“价值”总是会改变。 我从其他帖子中听到Excel 2007根本不会更改Excel 2007二进制格式。
请帮忙。这是我需要解决的紧急问题。我可以在Excel文档上设置(使用Syncfusion或Excel API)来防止这种行为吗?
谢谢, 弧度
编辑:
Dim xlsUri As Uri xlsUri = New Uri("c:\temp\ExcelFile2003binary.xls") If (IO.File.Exists(xlsUri.LocalPath)) Then Dim xlsNode As TreeNode = wip.getWipNode(tvwMain.Nodes, "Excel") If (xlsNode Is Nothing) Then 'Opening excel file link Uri embeded in Tag won't change the file???? 'Users can choose any way to open it (Custom app or Windows Explorer shell) folderNode.Nodes.Add("excel", "Excel", 9, 9).Tag = xlsUri.LocalPath End If End If
答案 0 :(得分:0)
我发现这与元数据有关,但这只发生在excel 2003文件上(对于word文件没有问题等)。
我找到了解决这个问题的方法。
然后在保存并关闭文件后,只需打开和关闭文件,MD5哈希就不会改变。