#perl #xlsx #corrupt
#perl #xlsx #поврежден
Вопрос:
Мы генерируем файлы xlsx с помощью скрипта perl. Файлы обычно содержат тысячи записей. Это делает обнаружение ошибок очень сложной операцией. Этот процесс годами работал без проблем.
На этой неделе мы получили запрос на проверку файла, который содержит ошибки. При открытии Excel выдал запрос о том, что файл содержит ошибки, и спросил, хотим ли мы их исправить.
На самом деле мы не хотим восстанавливать данные, но хотим знать, какая часть файла повреждена. Ошибка должна исходить из поврежденных данных, и мы заинтересованы в идентификации этих данных. сообщение журнала показывает следующее:
<?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:Temp20161020file_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 работают нормально.
Спасибо и с наилучшими пожеланиями
Комментарии:
1. Ваше описание проблемы очень расплывчатое.
2. Я думаю, что, по крайней мере, нам нужно было бы знать, как вы создавали файл XLSX. Можете ли вы привести нам минимальный пример, который мы можем запустить?
3. Вы проверили, возникает ли эта проблема только в определенных версиях Excel? Кто-нибудь недавно изменил ваш скрипт без вашего ведома? Были ли обновлены какие-либо модули Perl, которые он использует? Вы недавно начали получать данные из другого источника? Попробуйте отключить код, который генерирует «/xl/worksheets/sheet1.xml «если возможно. У вас все еще возникает проблема?
4. > Вы проверили, возникает ли эта проблема только в определенных версиях Excel?
Ответ №1:
Как и ожидалось, проблема исходила из текстовых ячеек, содержащих числа с буквой E посередине.
Я использовал следующие шаги для определения ошибочных ячеек.
1. Написал небольшой класс Java для чтения файла. Класс проверял тип ячейки и впоследствии отображал значение.
Программа Java сгенерировала исключение в некоторой строке «Не удается получить числовое значение из текстовой ячейки», даже если я правильно проверял тип ячейки перед отображением содержимого.
2. Я проверил открытый файл Excel в этой строке и обнаружил, что ячейка содержит только ‘inf’.
3. Я открыл файл с помощью open office и посмотрел на те же ячейки. Они содержат 0.
4. Я отладил программу, генерирующую данные, и обнаружил, что эти ячейки содержат данные типа ‘914E5514’. Кажется, что E, которое было интерпретировано Excel как показатель степени.
Мы изменили программу, чтобы использовать формат ‘@’ для этой ячейки, и это решило проблему.
Спасибо.
Ответ №2:
Большое вам спасибо, вы мне очень помогли, сказав, что 1 конкретный элемент содержимого может быть основной проблемой.
Мой поврежденный контент был https://www.example.com XYZ ... ASDAS
решением: www.example.com XYZ ... ASDAS
Это то, что не может быть обработано Excel. Было бы неплохо иметь список вещей, которые не работают