Ok, I simplified the code, I think you can try it.
I attached the image of out.doc
In the last method “EcritTexte” I set the variable Couleur = “red” , the fields are written in red.
Dim table As New DataTable("TableATGrEvaNonFri")
table.Columns.Add("NoRep")
table.Columns.Add("Loc")
table.Columns.Add("Mat")
table.Columns.Add("CVD")
table.Columns.Add("ESD")
table.Columns.Add("Photo")
table.Columns.Add("Pre")
table.Columns.Add("Pres")
Dim noRep As Integer = 0
For i As Integer = 0 To 9
noRep = i
table.Rows.Add(New Object() {noRep, "Loc" & noRep, "Mat" & noRep, "CVD" & noRep, "ESD" & noRep, "Photo" & noRep, _
"Pre" & noRep, "Pres" & noRep})
Next
Dim doc As New Document(chem & "\ModeleAmV2.doc")
mBuilder = New Aspose.Words.DocumentBuilder(doc)
AddHandler doc.MailMerge.MergeField, AddressOf HandleMergeField
doc.MailMerge.ExecuteWithRegions(table)
doc.Save("D:\DéveloppementV6\AsposeTestImpartial\TestImpartial\out.doc")
Sub HandleMergeField(ByVal sender As Object, ByVal e As Aspose.Words.Reporting.MergeFieldEventArgs)
If e.FieldValue Is Nothing Then Exit Sub
If e.FieldValue Is Convert.DBNull Then Exit Sub
Dim Couleur As String = "" ’ La couleur à mettre sur le champ
If TypeOf (e.FieldValue) Is Boolean Then
’ Ecrire une case à cocher
mBuilder.MoveToMergeField(e.FieldName)
Dim checkBoxName As String = String.Format("{0}{1}", e.FieldName, e.RecordIndex)
mBuilder.InsertCheckBox(checkBoxName, CBool(e.FieldValue), 0)
Exit Sub
Else
’ Ecrire un texte de champ
EcritTexte(e, Couleur)
End If
End Sub
Sub EcritTexte(ByVal e As Aspose.Words.Reporting.MergeFieldEventArgs, Optional ByVal Couleur As String = "")
Dim pgs() As String = Split(e.FieldValue, Chr(11)) ’ Marques de paragraphes
Dim a As String = e.FieldValue
If pgs.Length > 1 Then
’ Plusieurs lignes
mBuilder.MoveToMergeField(e.FieldName)
Dim ixPg As Integer
For ixPg = 0 To pgs.Length - 1
EcritTexte(pgs(ixPg), CBool(ixPg <> pgs.Length - 1), Couleur)
Next
Else
’ Une seule ligne
If Couleur <> "" Then
mBuilder.MoveToMergeField(e.FieldName)
EcritTexte(e.FieldValue, False, Couleur)
Else
mBuilder.MoveToMergeField(e.FieldName)
EcritTexte(e.FieldValue, False, Couleur)
End If
End If
End Sub
Sub EcritTexte(ByVal Chaine As String, ByVal AvecMarque As Boolean, ByVal Couleur As String)
’ Il faut avoir préalablement fait un MoveToMergeField
Dim st() As String = Split(Chaine, Chr(0))
If st.Length > 1 Then
Chaine = st(0)
Couleur = st(1)
End If
Couleur = "red"
If Chaine <> "" Then
mBuilder.PushFont()
If Couleur <> "" Then
Select Case Couleur
Case "red"
mBuilder.Font.Color = System.Drawing.Color.Red
mBuilder.Font.Bold = True
mBuilder.Font.Italic = True
Case "green"
mBuilder.Font.Color = System.Drawing.Color.Green
mBuilder.Font.Bold = True
Case "blue"
mBuilder.Font.Color = System.Drawing.Color.Blue
Case "magenta"
mBuilder.Font.Color = System.Drawing.Color.Magenta
mBuilder.Font.Italic = True
Case Else
mBuilder.Font.Color = System.Drawing.Color.Black
End Select
End If
mBuilder.Write(Chaine)
mBuilder.PopFont()
If AvecMarque Then
mBuilder.Writeln("")
End If
End If
End Sub
Regards,