Ouvrir un document Word avec C#

virgul Messages postés 76 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 21 février 2008 - 23 févr. 2005 à 16:37
cs_xtofer Messages postés 2 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 7 août 2008 - 7 août 2008 à 16:56
Bonjour,

J'ai lu avec attention tout vos article sur comment ouvrir word mais je ne trouve pas comment faire avec un Webservice.

En faite j'ai un fichier sur mon disque et je désire l'ouvrir avec word et l'afficher à l'écran (par la suite se sera des données envoyé par microsoft Infopath mais pour l'instant je vais essayé avec un fichier en local).

Voila mon code (que j'ai trouvé sur votre site merci déjà pour ca):


using
System;


using
System.Collections;


using
System.ComponentModel;


using
System.Data;


using
System.Diagnostics;


using
System.Web;


using
System.Web.Services;


using
Microsoft.Office.Core;


using
Microsoft.Office.Interop.Word;


using
System.Xml.Serialization;


using
Word = Microsoft.Office.Interop.Word;


namespace
WebService1


{


[WebService(Namespace="http://www.powernet.ch/essai")]


public class Service1 : System.Web.Services.WebService


{


public Service1()


{


//CODEGEN : Cet appel est requis par le Concepteur des services Web ASP.NET


InitializeComponent();


}


#region
Code généré par le Concepteur de composants




//Requis par le Concepteur des services Web


private IContainer components = null;




/// <summary>


/// Méthode requise pour la prise en charge du concepteur - ne modifiez pas


/// le contenu de cette méthode avec l'éditeur de code.


/// </summary>


private void InitializeComponent()


{


}


/// <summary>


/// Nettoyage des ressources utilisées.


/// </summary>


protected override void Dispose( bool disposing )


{


if(disposing && components != null)


{


components.Dispose();


}


base.Dispose(disposing);


}




#endregion





[WebMethod]


public void Main()


{


//Creating the instance of Word Application


Word.Application newApp = new Word.Application();


// specifying the Source

object Source="C:\\belege\\zh\\XSLOutput.doc";


object o =Type.Missing;




newApp.Documents.Open(ref Source,ref o, ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o);




}}}
Je lance mon webservice choisis la méthode et l'appelle après avoir fait l'instruction: Word.Application newApp = new Word.Application(); il renvoit impossible d'afficher la page. Pourquoi?

Merci de vos réponses et surtout de votre aide

++

Thierry Coita

10 réponses

Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008
24 févr. 2005 à 11:42
Salut,


Je ne sais pas si ça va résoudre ton problème mais en c# j'ai réussi :

Pour les using j'ai :
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;


et dans le code :


object Source="C:\\belege\\zh\\XSLOutput.doc";
Object o = System.Reflection.Missing.Value;
newApp.Documents.Open(ref Source,ref o, ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o);

Seb.
0
virgul Messages postés 76 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 21 février 2008
8 mars 2005 à 07:40
Merci de ta réponse maintenant j'ai compris car je me n'y prenais pas de la bonne manière bref...

Autre question: Comment faire pour données le flux directement a word pour qu'il ouvre le document sans passé par la sauvegarde du fichier pour aprés lui donnée le chemin dans l'object Source?
newApp.Documents.Open(ref Source,ref o, ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o,ref o);

Y a t'il une autre méthode pour faire ca?

Merci pour vos réponse

Thierry

++
0
Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008
8 mars 2005 à 09:23
Je ne comprends pas ce que tu veut faire :
- Créer un doc et après l'ouvrir avec Word ?
- Ou bosser sur un document en mémoire sans qu'il soit enregistré sur le disque ?

En tout cas tu peux chercher là :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbawd11/html/womthOpen1_HV03076944.asp

Seb
0
virgul Messages postés 76 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 21 février 2008
8 mars 2005 à 09:34
Merci de ta réponse,

Ce que je veux faire c'est bosser en mémoire le but est d'envoyé le flux XML (WordML) dans le document word et après l'ouvrir tout ca sans l'enregistrer.

Merci pour le lien je vais allé regardé si ca peux m'aider.

++

Thierry
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008
8 mars 2005 à 09:37
Vas y car je n'ai pas la réponse à ton problème.

Bon courrage !

Seb
0
virgul Messages postés 76 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 21 février 2008
8 mars 2005 à 09:52
Dommage mais merci quand même pour ton aide ca fait plaisir!!!

Quelqu'un d'autre aurais une idée??

Merci a tous

++

Thierry
0
virgul Messages postés 76 Date d'inscription mercredi 12 janvier 2005 Statut Membre Dernière intervention 21 février 2008
8 févr. 2006 à 15:21
Re-bonjour,

Voila j'ai rremarqué que chaque que je lancais ce code sa m'ouvrais un process Winword.exe dans le gestionnaire de tache et que quand je fermais ce document il ne me killait pas le process et garde tout en mémoire!

Comment faire pour le fermer quand word se ferme (sachant que le document peux rester une journée ouvert)?

Ou si ce n'est pas possible comment faire pour ne démarrer qu'un process et que les autre viennent dans le premier?

Car moi qaund j'ouvre word plusieurs fois (normalement) un nouveau processus est créer a chaque fois mais a voir ca se merge(fusionne) dans le premier!

D'ou ma question comment peut-on faire quelque chose!

Merci
0
Gaxx Messages postés 28 Date d'inscription lundi 20 décembre 2004 Statut Membre Dernière intervention 19 mars 2008
8 févr. 2006 à 15:47
Salut,
Tu peux scruter le nombre de documents ouverts dans ton instance word et le fermer lorsque le nombre de documents est à 0 en faisant comme suit :
1- tu créé et conserve une instance de word
2- tu créé un déclencheur sur l'évenement de fermeture de document de ton instance
3- dant ma méthode appelée par lors de la fermeture tu regardes combien de documents sont encore ouvers

1 -
Word.Application instanceWord;

2 -
instanceWord.DocumentBeforeClose += new Word.ApplicationEvents4_DocumentBeforeCloseEventHandler(instanceWord_DocumentBeforeClose);

3 -
private void instanceWord_DocumentBeforeClose(Word.Document Doc, ref bool Cancel)
{
if(instanceWord.Documents.Count==1)
{
object save = false;
object miss = null;
instanceWord.Quit(ref save, ref miss, ref miss);
instanceWord = null;
}
}

Voilà,
@+
0
cs_xtofer Messages postés 2 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 7 août 2008
7 août 2008 à 16:55
Je ressors ce vieux topic de derrière les fagots...

Cela fait 3 jours que je m'acharne justement sur le problème de l'ouverture d'un document word par le biais d'un web service, sans succès.
J'ai résolu un problème de droit au niveau des composant DCOM qui me permet de ne plus être rejeté au moment où je fais :

ApplicationClass wordApplication = new ApplicationClass();

Mais lorsque je charge mon document, il ne le trouve pas.
J'ai l'impression que j'ai encore des soucis de droits au niveau du compte ASPNET, peut-être lié au fait que Word 2007 nécessite d'être activé.

Est ce que quelqu'un aurait une piste ?

Merci d'avance !!!
0
cs_xtofer Messages postés 2 Date d'inscription lundi 23 octobre 2006 Statut Membre Dernière intervention 7 août 2008
7 août 2008 à 16:56
Je précise que mon code fonctionne lorsque je le lance par le biais d'une appli console par exemple, d'où le fait que je cherche au niveau des droits du compte ASPNET
0
Rejoignez-nous