Créer un entête "dynamique" pour un document word

Objb26 Messages postés 3 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 12 juin 2009 - 11 juin 2009 à 16:40
Objb26 Messages postés 3 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 12 juin 2009 - 12 juin 2009 à 14:20
Bonjour,

Je développe actuellement une application en c# me permettant d'éditer des données dans un document word.
Chaque page de mon document word doit posséder un entête, et jusqu'alors, cet entête restait le même pour toutes les pages. J'utilisais donc :

Word.

_Application aWord;
...
(initialisation)
aWord.ActiveWindow.ActivePane.View.SeekView = Word.

WdSeekView.wdSeekCurrentPageHeader;
...
(Déclarations pour fixer la police, l'alignement, etc)
aWord.ActiveWindow.Selection.TypeText("texte placé en entête"

);
...

Mais il se trouve que maintenant, je dois changer l'entête en fonction des données qui sont contenues dans la page.

Le seul moyen que j'ai trouvé pour le moment étant d'utiliser:
aWord.ActiveWindow.Selection.Fields.Add(aWord.Selection.Range,

ref Objet,
ref Missing,
ref Missing);

La variable "Objet" étant l'objet dont la valeur change en fonction de la page, et que je veux afficher en entête.
Or, il se trouve que cette variable doit être obligatoirement un "object", ce qui n'est pas le cas, et que les seuls exemples que j'ai trouvé à ce sujet utilisent directement des fonctions leur renvoyant des objets (étant donné que je n'arrive pas à m'expliquer plus en détail, je vous renvoie à http://www.c-sharpcorner.com/UploadFile/amrish_deep/WordAutomation05102007223934PM/WordAutomation.aspx).

Bref, je pédalle un peu dans la semoule, et je voudrais savoir si quelqu'un pouvait me guider sur ce sujet, ou me rediriger vers d'autres outils.

J'en profite également pour demander si quelqu'un n'aurait pas des informations sur une fonction permettant de faire un saut de page.

Merci d'avance.

4 réponses

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
11 juin 2009 à 17:37
"il se trouve que cette variable doit être obligatoirement un "object", ce qui n'est pas le cas"
Erreur fatale !
En C#, toute classe ou structure dérive obligatoirement de "object", donc toute variable EST un object.
object i = 3;
object s = "Hello";
object f = new System.Windows.Forms.Form();
object o = new MaClassePerso(MesArguments);
...

Cependant, pour réutiliser cet objet en tant que son type de base, il existe 2 solutions :

object o = 3;
int i = (int)o; // Marche pour tout, mais lève une exception si o n'est pas un int

object o = new Form();
Form f = o as Form; // Marche uniquement pour les type nullable. Si o n'est pas du bon type (Form en l'occurrence), l'objet renvoyé (f) est null

et avec la gestion d'erreur :

object o = 3;
try
{
    int i = (int)o;
}catch {}

object o = new Form();
Form f = o as Form;
if(f != null)
{

}

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
Objb26 Messages postés 3 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 12 juin 2009
12 juin 2009 à 09:26
Hélas, j'aurais du être plus précis dans mon message...
"Il se trouve que cette variable doit être obligatoirement un object, ce qui n'est pas le cas " car une exception du type "Le type ne correspond pas" est relevée lors de l'appel à la fonction (même avec une variable de type "object", j'ai même essayé de faire un cast, mais rien n'y fait, et pour cause...)

En réalité, ce paramètre ne doit pas être "juste" un object. Il s'agit d'une plage de valeurs bien précise (et il est indiqué "object" dans les paramètres car un autre type ne pourrait pas décrire l'éventail de valeurs).

Après quelques tests, il semble que cette valeur doive être numérique, étant donné que je me retrouve avec une exception du type "Valeur en dehors des limites"  pour des valeurs de 0, 1, 0.52 ou 1000.

Cette fonction ne semble donc pas adéquat(e?) pour résoudre mon problème, du moins avec ce nombre de paramètres.

Merci tout de même de ta réponse.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
12 juin 2009 à 10:25
Regarde peut-être par là :
http://social.msdn.microsoft.com/Forums/en-US/vsto/thread/a044ff2d-b4a7-4f19-84f4-f3d5c55396a8

Krimog : while (!(succeed = try())) ;
- NON, "LE BAR" n'est PAS un langage de programmation ! -
0
Objb26 Messages postés 3 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 12 juin 2009
12 juin 2009 à 14:20
J'avais déjà vu ce code dans le milieu de la page que je donne en lien plus haut, mais le paramètre "dynamique" de l'en-tête est le numéro de page, qui correspond à une des valeur du type énuméré Word.WdFieldType.
Malheureusement, je n'ai pas réussi à trouver une valeur de ce type me permettant de rentrer une chaine de caractère par exemple, mais si solution il doit y avoir, c'est surement en cherchant dans les valeurs de Word.WdFieldType qu'on la trouvera.

Pour ma part, j'abandonne étant donné que les besoins de l'application ont été changés, mais j'espère que ces indications pourront éventuellement aider ceux qui se trouveraient face à un probleme similaire.

Encore merci à krimog pour ses réponses.
0
Rejoignez-nous