Récupérer un .docx corrompu

La procédure suivie pourra aider d’autres. J’en fais donc un billet.

Ce matin, je passe deux heures à lire et annoter la version intermédiaire d’un mémoire d’étudiante (un fichier .docx, mais ouvert avec Libreoffice sous Linux). Je fais quelques commentaires directement dans le texte, en les indiquant par une couleur de police différente, mais j’utilise surtout l’outil enregistrement des modifications, ainsi que l’insertion de commentaires. J’enregistre le résultat final en .docx toujours. Et je l’envoie en fichier joint.

Mais en début d’après midi, l’étudiante me répond qu’elle n’a pas réussi à ouvrir le fichier. Je ne suis pas trop surpris car c’est déjà arrivé que des correspondants n’arrivent pas à ouvrir des .docx ainsi passés par Libreoffice. La solution est simple : il suffit de rouvrir le fichier avec Libreoffice et de l’enregistrer sous le format Word 97/2000/XP/2003 (.doc) avant de le renvoyer.

Mais là, horreur ! Après avoir ouvert le fichier, je découvre que ce dernier, qui faisait 28 pages ne fait plus qu’une page qui contient seulement deux lignes ! Tout le reste du contenu semble perdu, avec les corrections et commentaires apportés. Je me vois déjà devoir refaire le travail du matin à partir du .docx initial.

Mais c’est là que je me souviens que les .docx sont en réalité des archives, qui contiennent plusieurs fichiers. Je fais donc une copie de l’archive. Puis un clic droit sur cette archive me permet de la décompresser et d’en extraire les fichiers (un fichier .xml et un dossier **_FILES qui contient trois sous-dossiers et un autre fichier xml). L’un des sous-dossiers s’appelle word. Il contient un fichier comment.xml, un document.xml et quelques autres… Je me dis que le contenu que j’ai cru perdu doit en fait se trouver là. J’ouvre document.xml avec un simple éditeur (Gedit car je suis sous Linux, mais sous Windows Notepad aurait fait l’affaire). Gagné ! Tout est là, encadré de multiples balises xml. L’une d’entre elles doit être corrompue et empêcher la lecture de la totalité du document. Si je trouve laquelle, je peux donc restaurer ce dernier.

Firefox lit très bien le xml. J’ouvre donc document.xml avec Firefox. ce dernier me renvoie un message d’erreur :

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’ouvre de nouveau le fichier avec Gedit, je vais à la ligne 2, colonne 2483. Je découvre que cet endroit correspond justement à la fin de la dernière ligne du fichier corrompu qu’a bien voulu afficher Libreoffice. Je remplace la balise qui s’y trouve par ‹/w:p› comme l’attend Firefox. J’enregistre puis j’actualise l’affichage du fichier dans Firefox. L’erreur s’est déplacée de nombreuses colonnes plus loin où Firefox attend maintenant ‹/w:body›. Nouvelle modification. Et forcément, nouveau message d’erreur : à la place de ‹/w:body› Firefox veut maintenant la balise finale ‹/w:document›. Une fois ce dernier remplacement fait, la page s’affiche mais contient forcément une erreur. En effet, en tout début de fichier ‹w:body› vient juste après ‹w:document›. À la fin, ce doit donc être l’inverse avec ‹/w:body›‹/w:document›. Or les corrections suggérées par Firefox m’ont fait placer ‹/w:body› bien plus haut. Il devait donc manquer une balise quelque part et ce manque a trompé Firefox. J’annule mes modifications et je remonte en amont de la ligne 2, colonne 2483. Gagné ! je trouve bien une balise ‹/w:p› manquante. Il n’y a plus qu’à l’ajouter et replacer le fichier ainsi modifié dans l’archive originale (le .docx).

Un dernier test : l’ouverture sous Libreoffice. Réparation réussie : tout le contenu réapparaît, avec les enregistrements de modifications et les commentaires.

Moralité : avoir quelques notions de xml n’est pas inutile. Mais il faut aussi penser à enregistrer tout fichier créé ou modifié avec Libreoffice Writer dans le format natif de ce dernier (.odt) avant d’en enregistrer des versions .doc ou .docx à destination des correspondants 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 :

    Bonjour,

    Merci pour l’astuce !!!
    j’étais planté de la même façon, aucun message d’erreur, mais à la réouverture, pof, plus qu’une page !!
    j’ai dezippé, trouvé avec firefox l’endroit où il manquait une balise fermante (un w:hyperlink en ce qui me concerne…)
    modif faite sous vi, enregistrée, et zippée…

    et hop, ça marche maintenant !

    ouf, 4 heures de boulot sauvées !
    Merci encore

Les commentaires sont fermés.