Найти поврежденные данные в файле xlsx

Мы создаем файлы xlsx с помощью скрипта perl. Файлы обычно содержат тысячи записей. Это делает обнаружение ошибок очень сложной операцией. Этот процесс работал годами без проблем.
На этой неделе мы получили запрос на проверку файла, который содержит ошибки. При открытии Excel сообщил, что файл содержит ошибки, и спросил, хотим ли мы их исправить.
< img src="https://i.stack.imgur.com/KRLNS.jpg" alt="введите здесь описание изображения"> На самом деле мы не хотим восстанавливать данные, а хотим знать, какая часть файл поврежден. Ошибка должна исходить из поврежденных данных, и мы заинтересованы в идентификации этих данных. сообщение журнала показывает следующее:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>error068200_01.xml</logFileName> </br>
<summary>Errors were detected in file 'D:\Temp\20161020\file_name.xlsx'</summary>
<repairedRecords summary="Following is a list of repairs:"><repairedRecord>Repaired Records: Cell information from /xl/worksheets/sheet1.xml part</repairedRecord>
</repairedRecords>
</recoveryLog>

Ошибка должна исходить из поврежденных данных. Есть ли какой-либо инструмент/метод, который помогает обнаружить эти поврежденные данные? Я попытался переименовать его в zip-файл, распаковать и открыть с помощью XML-редактора, но не смог найти никаких ошибок в XML-файле.
Мы также проверили, что различные структуры XML-файлов в порядке.

Спасибо и наилучшими пожеланиями


person Arthur bauer    schedule 20.10.2016    source источник
comment
Ваше описание проблемы очень расплывчато.   -  person simbabque    schedule 20.10.2016
comment
Я думаю, что нам как минимум нужно знать, как вы создаете файл XLSX. Можете ли вы дать нам минимальный пример, который мы можем запустить?   -  person Dave Cross    schedule 20.10.2016
comment
Вы проверили, возникает ли эта проблема только в определенных версиях Excel? Кто-то недавно изменил ваш сценарий без вашего ведома? Были ли обновлены какие-либо используемые Perl-модули? Вы недавно начали получать данные из другого источника? Попробуйте отключить код, который генерирует файл /xl/worksheets/sheet1.xml, если это возможно. Вы все еще понимаете проблему?   -  person benrifkah    schedule 20.10.2016
comment
›Вы проверили, возникает ли эта проблема только в определенных версиях Excel?   -  person Arthur bauer    schedule 21.10.2016


Ответы (2)



Как и ожидалось, проблема возникла из-за текстовых ячеек, содержащих числа с буквой E в середине.
Я использовал следующие шаги для выявления ошибочных ячеек.
1. Написал небольшой класс Java для чтения файл. Класс проверял тип ячейки и впоследствии отображал значение.
Программа Java сгенерировала исключение в какой-то строке «Невозможно получить числовое значение из текстовой ячейки», даже если я правильно проверял тип ячейки перед отображением содержимого .
2. Я проверил открытый файл Excel на этой строке и обнаружил, что ячейка содержит только 'inf'.
3. Я открыл файл с помощью open office и посмотрел на те же ячейки. Они содержат 0.
4. Я отладил программу, генерирующую данные, и обнаружил, что в этих ячейках содержатся данные вида «914E5514». Похоже, что E был интерпретирован Excel как показатель степени.
Мы изменили программу, чтобы использовать формат '@' для этой ячейки, и это решило проблему.
Спасибо.

person Arthur bauer    schedule 24.10.2016

Большое спасибо, вы мне очень помогли, сказав, что 1 конкретный элемент контента может быть корневой проблемой.

Мой поврежденный контент был https://www.example.com XYZ ... ASDAS Решение: www.example.com XYZ ... ASDAS

Это то, с чем не может справиться Excel. Было бы неплохо иметь список вещей, которые не работают

person ChrisRob    schedule 28.05.2020