[VB.Net 2008 Express] Interop.Word

Le
Bonjour,

Je cherche à générer un document Word dans une application VB.Net.

Pour cela, je me sers de plusieurs fichiers Word sources.

J'arrive à :
Créer l'objet Word
Ouvrir un document
Ecrire du texte à la position d'un signet
Sauvegarder le document
Quitter Word

Mais je n'arrive pas à faire plusieurs choses :
- Positionner le curseur sur un signet qui se trouve dans 1 tableau.
Ce tableau est un tableau de 2 lignes et 2 colonnes.
Le signet est sur la 1ère colonne de la dernière ligne.
- Ecrire du texte à la position du curseur
- Positionner le curseur à la cellule suivante (colonne 2 de la 2e ligne)
(dans Word, en utilisant la touche Tab)
- Créer une nouvelle ligne dans le tableau (tab aussi dans Word)
Et enfin,
- Copier la totalité de ce document (texte et mise en forme) à la fin d'un
autre document.

Merci d'avance pour votre aide,
Stéphane.


PS : 2 exemples de code.

* Ceci fonctionne :

'J'ouvre un objet word.
Dim word As New Word.Application

'Je copie mon premier fichier Word source vers un nouveau fichier
temporaire.
Dim nom_fichier_tmp As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source, nom_fichier_tmp, True)

'J'ouvre le document temporaire.
Dim document_tmp As Word.Document
document_tmp = word.Documents.Open(CType(nom_fichier_tmp, Object))

'Je rentre le texte pour chaque signet.
document_tmp.Bookmarks.Item("bookmarkOption1").Range.Text =
sdr.Item("Option1").ToString
document_tmp.Bookmarks.Item("bookmarkOption2").Range.Text =
sdr.Item("Option2").ToString

'Je sauvegarde le document.
document_tmp.Save()

'Je ferme le document temporaire.
document_tmp.Close()
document_tmp = Nothing

'Je copie le fichier temporaire vers le document final.
IO.File.Copy(nom_fichier_tmp, nom_fichier, True)

'J'efface le fichier temporaire
IO.File.Delete(nom_fichier_tmp)

'Je quitte Word.
word.Quit()
word = Nothing

'Dans ce 1er exemple, mon fichier Word final est correct.


* Ceci ne fonctionne pas correctement :

'J'ouvre un objet word.
Dim word As New Word.Application

'Je copie mon premier fichier Word source vers un nouveau fichier
temporaire.
Dim nom_fichier_tmp As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source, nom_fichier_tmp, True)

'J'ouvre le document temporaire.
Dim document_tmp As Word.Document
document_tmp = word.Documents.Open(CType(nom_fichier_tmp, Object))

'Je rentre le texte pour chaque signet.
document_tmp.Bookmarks.Item("bookmarkOption1").Range.Text =
sdr.Item("Option1").ToString
document_tmp.Bookmarks.Item("bookmarkOption2").Range.Text =
sdr.Item("Option2").ToString

'Je sauvegarde le document.
document_tmp.Save()

'Je copie mon 2e fichier Word source vers un nouveau fichier temporaire.
Dim nom_fichier_tmp2 As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source2, nom_fichier_tmp2, True)

'J'ouvre le document temporaire 2.
Dim document_tmp2 As Word.Document
document_tmp2 = word.Documents.Open(CType(nom_fichier_tmp2, Object))

'Atteindre bookmarkNoms
document_tmp2.Bookmarks.Item("bookmarkNoms").Range.Select()
Dim ligne As Integer = 1

While sdr.Read

'Crée la ligne suivante du tableau si ce n'est pas la 1ère ligne à écrire
If ligne > 1 Then document_tmp2.Range.Text = vbTab

'Ecrire dans la colonne 1
document_tmp2.Range.Text = sdr.Item("NuméroAuto").ToString

'Colonne suivante
document_tmp2.Range.Text = vbTab

'Ecrire dans la colonne 2
document_tmp2.Range.Text = sdr.Item("Nom").ToString

End While

'Je sauvegarde le document.
document_tmp2.Save()

'Sélectionne tout le texte du fichier tmp2
document_tmp2.Range.SetRange(document_tmp2.Range.Start,
document_tmp2.Range.End)

'Retour dans document_tmp
'Atteindre la fin du document
document_tmp.Range.SetRange(document_tmp.Range.End, document_tmp.Range.End)

'Ecrire le contenu de la sélection du fichier tmp2
document_tmp.Range.Text = document_tmp2.Range.Text

'Je sauvegarde le document.
document_tmp.Save()

'Je ferme les documents temporaire.
document_tmp.Close()
document_tmp = Nothing
document_tmp2.Close()
document_tmp2 = Nothing

'Je copie le fichier temporaire vers le document final.
IO.File.Copy(nom_fichier_tmp, nom_fichier, True)

'J'efface les fichiers temporaires
IO.File.Delete(nom_fichier_tmp)
IO.File.Delete(nom_fichier_tmp2)

'Je quitte Word.
word.Quit()
word = Nothing

'Dans ce 2e exemple, mon fichier Word final ne contient que la donnée
contenue dans le champs "Nom" de la dernière occurence.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
gillardg
Le #19178091
as tu cherché dans les forums de vbfrance.com ?
i

<Stéphane> a écrit dans le message de groupe de discussion :

Bonjour,

Je cherche à générer un document Word dans une application VB.Net.

Pour cela, je me sers de plusieurs fichiers Word sources.

J'arrive à :
Créer l'objet Word
Ouvrir un document
Ecrire du texte à la position d'un signet
Sauvegarder le document
Quitter Word

Mais je n'arrive pas à faire plusieurs choses :
- Positionner le curseur sur un signet qui se trouve dans 1 tableau.
Ce tableau est un tableau de 2 lignes et 2 colonnes.
Le signet est sur la 1ère colonne de la dernière ligne.
- Ecrire du texte à la position du curseur
- Positionner le curseur à la cellule suivante (colonne 2 de la 2e ligne)
(dans Word, en utilisant la touche Tab)
- Créer une nouvelle ligne dans le tableau (tab aussi dans Word)
Et enfin,
- Copier la totalité de ce document (texte et mise en forme) à la fin d'un
autre document.

Merci d'avance pour votre aide,
Stéphane.


PS : 2 exemples de code.

* Ceci fonctionne :

'J'ouvre un objet word.
Dim word As New Word.Application

'Je copie mon premier fichier Word source vers un nouveau fichier
temporaire.
Dim nom_fichier_tmp As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source, nom_fichier_tmp, True)

'J'ouvre le document temporaire.
Dim document_tmp As Word.Document
document_tmp = word.Documents.Open(CType(nom_fichier_tmp, Object))

'Je rentre le texte pour chaque signet.
document_tmp.Bookmarks.Item("bookmarkOption1").Range.Text =
sdr.Item("Option1").ToString
document_tmp.Bookmarks.Item("bookmarkOption2").Range.Text =
sdr.Item("Option2").ToString

'Je sauvegarde le document.
document_tmp.Save()

'Je ferme le document temporaire.
document_tmp.Close()
document_tmp = Nothing

'Je copie le fichier temporaire vers le document final.
IO.File.Copy(nom_fichier_tmp, nom_fichier, True)

'J'efface le fichier temporaire
IO.File.Delete(nom_fichier_tmp)

'Je quitte Word.
word.Quit()
word = Nothing

'Dans ce 1er exemple, mon fichier Word final est correct.


* Ceci ne fonctionne pas correctement :

'J'ouvre un objet word.
Dim word As New Word.Application

'Je copie mon premier fichier Word source vers un nouveau fichier
temporaire.
Dim nom_fichier_tmp As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source, nom_fichier_tmp, True)

'J'ouvre le document temporaire.
Dim document_tmp As Word.Document
document_tmp = word.Documents.Open(CType(nom_fichier_tmp, Object))

'Je rentre le texte pour chaque signet.
document_tmp.Bookmarks.Item("bookmarkOption1").Range.Text =
sdr.Item("Option1").ToString
document_tmp.Bookmarks.Item("bookmarkOption2").Range.Text =
sdr.Item("Option2").ToString

'Je sauvegarde le document.
document_tmp.Save()

'Je copie mon 2e fichier Word source vers un nouveau fichier temporaire.
Dim nom_fichier_tmp2 As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source2, nom_fichier_tmp2, True)

'J'ouvre le document temporaire 2.
Dim document_tmp2 As Word.Document
document_tmp2 = word.Documents.Open(CType(nom_fichier_tmp2, Object))

'Atteindre bookmarkNoms
document_tmp2.Bookmarks.Item("bookmarkNoms").Range.Select()
Dim ligne As Integer = 1

While sdr.Read

'Crée la ligne suivante du tableau si ce n'est pas la 1ère ligne à écrire
If ligne > 1 Then document_tmp2.Range.Text = vbTab

'Ecrire dans la colonne 1
document_tmp2.Range.Text = sdr.Item("NuméroAuto").ToString

'Colonne suivante
document_tmp2.Range.Text = vbTab

'Ecrire dans la colonne 2
document_tmp2.Range.Text = sdr.Item("Nom").ToString

End While

'Je sauvegarde le document.
document_tmp2.Save()

'Sélectionne tout le texte du fichier tmp2
document_tmp2.Range.SetRange(document_tmp2.Range.Start,
document_tmp2.Range.End)

'Retour dans document_tmp
'Atteindre la fin du document
document_tmp.Range.SetRange(document_tmp.Range.End,
document_tmp.Range.End)

'Ecrire le contenu de la sélection du fichier tmp2
document_tmp.Range.Text = document_tmp2.Range.Text

'Je sauvegarde le document.
document_tmp.Save()

'Je ferme les documents temporaire.
document_tmp.Close()
document_tmp = Nothing
document_tmp2.Close()
document_tmp2 = Nothing

'Je copie le fichier temporaire vers le document final.
IO.File.Copy(nom_fichier_tmp, nom_fichier, True)

'J'efface les fichiers temporaires
IO.File.Delete(nom_fichier_tmp)
IO.File.Delete(nom_fichier_tmp2)

'Je quitte Word.
word.Quit()
word = Nothing

'Dans ce 2e exemple, mon fichier Word final ne contient que la donnée
contenue dans le champs "Nom" de la dernière occurence.




Le #19181041
Bonjour gillardg,

Oui, c'est d'ailleurs surtout sur ce site que j'ai trouvé comment faire la
partie qui fonctionne.

Concernant le tableau à remplir, cela fonctionne maintenant correctement en
faisant ainsi :

Dim ligne As Integer = 1
Dim t As Word.Table = CType(document_tmp2.Tables(0), Word.Table)

While sdr.Read

If ligne > 1 Then t.Rows.Add()

t.Cell(t.Rows.Count, 1).Range.Text = sdr.Item("NuméroAuto").ToString

t.Cell(t.Rows.Count, 2).Range.Text = sdr.Item("Nom").ToString

ligne += 1

End While


Par contre, même si j'ai réussi à trouver 1 solution pour copier le texte
d'un document à la fin d'un autre, j'aimerais savoir s'il existe un moyen de
se passer du presse-papiers :

document_tmp2.Content.Copy()

document_tmp.Range.Words.Last.Paste()

Stéphane


"gillardg"
as tu cherché dans les forums de vbfrance.com ?
i

<Stéphane> a écrit dans le message de groupe de discussion :

Bonjour,

Je cherche à générer un document Word dans une application VB.Net.

Pour cela, je me sers de plusieurs fichiers Word sources.

J'arrive à :
Créer l'objet Word
Ouvrir un document
Ecrire du texte à la position d'un signet
Sauvegarder le document
Quitter Word

Mais je n'arrive pas à faire plusieurs choses :
- Positionner le curseur sur un signet qui se trouve dans 1 tableau.
Ce tableau est un tableau de 2 lignes et 2 colonnes.
Le signet est sur la 1ère colonne de la dernière ligne.
- Ecrire du texte à la position du curseur
- Positionner le curseur à la cellule suivante (colonne 2 de la 2e ligne)
(dans Word, en utilisant la touche Tab)
- Créer une nouvelle ligne dans le tableau (tab aussi dans Word)
Et enfin,
- Copier la totalité de ce document (texte et mise en forme) à la fin
d'un autre document.

Merci d'avance pour votre aide,
Stéphane.


PS : 2 exemples de code.

* Ceci fonctionne :

'J'ouvre un objet word.
Dim word As New Word.Application

'Je copie mon premier fichier Word source vers un nouveau fichier
temporaire.
Dim nom_fichier_tmp As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source, nom_fichier_tmp, True)

'J'ouvre le document temporaire.
Dim document_tmp As Word.Document
document_tmp = word.Documents.Open(CType(nom_fichier_tmp, Object))

'Je rentre le texte pour chaque signet.
document_tmp.Bookmarks.Item("bookmarkOption1").Range.Text =
sdr.Item("Option1").ToString
document_tmp.Bookmarks.Item("bookmarkOption2").Range.Text =
sdr.Item("Option2").ToString

'Je sauvegarde le document.
document_tmp.Save()

'Je ferme le document temporaire.
document_tmp.Close()
document_tmp = Nothing

'Je copie le fichier temporaire vers le document final.
IO.File.Copy(nom_fichier_tmp, nom_fichier, True)

'J'efface le fichier temporaire
IO.File.Delete(nom_fichier_tmp)

'Je quitte Word.
word.Quit()
word = Nothing

'Dans ce 1er exemple, mon fichier Word final est correct.


* Ceci ne fonctionne pas correctement :

'J'ouvre un objet word.
Dim word As New Word.Application

'Je copie mon premier fichier Word source vers un nouveau fichier
temporaire.
Dim nom_fichier_tmp As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source, nom_fichier_tmp, True)

'J'ouvre le document temporaire.
Dim document_tmp As Word.Document
document_tmp = word.Documents.Open(CType(nom_fichier_tmp, Object))

'Je rentre le texte pour chaque signet.
document_tmp.Bookmarks.Item("bookmarkOption1").Range.Text =
sdr.Item("Option1").ToString
document_tmp.Bookmarks.Item("bookmarkOption2").Range.Text =
sdr.Item("Option2").ToString

'Je sauvegarde le document.
document_tmp.Save()

'Je copie mon 2e fichier Word source vers un nouveau fichier temporaire.
Dim nom_fichier_tmp2 As String = My.Computer.FileSystem.GetTempFileName
IO.File.Copy(nom_fichier_source2, nom_fichier_tmp2, True)

'J'ouvre le document temporaire 2.
Dim document_tmp2 As Word.Document
document_tmp2 = word.Documents.Open(CType(nom_fichier_tmp2, Object))

'Atteindre bookmarkNoms
document_tmp2.Bookmarks.Item("bookmarkNoms").Range.Select()
Dim ligne As Integer = 1

While sdr.Read

'Crée la ligne suivante du tableau si ce n'est pas la 1ère ligne à
écrire
If ligne > 1 Then document_tmp2.Range.Text = vbTab

'Ecrire dans la colonne 1
document_tmp2.Range.Text = sdr.Item("NuméroAuto").ToString

'Colonne suivante
document_tmp2.Range.Text = vbTab

'Ecrire dans la colonne 2
document_tmp2.Range.Text = sdr.Item("Nom").ToString

End While

'Je sauvegarde le document.
document_tmp2.Save()

'Sélectionne tout le texte du fichier tmp2
document_tmp2.Range.SetRange(document_tmp2.Range.Start,
document_tmp2.Range.End)

'Retour dans document_tmp
'Atteindre la fin du document
document_tmp.Range.SetRange(document_tmp.Range.End,
document_tmp.Range.End)

'Ecrire le contenu de la sélection du fichier tmp2
document_tmp.Range.Text = document_tmp2.Range.Text

'Je sauvegarde le document.
document_tmp.Save()

'Je ferme les documents temporaire.
document_tmp.Close()
document_tmp = Nothing
document_tmp2.Close()
document_tmp2 = Nothing

'Je copie le fichier temporaire vers le document final.
IO.File.Copy(nom_fichier_tmp, nom_fichier, True)

'J'efface les fichiers temporaires
IO.File.Delete(nom_fichier_tmp)
IO.File.Delete(nom_fichier_tmp2)

'Je quitte Word.
word.Quit()
word = Nothing

'Dans ce 2e exemple, mon fichier Word final ne contient que la donnée
contenue dans le champs "Nom" de la dernière occurence.






Publicité
Poster une réponse
Anonyme