J'ai développé une application web (plutôt projet site web) qui permet de créer des rapports en format Word. Lorsque je la test en local via VS2010, je n'ai aucun problème mais une fois sur le serveur, lorsque je veux créer un fichier Word via mon fichier modèle (dotx), cela ne marche plus. Voici le message en retour lors de la tentative de création d'un objet Word:
Mon code, un peu long, je fournit le constructeur (j'ai tout englobé dans une classe):Word n'a pas pu lire ce document. Il est peut-être corrompu.
Essayez l'une ou plusieurs des opérations suivantes :
* Ouvrez et réparez le fichier.
* Ouvrez le fichier avec le convertisseur Récupération de texte.
Code vbnet : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Imports IWord = Microsoft.Office.Interop.Word Imports System.Runtime.InteropServices.Marshal
Code vbnet : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Protected _word As IWord.Application Protected _doc As IWord.DocumentMa méthode Dispose:
Code vbnet : 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 Sub New(ByVal wordModel As String, Optional ByVal showWordInstance As Boolean = True) Try _word = New IWord.Application _word.Visible = showWordInstance _doc = _word.Documents.Add(wordModel) _docPath = wordModel Catch ex As Exception If Not IsNothing(_doc) Then _doc.Close(False) End If If Not IsNothing(_word) Then _word.Quit() End If Throw ex End Try End Sub
Autre chose que j'ai également remarqué, une fois que je lance le programme sur le serveur, il ne me quitte pas WINWORD.EXE et si dans le Catch de l'exception du constructeur j'utilise ReleaseComObject, le programme ne rend pas la main. J'utilise l'emprunt d'identité (pas le choix) dans le fichier Web.config et du coup, j'ai rajouté dans la partie Sécurité du fichier modèle et de WINWORD.EXE ASP NET_2006 mais ça ne donne rien.
Code vbnet : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Protected Overridable Sub Dispose(disposing As Boolean) If Not Me.disposedValue Then If disposing Then End If ReleaseComObject(_doc) ReleaseComObject(_word) GC.Collect() GC.WaitForPendingFinalizers() End If Me.disposedValue = True End Sub
Est-ce que quelqu'un pourrait me donner la bonne marche à suivre s'il vous plaît ?
![]()
Partager