Récupérer un .docx corrompu

La procé­dure suiv­ie pour­ra aider d’autres. J’en fais donc un bil­let.

Ce matin, je passe deux heures à lire et annot­er la ver­sion inter­mé­di­aire d’un mémoire d’é­tu­di­ante (un fichi­er .docx, mais ouvert avec Libre­of­fice sous Lin­ux). Je fais quelques com­men­taires directe­ment dans le texte, en les indi­quant par une couleur de police dif­férente, mais j’u­tilise surtout l’outil enreg­istrement des mod­i­fi­ca­tions, ain­si que l’in­ser­tion de com­men­taires. J’en­reg­istre le résul­tat final en .docx tou­jours. Et je l’en­voie en fichi­er joint.

Mais en début d’après midi, l’é­tu­di­ante me répond qu’elle n’a pas réus­si à ouvrir le fichi­er. Je ne suis pas trop sur­pris car c’est déjà arrivé que des cor­re­spon­dants n’ar­rivent pas à ouvrir des .docx ain­si passés par Libre­of­fice. La solu­tion est sim­ple : il suf­fit de rou­vrir le fichi­er avec Libre­of­fice et de l’en­reg­istr­er sous le for­mat Word 97/2000/XP/2003 (.doc) avant de le ren­voy­er.

Mais là, hor­reur ! Après avoir ouvert le fichi­er, je décou­vre que ce dernier, qui fai­sait 28 pages ne fait plus qu’une page qui con­tient seule­ment deux lignes ! Tout le reste du con­tenu sem­ble per­du, avec les cor­rec­tions et com­men­taires apportés. Je me vois déjà devoir refaire le tra­vail du matin à par­tir du .docx ini­tial.

Mais c’est là que je me sou­viens que les .docx sont en réal­ité des archives, qui con­ti­en­nent plusieurs fichiers. Je fais donc une copie de l’archive. Puis un clic droit sur cette archive me per­met de la décom­press­er et d’en extraire les fichiers (un fichi­er .xml et un dossier **_FILES qui con­tient trois sous-dossiers et un autre fichi­er xml). L’un des sous-dossiers s’ap­pelle word. Il con­tient un fichi­er comment.xml, un document.xml et quelques autres… Je me dis que le con­tenu que j’ai cru per­du doit en fait se trou­ver là. J’ou­vre document.xml avec un sim­ple édi­teur (Ged­it car je suis sous Lin­ux, mais sous Win­dows Notepad aurait fait l’af­faire). Gag­né ! Tout est là, encadré de mul­ti­ples balis­es xml. L’une d’en­tre elles doit être cor­rompue et empêch­er la lec­ture de la total­ité du doc­u­ment. Si je trou­ve laque­lle, je peux donc restau­r­er ce dernier.

Fire­fox lit très bien le xml. J’ou­vre donc document.xml avec Fire­fox. ce dernier me ren­voie un mes­sage d’er­reur :

Erreur d'analyse XML : balise ne correspondant pas. Attendu : ‹/w:p›.
Emplacement : file:///emplacement/du/fichier/sur/ma/machine/***_FILES/word/document.xml
Numéro de ligne 2, Colonne 2483

OK. J’ou­vre de nou­veau le fichi­er avec Ged­it, je vais à la ligne 2, colonne 2483. Je décou­vre que cet endroit cor­re­spond juste­ment à la fin de la dernière ligne du fichi­er cor­rompu qu’a bien voulu affich­er Libre­of­fice. Je rem­place la balise qui s’y trou­ve par ‹/w:p› comme l’at­tend Fire­fox. J’en­reg­istre puis j’ac­tu­alise l’af­fichage du fichi­er dans Fire­fox. L’er­reur s’est déplacée de nom­breuses colonnes plus loin où Fire­fox attend main­tenant ‹/w:body›. Nou­velle mod­i­fi­ca­tion. Et for­cé­ment, nou­veau mes­sage d’er­reur : à la place de ‹/w:body› Fire­fox veut main­tenant la balise finale ‹/w:document›. Une fois ce dernier rem­place­ment fait, la page s’af­fiche mais con­tient for­cé­ment une erreur. En effet, en tout début de fichi­er ‹w:body› vient juste après ‹w:document›. À la fin, ce doit donc être l’in­verse avec ‹/w:body›‹/w:document›. Or les cor­rec­tions sug­gérées par Fire­fox m’ont fait plac­er ‹/w:body› bien plus haut. Il devait donc man­quer une balise quelque part et ce manque a trompé Fire­fox. J’an­nule mes mod­i­fi­ca­tions et je remonte en amont de la ligne 2, colonne 2483. Gag­né ! je trou­ve bien une balise ‹/w:p› man­quante. Il n’y a plus qu’à l’a­jouter et replac­er le fichi­er ain­si mod­i­fié dans l’archive orig­i­nale (le .docx).

Un dernier test : l’ou­ver­ture sous Libre­of­fice. Répa­ra­tion réussie : tout le con­tenu réap­pa­raît, avec les enreg­istrements de mod­i­fi­ca­tions et les com­men­taires.

Moral­ité : avoir quelques notions de xml n’est pas inutile. Mais il faut aus­si penser à enreg­istr­er tout fichi­er créé ou mod­i­fié avec Libre­of­fice Writer dans le for­mat natif de ce dernier (.odt) avant d’en enreg­istr­er des ver­sions .doc ou .docx à des­ti­na­tion des cor­re­spon­dants qui utilisent Word.

Ce contenu a été publié dans Informatique, logiciels libres, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Une réponse à Récupérer un .docx corrompu

  1. sylvain cherrier dit :

    Bon­jour,

    Mer­ci pour l’as­tuce !!!
    j’é­tais plan­té de la même façon, aucun mes­sage d’er­reur, mais à la réou­ver­ture, pof, plus qu’une page !!
    j’ai dezip­pé, trou­vé avec fire­fox l’en­droit où il man­quait une balise fer­mante (un w:hyperlink en ce qui me con­cerne…)
    modif faite sous vi, enreg­istrée, et zip­pée…

    et hop, ça marche main­tenant !

    ouf, 4 heures de boulot sauvées !
    Mer­ci encore

Les commentaires sont fermés.