Objb26
Messages postés3Date d'inscriptionjeudi 11 juin 2009StatutMembreDernière intervention12 juin 2009
-
11 juin 2009 à 16:40
Objb26
Messages postés3Date d'inscriptionjeudi 11 juin 2009StatutMembreDernière intervention12 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.
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 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 ! -
Objb26
Messages postés3Date d'inscriptionjeudi 11 juin 2009StatutMembreDernière intervention12 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.
Objb26
Messages postés3Date d'inscriptionjeudi 11 juin 2009StatutMembreDernière intervention12 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.