poniedziałek, 30 września 2019

Naprawa uszkodzonego dokumentu Word/LibreOffice/OpenOffice w formacie docx

Zdarza się, że gdy używamy edytora tekstu Writer z pakietu LibreOffice lub OpenOffice nasz plik ulega uszkodzeniu. Ostatnio pisałem sprawozdanie w programie Writer z pakietu LibreOffice i na pewnym etapie zakończyłem zapisując plik. Niestety podczas próby dalszej edycji okazało się, że plik jest uszkodzony. Ale na szczęście w mojej sytuacji był to problem do rozwiązania.

1. Opis problemu


Plik o którym pisze był zapisany w formacie docx. Po uszkodzeniu pliku przez błędne zapisanie go przez program Writer nie dało się otworzyć pliku. Próby otwarcia pliku programem Word z pakietu Microsoft Office skutkowały następującym błędem:
Nie można otworzyć pliku Sprawozdanie.doc, ponieważ są problemy z jego zawartością

w szczegółach błędu jest dodatkowa informacja:
"Żadna nazwa atrybutu nie może występować więcej niż raz w jednym tagu

początkowym lub pustym tagu elementu.


Lokalizacja: Część /word/document.xml, Wiersz:2, Kolumna: 2298"





Przy próbie otwarcia pliku za pomocą programu Writer pakietu LibreOffice wyskakiwało okienko Potwierdzenia o następującej treści:
Wystąpił błąd podczas otwierania pliku. Może to być spowodowane nieprawidłową

zawartością pliku.

Szczegóły błędy:

SAXException: [word/document.xml line 2]: Attribute w:cstheme redefined


Kontynuowanie importu może spowodować utratę lub uszkodzenie danych, a

aplikacja może stać się niestabilna lub ulec awarii


Czy chcesz zignorować błąd i spróbować kontynuować ładowanie pliku?



Po kliknięciu Tak w moim przypadku otwierał się dokument który zawierał raptem parę pierwszych słów sprawozdania które liczyło kilka dobrych stron. A więc jest to sytuacja nie do zaakceptowania. Po kliknięciu na Nie pojawiało się kolejne okienko zawierające dalsze informację o błędzie:
Znaleziono błąd w formacie pliku na pozycji

SAXParseException: '[word/document.xml line 2]: Attribute w:cstheme redefined

', Stream 'word/document.xml', Line 2, Column 2199(wiersz, kolumna).



2. Rozwiązanie problemu


Tak naprawdę plik docx jest plikiem skompresowanym w którym umieszczone są w określonej strukturze folderów różne pliki w formacie xml. Mając to na uwadze rozpakowujemy nasz uszkodzony plik docx tak jak by był skompresowaną paczką zip. Ja używam programu 7-Zip więc w moim przypadku wystarczy kliknąć prawym klawiszem myszy na mój plik Sprawozdanie.docx i z menu kontekstowego wybrać 7-Zip->Wypakuj do "Sprawozdanie\".



Po rozpakowaniu pliku docx do folderu Sprawozdanie folder ten będzie miał następująca strukturę:



Wcześniejsze komunikaty mówiły o błędzie w pliku word/document.xml. A więc będąc w katalogu do którego rozpakowaliśmy docx-a wchodzimy do podkatalogu word i otwieramy plik document.xml za pomocą dowolnego edytora xml. Ja użyłem programu XML Copy Editor 1.2.1.3. Zaraz po otwarciu program XML Copy Editor na dole strony pokaże się nam błąd:
Error at line 2, column 2275: duplicate attribute



Wiemy gdzie szukać błędu. Teraz musimy zlokalizować kolumne 2275 w drugim wierszu. W programie XML Copy Editor aktualna pozycja pokazuje się w prawym dolnym rogu. Po znalezieniu błędnej pozycji widzimy, że faktycznie znajduje się tam dwa razy wpisany atrybut w:cstheme="minorHAnsi"



Usuwamy jeden z powielonych atrybutów czyli zamiast:
... w:cstheme="minorHAnsi" w:cstheme="minorHAnsi"/> ...

ma być tylko:
... w:cstheme="minorHAnsi"/> ...

Po usunięciu dodatkowego argumentu nadpisujemy poprawiony plik doxument.xml klikając ikonkę dyskietki lub File->Save. Od razu z pliku zniknie nam powiadomienie o błędnym pliku xml z lewego dolnego roku ekranu. W sytuacji gdy masz jeszcze inne błędy w pliku xml musisz je wszystkie poprawić aby móc kontynuować.

Następnie gdy już poprawiliśmy plik xml musimy ponownie skompresować pliki aby powstał plik docx. W tym celu zaznaczamy wszystki pliki i foldery które się znajdują w folderze do którego rozpakowaliśmy plik docx i kompresujemy je do archimum zip.



Po skompresowaniu zmieniamy rozszerzenie z zip na docx i otwieramy nasz plik. Tym oto sposobem udało się odzyskać plik który wydawało się jest nie do otworzenia.

Podsumowując warto wiedzieć, że plik docx jest tak naprawdę skompresowanymi folderami i plikami. W przypadku gdyby nie dało się naprawić pliku xml zawsze możemy jeszcze uratować tekst który pisaliśmy próbując go wyciągnąć z pliku xml tracąc jedynie formatowanie. W przypadku gdy nie wiemy w którym pliku jest błąd zawsze możemy sprawdzić każdy z plików xml składających się na plik docx. Po prostu otwórzmy każdy po kolei za pomocą XML Copy Editor. Jeżeli utraciliśmy ważny plik warto próbować go odzyskać choćby w części.

Brak komentarzy:

Prześlij komentarz