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