2010-01-19 6 views
2

J'utilise VSTO pour remplir des données dans une table dans un modèle Microsoft Word 2007. La quantité de données varie et remplir de nombreuses pages (+50) prend beaucoup de temps.Microsoft Word 2007 VSTO, Créer une table hors du mot?

Le code que j'utilise pour créer une table:

Word.Table table = doc.Tables.Add(tablePosition, 
            numberOfRows, 
            8, 
            ref System.Reflection.Missing.Value, 
            ref System.Reflection.Missing.Value); 

Je soupçonne que la consommation de temps est due à la communication entre Visual Studio (C#) et Word chaque fois que j'insérer des données dans une cellule. Si c'est le cas, il pourrait être plus rapide de créer la table en C# et ensuite l'insérer dans Word.

Le Microsot.Office.Interop.Word.Table est une classe abstraite - donc je ne peux pas le faire

Word.Table table = new Word.Table(); 

qui aurait été à portée de main.

Existe-t-il d'autres possibilités lorsque vous utilisez simplement VSTO?

+0

Comment insérez-vous les données dans la table Word? D'une boucle for/next de la DB? D'un pour/suivant d'un tableau? –

+0

@Otaku: D'abord, je fais une requête Linq2SQL et dans une instruction foreach suivante, j'insère des données de la requête dans chaque cellule de la ligne courante de la table. - Cela a-t-il un sens? – Chau

Répondre

1
  • Essayez de créer la table au format HTML Clipboard, ajoutez au presse-papiers, puis collez.
  • Essayez de créer la table en HTML et de l'insérer.
  • Essayez de créer une chaîne délimitée par des tabulations avec un caractère de retour à la ligne pour chaque enregistrement. Insérer une chaîne avec sélection, convertir la sélection en table en utilisant des tabulations comme délimiteur.
  • Créez un modèle en XML, en transformant les données avec Xslt en document XML Word.
  • Créez un modèle en tant que "Fusion et publipostage de répertoire", effectuez une opération de fusion et publipostage avec des données.

En fonction de vos besoins, je vous recommande d'utiliser la technique de publipostage, car l'utilisateur peut modifier les fusions de modèle et de courrier sont rapides, surtout si vous avez plus de 50 pages.

+0

@Amissico: Merci pour vos suggestions. Je vais les essayer dès que je peux =) – Chau

0

Bien que je fasse des choses similaires avec LabVIEW7.1 et Word2000, le problème est similaire. Je n'ai pas trouvé un moyen d'insérer des blocs de données (table) avec une commande. Il y a même un problème lors de l'insertion trop rapide d'un seul élément pour un mot, il se bloque parfois et doit être tué pour résoudre ce problème. Malheureusement, il n'y a aucun événement ou propriété qui indique la capacité du mot à accepter la prochaine commande et l'ensemble de données - au moins, je n'ai rien trouvé. Comme cela est dans un séquenceur de test j'ai le temps pour nourrir les résultats des tests en mots avec des retards assez longtemps pour prendre parole est prêt à nouveau lorsque la partie suivante de données sont envoyées ...

+0

@Lul: Merci pour vos réflexions sur le sujet. :) – Chau

Questions connexes