Utilisation de word dans VS

Signaler
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
-
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013
-
Bonjour,




Je souhaite modifier un document word dans VC# 2005, afin de pourvoir sélectionner les paragraphes du .doc ( grâce à la librairie word ) et des fonctions genre split ( grâce à la librairie dotNet ).




<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 






Je pense avoir trouvé un

[ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vstcore/html/08f7fe4b-d96d-4a0c-b32a-aa7fd7992316.htm
lien

]
dans la msdn pour faire cela. Dans un premier temps, il s’agit de faire Application.Documents.Open("fichier.doc")





 






Pour pouvoir utiliser la fonction Open, je suis la

[ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vstcore/html/e5d1eaa4-e175-4897-8379-1b40ff3cca0a.htm
msdn

]
. J’installe Office Interop Primary Assembly et j’ajoute la référence COM : Microsoft Word Object 11.0 Library  ( librairie word ! ).





 






Le namespace Microsoft.Office.Interop.Word est reconnu par VS ( using ok ) mais malgré tout pas de complétion après Application. ( donc on peut pas choisir Documents ).





 






Des indices qui pourraient expliquer cela :






·       
La référence COM ( Microsoft Word 11.0 Object Library ) pointe sur msword.olb alors que la référence word ( que ça a ajouté ) pointe sur Microsoft.Office.interop.Word.dll.






·       
Les dlls corresponndant au Office Interop Primary sont installé en cache ( CAG ). Mais elle n’existe pas sur le disque dur quand je les cherche avec le finder.






·       
Office Interop Primary Assembly est peut-etre mal installé.





 






PS : J’ai installé le support .Net pour Office Word 2003, Office 2003 SP2 ( aussi réinstaller Office Interop Primary Assembly d’après le readme ). Trop long à expliquer tout en détails.





Si vous avez besoin d’informations complémentaires, n’hésitez pas, j’ai vu ce pb en long en large et en travers  .

8 réponses

Messages postés
6
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
27 octobre 2009

as tu essayé d'installer windowsBase.dll qui se trouve dans "C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0" dans ton projet comme réference. essaye ça devrait t'aider. clic sur projet, ajouter réference, parcourir et suis le lien que j'ai indiqué.
bon courage
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013

J'ai justement regardé ce projet en cours mais c vraiment galère. G fini par faire par VBE ( VB Editor ). Avant ton message, j'avais fait cela :

using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core;
using WWord = Microsoft.Office.Tools.Word;
using Microsoft.Win32.SafeHandles;

Word.Application a = new Microsoft.Office.Interop.Word.Application();
object path = @"C:\Fichier.doc";
object missing=System.Reflection.Missing.Value;
object visible = false;

a.Documents.Open(ref path, 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);

int nb_bad_mots = 0;
for (int i = 0; i < a.ActiveDocument.Words.Count; i++)
if (a.ActiveDocument.Words[i].SpellingChecked) nb_bad_mots++;



Provoque une erreur d'excution : COMException. Le membre de la collection ( Words[i] ) n'existe pas. A priori, le COMException est du à un pb pour déterminer le HRESULT retourné par l'objet COM.
En incluant WindowsBase.dll, change rien. Tiens ! Je ne sais pas quelle namespace utilisé. J'ai mis using Microsoft.Win32.SafeHandles, change rien.

Tu utilises WindowsBase.dll pour résoudre quel problème ?
As-tu une idée pour mon bug ... ( enfin sinon tantpis. Peut-etre quelqu'un d'autre. En tout cas, malgré le temps passé, Office Tools et Interop resteront un mystère pour moi. ).
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013

Tiens j'ai eu l'idée là ( encore une... ) de mettre carrément les dlls au niveau de l'exe ( dossier debug ).
Microsoft.Office.Tools.Word.dll
MSWORD.OLB ( Microsoft Word Object Library 11.0 )

Change rien.
Est-ce que parce ce que .olb et non dll ?

Références déjà ajoutées :
Microsoft.Office.Core ( Microsoft Office Object Library 11.0 ) ( installé dans le GAC ).
Microsoft.Office.Tools.Word ( pas dans le GAC )
Word ( Microsoft Word Object Library 11.0 )( pas dans le GAC )

Ya pas Microsoft.Office.Interop.Word mais en using ok. Primary Interop Assemblie installé dans ajout/suppression de programmes. Réinstallé, change rien.

Voilà voilà, enfn bref....
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013

Tiens j'ai eu l'idée là ( encore une... ) de mettre carrément les dlls au niveau de l'exe ( dossier debug ).
Microsoft.Office.Tools.Word.dll
MSWORD.OLB ( Microsoft Word Object Library 11.0 )

Change rien.
Est-ce que parce ce que .olb et non dll ?

Références déjà ajoutées :
Microsoft.Office.Core ( Microsoft Office Object Library 11.0 ) ( installé dans le GAC ).
Microsoft.Office.Tools.Word ( pas dans le GAC )
Word ( Microsoft Word Object Library 11.0 )( pas dans le GAC )

Ya pas Microsoft.Office.Interop.Word mais en using ok. Primary Interop Assemblie installé dans ajout/suppression de programmes. Réinstallé, change rien.

Voilà voilà, enfn bref....
Messages postés
6
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
27 octobre 2009

essaye ceci pour ouvrir word, ça marche très bien
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Packaging;




namespace projet_vmware_ouvrir_fichier_doc_10_09_09
{
public partial class Form1 : Form
{
public Microsoft.Office.Interop.Word.Application msWord=null; //declare l'application word et l'instancie à null//
public Microsoft.Office.Interop.Word.Document docWord = null; //declare le document word et l'instancie à null/
object missing = System.Reflection.Missing.Value; //declare l'objet par défaut, utile pour la suite pour les parametres par défaut//




public Form1()
{
InitializeComponent();
}

private void btn1_Click(object sender, EventArgs e)
{
object fileName = @"C:\Users\gurcan\Desktop\stage\test.docx";
//début du try catch//
try
{ //declare msWord comme nouvelle application word//
msWord = new Microsoft.Office.Interop.Word.Application();
//rend l'application visible//
msWord.Visible = true;
//declare docWord comme nouveau document//
docWord = new Microsoft.Office.Interop.Word.Document();
//montre où se trouve le document word//

//ouvre le document word//
docWord = msWord.Documents.Open(ref fileName, 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);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}



private void btn2_Click(object sender, EventArgs e)
{
//fermeture du document word//
docWord.Close(ref missing, ref missing, ref missing);
//fermeture de l'application word//
msWord.Quit(ref missing, ref missing, ref missing);
}
}
}

ton doc s'ouvre ensuite tu peut le modifier suivant ton programme
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013

Bonjour,
Je suppose que dans ton code, tu as ajouté using Microsoft.Office.Interop.Word; ( et ajouter la référence Microsoft Word Object 11.0 ( ou plutot 12.0 pour toi )) pour que ça compile.

Et dans ton projet word, tu peux utiliser les membres d'objets et ça marche ????? Car pour moi, g toujours un problème d'exécution ( COMException ) : le membre de la collection n'existe pas. Vérifier le code erreur de l'exception pour déterminer le HRESULT retourné par l'objet COM.
Erreur d'execution sur (msWord.ActiveDocument.Words[i].SpellingChecked) nb_bad_mots++;

( pas mis tout le code )

...
object fileName = @"C:\Todo.doc";

try
{
msWord = new Microsoft.Office.Interop.Word.Application();
msWord.Visible = true;
docWord = new Microsoft.Office.Interop.Word.Document();
docWord = msWord.Documents.Open(ref fileName, 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);

int nb_bad_mots = 0;
for (int i = 0; i < msWord.ActiveDocument.Words.Count; i++)
if (msWord.ActiveDocument.Words[i].SpellingChecked) nb_bad_mots++;

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
...

J'ai remarqué que les 3 namespace de la référence ( Microsoft.Office Core, VBIDE, Word ) sont des " contrôle " ActiveX. Ton projet, c bien un projet Windows Application ?


ça me parait impossible pour que ça marche.
Messages postés
6
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
27 octobre 2009

tu as pensé à déclarer les objets word et leur application que tu utilises en public dans " public partial class Form1 : Form "?
Messages postés
23
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
28 mars 2013

Oui, oui c fait. D'ailleurs si cela posait un pb, il y aurait une erreur de compilation et non d'execution.
Un bon truc qui aurait pu marcher c une copie local des références ( de manière à avoir les dll à coté de l'exe ). Mais marche pas non plus.

Ton code arrive effectivement à ouvrir word très bien. Mais essaies d'utiliser une méthode de la librairie ( comme le code suivant ) et tu verras une erreur d'exécution.
int nb_bad_mots = 0;
for (int i = 0; i < msWord.ActiveDocument.Words.Count; i++)
if (msWord.ActiveDocument.Words[i].SpellingChecked) nb_bad_mots++;

Quelle version de visual studio utilises-tu ? ( question très importante, merci d'y répondre ).

Bon voilà, je me demande vraiment si on peut utiliser cette librairie avec VS 2005. Tu utilises la librairie word dans un projet ???