Bonjour,
Je rencontre une difficulté dans une application C#.NET.
J'effectue une boucle sur plusieurs centaines de fichiers .doc.
Pour chacun, j'essaye de lire un paragraphe précis, puis je renvoie le contenu texte de ce paragraphe.

Pour cela j'utilise la dll Microsoft.Office.Interop.Word.

Sur plusieurs centaines de fichiers traités, j'ai rencontré un blocage sur 3 d'entre eux.
Quand vient leur tour, mon application se bloque, un processus Winword.exe se lance dans le gestionnaire des tâches, et ne s'arrête jamais.
Toutefois plusieurs dizaines de minutes plus tard (!), la boucle continue enfin, mais un texte null a été renvoyé.

Il est possible que les fichiers concernés soient "mal formés".
Toujours est-il que je souhaite catcher l'erreur, et passer au suivant dans ce cas-là.

Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
 
programme principal :
 
    .........
    application = new WordUtils ();
    application.CreateApplication ();
    .........
 
boucle for sur tous les fichiers {
    .........
    objet = application.recupereObjetDoc (fichierWord);
    .........
}
 
 
    public class WordUtils
    {
        private object missing = System.Reflection.Missing.Value;
        private Microsoft.Office.Interop.Word.Application application;
        private Document document;
        ..........
 
        public void CreateApplication()
        {
            application = new Microsoft.Office.Interop.Word.Application();
            application.Visible = false;
        }
 
        public string recupereObjetDoc (object filePath) {
            try {
                document = application.Documents.Open (ref filePath, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
                Microsoft.Office.Interop.Word.Paragraph paraNo2 = document.Content.Paragraphs[3];
                if ((paraNo2.Range.End - paraNo2.Range.Start) > 1) {
                    string result = paraNo2.Range.Text;
                    ((_Document) document).Close (ref missing, ref missing, ref missing);
                    return result;
                } else {
                    if (document != null)
                        ((_Document) document).Close (ref missing, ref missing, ref missing);
                    return null;
                }
            } catch (Exception ex) {
                return null;
            }
        }

J'imagine que lorsqu'un fichier "mal formé" est rencontré, la fonction essaye de le lire, mais il y a un plantage (ou en tout cas demande énormément de temps), mais aucune exception n'est levée.

Sauriez-vous comment contourner le problème, et passer au fichier suivant en cas de problème ?

Merci d'avance,