Изменения хеша MD5 (случайное изменение 6 байтов) каждый раз, когда двоичный формат Excel 2003 открывается в Excel 2007 - PullRequest
0 голосов
/ 16 декабря 2011

У меня проблема с производством, когда два хэша 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

1 Ответ

0 голосов
/ 28 февраля 2012

Я обнаружил, что это как-то связано с метаданными, но это происходит только для файлов Excel 2003 (без проблем для файлов слов и т. Д.).

И я нашел способ решить это.

  1. Открыть файл Excel 2003 (.xls)
  2. Нажмите кнопку офиса в верхнем левом углу
  3. Выберите Подготовить -> Проверить документ. Проверьте
  4. Удалить все свойства документа и личную информацию.

Затем после сохранения и закрытия файла хэш MD5 не изменится, если просто открыть и закрыть файл.

...