[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.
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