J'ai une application web qui prend quelques informations sur le client et produit une lettre pour chaque client. Tout fonctionne bien dans mon environnement de test, mais sur le serveur de production, j'obtiens une erreur qui indique que le fichier est corrompu. Je peux ouvrir le fichier .dotx en mot très bien sur le serveur, mais pas via le code. S'il vous plaît aider. Voici mon code:Com Exception: Word n'a pas pu lire ce document. Il peut être corrompu
Object oMissing = System.Reflection.Missing.Value;
Object oTrue = true;
Object oFalse = false;
Word.Application oWord = new Word.Application();
Word.Document oWordDoc = new Word.Document();
oWord.Visible = false;
Object oTemplatePath = Request.PhysicalApplicationPath + "letters\\" + letter.letter_data; //samplehollisletter.dotx";
oWordDoc = oWord.Documents.Add(ref oTemplatePath, ref oMissing, ref oMissing, ref oMissing);
foreach (Word.Field myMergeField in oWordDoc.Fields)
{
iTotalFields++;
Word.Range rngFieldCode = myMergeField.Code;
String fieldText = rngFieldCode.Text;
if (fieldText.StartsWith(" MERGEFIELD"))
{
Int32 endMerge = fieldText.IndexOf("\\");
Int32 fieldNameLength = fieldText.Length - endMerge;
String fieldName = fieldText.Substring(11, endMerge - 11);
fieldName = fieldName.Trim();
if (fieldName == "letter_title")
{
myMergeField.Select();
oWord.Selection.TypeText(acct.letter_title);
}
if (fieldName == "account_id")
{
myMergeField.Select();
oWord.Selection.TypeText(acct.account_id);
}
if (fieldName == "address")
{
myMergeField.Select();
oWord.Selection.TypeText(acct.PEOPLE.home_address + "\r\n" + acct.PEOPLE.home_city + ", " + acct.PEOPLE.home_state + " " + acct.PEOPLE.home_zip);
}
if (fieldName == "greeting_title")
{
myMergeField.Select();
oWord.Selection.TypeText(acct.greeting_title);
}
if (fieldName == "service_name")
{
myMergeField.Select();
oWord.Selection.TypeText((acct.SERVICEs.FirstOrDefault()).service_name);
}
if (fieldName == "service_date")
{
myMergeField.Select();
oWord.Selection.TypeText((acct.SERVICEs.FirstOrDefault()).service_date.ToString());
}
}
}
oWordDoc.PrintOut();
oWordDoc.Close(Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges);
Thread.Sleep(2000);
oWord.Quit();
L'erreur est:
Server Error in '/Tracker2' Application.
Word n'a pas pu lire ce document. Cela peut être corrompu. Essayez une ou plusieurs des solutions suivantes: * Ouvrez et réparez le fichier. * Ouvrez le fichier avec le convertisseur de récupération de texte. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.
Détails de l'exception: System.Runtime.InteropServices.COMException: Word n'a pas pu lire ce document. Cela peut être corrompu. Essayez une ou plusieurs des solutions suivantes: * Ouvrez et réparez le fichier. * Ouvrez le fichier avec le convertisseur de récupération de texte.
Erreur Source:
Une exception non gérée a été générée pendant l'exécution de la demande Web actuelle. Les informations concernant l'origine et l'emplacement de l'exception peuvent être identifiées à l'aide de la trace de la pile d'exceptions ci-dessous.
Stack Trace:
[COMException (0x800a141f): Word n'a pas pu lire ce document. Cela peut être corrompu. Essayez une ou plusieurs des solutions suivantes: * Ouvrez et réparez le fichier. * Ouvrez le fichier avec le convertisseur de récupération de texte.] Microsoft.Office.Interop.Word.Documents.Add (objet & modèle, objet & NewTemplate, objet & DocumentType, objet & visible) +0 Tracker.RunLetter2.Button1_Click (Expéditeur d'objet, EventArgs e) dans C: \ Users \ Ethan \ Documents \ Visual Studio 2010 \ Projects \ EstateTracker \ Tracker \ RunLetter2.aspx.cs: 52 System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) + 154 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3691
N'automatisez pas Word dans un service. – SLaks
n'est pas dans un service. – ecspot