Если вы в качестве офисного пакета используете OpenOffice или LibraOffice, то скорей всего вам уже приходилось когда-нибудь сталкиваться с такой проблемой, как повреждение файла. То есть, вчера вы его ещё без проблем правили, ну а сегодня, как только запускаете, появляется ошибка «Ошибка считывания» или «Ошибка формата файла в поддокументе».
Конечно же, я не утверждаю, что в офисном пакете от Майкрософт подобного не встречается, нет, просто эта статья будет направленна на восстановление документа, который был создан именно в LibreOffice и имеет разрешение ods, odf или odt.
По появившемуся уведомление можно понять, что, например, в файле content.xml была обнаружена ошибка в такой-то строчке и в таком-то столбце, которую нам в принципе и нужно исправить.
Я, конечно же понимаю, что обычному пользователю будет сложно найти в коде проблему и быстро исправить её, но я попытаюсь подробно описать вам, как мне это удалось, возможно и вам, так же, повезёт. Поэтому, давайте-ка посмотрим же, как можно восстановить документ и избавиться от ошибки: «Ошибка формата файла…».
Исправление ошибки формата файла в поддокументе
Начну с того, что для восстановления документа нам понадобится, как минимум два инструмента:
- Архиватор – лично я использовал 7zip, но можно взять и WinRaR, принципиальной разницы тут нет.
- Текстовый редактор – тут рекомендую обратить свое внимание на очень мощный и удобный «notepad++», там код подсвечивается, поэтому будет удобно искать ошибку из-за которой повредился файл.
Итак, для восстановления файла нам необходимо найти поврежденный файл и открыть его с помощью архива.
Далее, находим в архиве поврежденный файл (в рассмотренном здесь примере это content.xml) и перетягиваем его, например, на тот же рабочий стол.
Открываем content.xml с помощью notepad++ и в появившемся коде ищем строки и столбцы в которых была обнаружена ошибка (Например, строка: 245 и столбец: 25).
И тут начинается самое интересное, если вам очень повезет, то это может быть очень простая и явная ошибка для исправления которой достаточно просто изменить только один символ в теге.
Например: <text:p>text_in_document<|text:p> — тут видно, что ошибка связанна с закрывающимся тегом и поэтому нужно поменять его так, что бы получилось <text:p>text_in_document</text:p>.
После чего сохраняем этот файл и копируем его обратно в архив. Сделать это можно так: снова открываем в архиве документ и перетаскиваем туда отредактированный нами content.xml, согласившись с заменой.
Вот и все, после чего проверяем получилось ли восстановить документ.
Поиск ошибки в поврежденном файле odt
Но, к сожалению, не всегда бывает так все просто. Иногда ошибка формата файла в поддокументе может указывать только на вторую строку и столбец значение которого уходит за десятки тысяч.
Вот, например, как здесь:
Как видите тут проблема была найдена в файле content.xml, строка: 2 и столбец: 48964.
Итак, открыв поврежденный документ в архиве, вытаскиваем с него файлик content.xml и открываем его в notepad++.
Перед собой вы увидите две строчки одна из которых очень короткая, а вторая просто огромная, и вот как раз в ней то, нам и нужно найти необходимую ошибку.
Устанавливаем курсор на вторую строку и для того, чтобы не высчитывать каждый символ, в низу окна интерфейса notepad++ нажимаем на параметр «Ln/Col». Появится окошко, с помощью которого мы сможем переместиться к необходимому символу.
В нем нужно установить отметку на «Символ» и в пустом поле указать необходимое значение, в данном примере это 48964, после просто нажать «Вперед!».
Окошко должно пропасть, ну а ваш курсор переместится на нужный столбец с ошибкой.
Как видите, у меня проблемным тегом оказался fo:background-color="transparent", но в принципе явных ошибок тут нет, поэтому очень сложно сказать, что же не так.
В таком случае, я решил, обратиться к сервису xmlvalidation.com для более глубокого анализа нашего поврежденного xml файла.
Перейдя на сайт, опускаемся чуть ниже и щелкаем по кнопке «Обзор», находим и загружаем content.xml и нажимаем «Validate».
После чего должен появиться отчет, в каком месте была найдена ошибка и что именно является ее причиной. В случае данного примера, можно понять, что ошибка формата файла была вызвана тем, что параметры атрибута background-color уже был указан для элемента «style:text-properties».
Как я писал выше в notepad++ ошибка была найдена в атрибуте fo:background-color="transparent". Ну, а спустившись в отчете чуть ниже, непосредственно к самому коду, мы увидим, что тут проблемным местом является fo:background-color="#ffffff".
То есть, как вы поняли в одной строке style:text-properties было указанно два значения для fo:background-color.
Исходя из этого, я решил, удалить в один атрибут, а именно fo:background-color="transparent" .
После чего я сохранил content.xml и перетащил его обратно в архив.
Но, в результате появилась ошибка формата файла в поддокументе уже в другом столбце.
Проделав весь этот путь опять, я обнаружил, что существует ещё одна строка в которой, так же, содержится эти два атрибута. Но, после того, как я удалил его из этой строки и сохранил файл, документ открылся и с ним без проблем можно было снова работать.
Вот так мне и удалось восстановить поврежденный odt файл.
Я, конечно же понимаю, что вероятность того, что вам может попасться такая же ошибка очень мала, но поймите — это не универсальное руководство, а только пример того, как мне удалось справиться с данной проблемой.
Ну, а вы уже отталкиваясь от этого примера пробуйте определить и исправить, непосредственно, ту ошибку, которая возникла у вас.
Ещё раз напомню, порядок исправления такой:
- Открываем поврежденный документ в архиве.
- Извлекаем content.xml.
- Загружаем его для проверки в xmlvalidation.
- И уже в полученном отчете нужно найти причину ошибки и исправить её.
- После чего сохраняем xml файл и загружаем обратно его в архив.
Если коротко, то примерно вот так оно должно выглядеть.
В общем, удачи вам в борьбе с ошибкой формата файла в поддокументе и, конечно же, я верю, что у вас точно всё получится.
Спасибо, добрый человек!
В WordPad открываем файл и наслаждаемся.
Вот вы пишете: «Далее, находим в архиве поврежденный файл (в рассмотренном здесь примере это content.xml) и перетягиваем его, например, на тот же рабочий стол.» А как найти поврежденный файл? там куча папок и файлов, в том числе и content.xml. Может быть у меня поврежден другой файл? как определить?
Обычно при появление ошибки, в её описание, указывается какой поддокумент поврежден и на какой строчке была обнаружена ошибка.
Спасибо! Отличная инструкция!
Пожалуйста, рад, что статья оказалась для Вас полезной! 🙂
все ваши советы не сработают, так как перетащить из архива файл ___content.xml не получится------Архиватор не даст, тк. архив и файл этот поврежден вот скрин prntscr.com/k0vhib Вот интересно для кого вывсе это писали ??? Для полных ламеров ??
Я уже не раз вытаскивал этот файл с помощью 7zip, возможно в вашем случае повреждение файлов намного больше.
Вы так все круто описали, но у меня совсем ничего не получилось... А мне очень нужно восстановить поврежденный файл 🙁 Не могли бы вы мне помочь?
При проверке на xmlvalidation.com, крести возле какой фразы стоит или что там в описание ошибки, которая находится сверху.