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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim oTable As Word.Table
Dim oRng As Word.Range
' Start Word and open the document template.
oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add
' On récupère le Dataset stoqué en session
Dim myDataset As DataSet = New DataSet
myDataset = CType(Me.ViewState("myDataSet"), DataSet)
Dim dv As DataView = myDataset.Tables(0).DefaultView
' Insértion du header et footer dans le document Word
With oDoc.Sections(1)
.Headers(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Text = "Trombinoscope"
.Headers(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary).Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
.Footers(Word.WdHeaderFooterIndex.wdHeaderFooterPrimary).PageNumbers.Add()
End With
' Mettre le header en gras et centré
With oDoc.StoryRanges(Word.WdStoryType.wdPrimaryHeaderStory)
.Bold = True
.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
End With
For i As Integer = 0 To dv.Count - 1
Dim k As Integer = 0
'Insert a (dt.Columns.Count - 2, puisqu'on va pas créer une ligne pour la photo et une ligne pour le chemin de la photo) x 4 table, fill it with data, and change the column widths.
oTable = oDoc.Tables.Add(oDoc.Bookmarks.Item("\endofdoc").Range, 1, 4)
'On centre le tableau
oTable.Rows.Alignment = Word.WdRowAlignment.wdAlignRowCenter
'On définit la taille du texte
oTable.Range.Font.Size = 9
'On définit la police du texte
oTable.Range.Font.Name = "Verdana"
' formater la bordure
oTable.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle
oTable.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleDouble
' format la largeurs des colonnes
'largeur premiere colonne
oTable.Columns(1).SetWidth(160, Word.WdRulerStyle.wdAdjustFirstColumn)
'largeur deuxième colonne
oTable.Columns(2).SetWidth(8, Word.WdRulerStyle.wdAdjustFirstColumn)
'largeur troisième colonne
oTable.Columns(3).SetWidth(200, Word.WdRulerStyle.wdAdjustFirstColumn)
'largeur quatrième colonne
oTable.Columns(4).SetWidth(70, Word.WdRulerStyle.wdAdjustFirstColumn)
'Espacement
oTable.Range.ParagraphFormat.SpaceAfter = 5
Dim CurrentRow As Integer = 0
For j As Integer = 1 To dv.Table.Columns.Count
'On insère l'image
path = UrlPhoto + dv(i)("ID_PERSONNE") + ".jpg"
oTable.Cell(1, 4).Range.InlineShapes.AddPicture(filename:=path, LinkToFile:=False, SaveWithDocument:=True)
'Affichage vertical de l'image : Centré
oTable.Columns.Item(4).Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalTop
'Affichage horizontal de l'image : Centré
oTable.Cell(1, 4).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
'Taille de l'image
With oDoc.InlineShapes(oDoc.InlineShapes.Count)
.Height = 79 'redimensionne hauteur image
.Width = 67 'redimensionne largeur image
End With
CurrentRow = CurrentRow + 1
If CurrentRow > 1 Then
oTable.Rows.Add()
End If
'On met les noms de colonnes en gras
oTable.Cell(CurrentRow, 1).Range.Font.Bold = True
'On écrit : dans la 3ème colonne en gras
oTable.Cell(CurrentRow, 2).Range.Text = ":"
oTable.Cell(CurrentRow, 2).Range.Font.Bold = True
oTable.Cell(CurrentRow, 2).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter
'On écrit les noms des champs à afficher
oTable.Cell(CurrentRow, 1).Range.Text = myHT.Item(dv.Table.Columns(j - 1).ColumnName)
'On écrit les valeurs correspondant à chaque champs
If Not dv(i)(j - 1) Is DBNull.Value Then
oTable.Cell(CurrentRow, 3).Range.Text = dv(i)(j - 1)
Else
oTable.Cell(CurrentRow, 3).Range.Text = " "
End If
Next
' Je fusionne les lignes de la colonne qui contiendra la photo
oTable.Cell(Row:=1, Column:=4).Merge(mergeTo:=oTable.Cell(Row:=dv.Table.Columns.Count - 2, Column:=4))
'Saut de ligne
oRng = oDoc.Bookmarks.Item("\endofdoc").Range
oRng.InsertBreak(Word.WdBreakType.wdLineBreak)
Next
Dim filename As String = "fichier.doc"
Dim filepath As String = System.IO.Path.Combine("c:\export\", filename)
oDoc.SaveAs(filepath)
oDoc.Close()
oDoc = Nothing '-- détruire l'objet Document
oWord.Quit() '--On quitte l'application Word
oWord = Nothing '-- détruire l'objet Word
Catch ex As Exception
Response.Clear()
UniLog.Log(ex, Me)
lblMessage.Text = erreur(ex.Message)
lblMessage.Visible = True
End Try
End Sub |
Partager