У меня проблема с производством, когда два хэша MD5 не совпадают между серверной версией двоичного файла Excel 2003 (созданного библиотекой Syncfusion .NET) и локальной версией.
Когда я загружаю локальный файл Excel, который был открыт только двойным щелчком через проводник Windows, сервер обнаруживает, что MD5-хэши не совпадают, и не позволяет загружать файл.
Просто открыв файл Excel 2003 в Excel 2007 (и некоторые сообщали то же самое в 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 Документ спецификации
затронутые байты имеют смещение 0000046C (2 байта) и 0000046E (4 байта), которые меняются при каждом открытии файла, что, очевидно, меняет хеш MD5.
Пример LinkElement-3
Это пример элемента linkElement, который иллюстрирует гиперссылку на веб-ресурс вне документа, который содержит ссылку.
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
Если я хорошо понимаю, "padding" и "value" меняются всегда.
Я слышал из другого потока, что Excel 2007 вообще не меняет двоичный формат Excel 2007.
Пожалуйста, помогите. Это срочная проблема, которую мне нужно исправить. Есть ли что-то, что я могу установить в документе Excel (используя Syncfusion или Excel API), чтобы предотвратить это поведение?
Спасибо,
Rad
Edit:
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
<B>'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)</B>
folderNode.Nodes.Add("excel", "Excel", 9, 9).Tag = xlsUri.LocalPath
End If
End If