1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| ....
foreach (string mod in modeles)// BOUCLE d'appel DE CREATION DES DOCUMENTS à partir des modèles Word sélectionnés au " void ChoixDoc()"
{
modelDoc = mod;
CreateDocFile();
} // fin de BOUCLE d'appel DE CREATION DES DOCUMENTS Word
void CreateDocFile() // _____CREATION DE DOCUMENT Word .docx
{
Word.Application objWord = new Word.Application {Visible = false}; // connexion à Word
object TemplateName = Path.Combine(ModelPath, modelDoc); // Chemin du fichier modèle choisi
Word.Document newDoc = objWord.Documents.Add(ref TemplateName); //création d'un nouveau document d'après le modèle
//remplissage des signets selon les listes préétablies
foreach (Word.Bookmark signet in newDoc.Bookmarks)
{
string nomSignet = signet.Name;
int indexB = Array.IndexOf(liste_Signet, nomSignet); // On récupére l'index du signet (liste de corrélation préétablie [])
string textSignet = liste_Signet_Texte[indexB, 1]; //on récupère le texte de la textBox du formulaire correspondant au nom du signet (liste de corrélation 2D préétablie[,])
if (textSignet != "")
{
//object name = nomSignet; // -> //première méthode
//Word.Range range = newDoc.Bookmarks.get_Item(ref name).Range;
Word.Range range = newDoc.Bookmarks.get_Item(nomSignet).Range; // -> autre méthode sans passer par la ref name
//Pas mieux pour la boucle
range.Text = textSignet;
//object newRange = range; // -> essai sans la ref newRange : même pb de foreach !
newDoc.Bookmarks.Add(nomSignet, range);
/* Cette dernière instruction bloque la boucle foreach qui fonctionne sur le premier signet
puis reboucle indéfiniement sur ce même signet sans passer au suivant.
En revanche le texte premier signet est bien inséré et le signet recréé comme on l'attend.
Si on commente cette instruction pour la sauter, la boucle fonctionne et tous les textes des signets sont insérés.
Mais, les signets eux-mêmes disparaissent ce qui ruine le document
qui en fait grand usage par l'intermédiaire de champs "REF".
*/
}
//pour visualisation de déboguage
MessageBox.Show("Avant rebouclage \nLe signet = " + nomSignet + " = ?signet.Name = " +signet.Name + "\n son texte est : " + textSignet);
}
//Attribution du nom de fichier à partir des listes de noms des modèles[] et des noms à attribuer[,]
int indexF = Array.IndexOf(liste_modelDoc, modelDoc);
string nomFichier = liste_Attribution_Nom [indexF,1];
string recapPath = Path.Combine(RepPath, nomFichier);
object fileName = recapPath;
newDoc.SaveAs2(ref fileName); // Enregistrement du document avec son nouveau nom
newDoc.Close();
objWord.Quit();
} //______ fin de CREATION DE DOCUMENT Word .docx |
Partager