Hi,
Ik ben bezig met een Visual Basic .NET programma waarmee ik documenten genereer door Word te openen en daarin bookmarks vervang door teksten uit een database (noem het maar 'mailmerge').
Dit werkt prima, ik doe het door Bookmarks te plaatsen in een Word template, en die Bookmarks dan vanuit VB te vervangen door tekst uit de database. Genoeg voorbeelden van op inet te vinden, maar check dit of check dit.
Wat er nu gebeurt is dat de geinserte tekst de formatting (font, tabs, etc) van het document overneemt. Dus als ik tabs heb in de tekst die ik wil inserten, dan komen die netjes op de kolommen zoals ik die in het template-document heb geplaatst.
Nou wil ik echter wat ingewikkelder teksten gaan inserten, met eigen bold, underline en italics stijlen. Daar is ook een manier voor, namelijk door gebruik te maken van het Clipboard object en .PasteSpecial(). Ook dit heb ik prima voor elkaar, like so:
In strRTFText staat dan iets als dit:
Echter helaas wordt de formatting van het originele document hierbij niet overgenomen
. De geinserte tekst krijgt de default instellingen. Zo is mijn hele document in Arial 10pts, maar krijgt de geinserte tekst het default font Times New Roman 12pts mee. Ook tabstops worden niet overgenomen, de geinserte tekst krijgt alleen de default tabstops.
Erg vervelend, want als ik de fonts en tabstops ook mee moet gaan geven in de RTF tekst krijg ik in mijn programma een harde koppeling met het template. Wordt het template veranderd, dan moet mijn programma mee veranderd worden.
Is er een mogelijkheid om toch RTF tekst te pasten, waarbij het format van het document automatisch overgenomen (overerfd) wordt door de geinserte tekst? In de parameters van .PasteSpecial() vind ik jammer genoeg niks terug.
Platform is VB.NET 2003 met Office 2000.
Edit:
Hmm, misschien kan ik eerst de stijl van de bookmark Range kopieeren en die dan weer toepassen op de Range nadat ik PasteSpecial heb gedaan... Maar er moet toch vast wel een simpeler manier zijn
. Werkt niet.
Ik ben bezig met een Visual Basic .NET programma waarmee ik documenten genereer door Word te openen en daarin bookmarks vervang door teksten uit een database (noem het maar 'mailmerge').
Dit werkt prima, ik doe het door Bookmarks te plaatsen in een Word template, en die Bookmarks dan vanuit VB te vervangen door tekst uit de database. Genoeg voorbeelden van op inet te vinden, maar check dit of check dit.
Wat er nu gebeurt is dat de geinserte tekst de formatting (font, tabs, etc) van het document overneemt. Dus als ik tabs heb in de tekst die ik wil inserten, dan komen die netjes op de kolommen zoals ik die in het template-document heb geplaatst.
Nou wil ik echter wat ingewikkelder teksten gaan inserten, met eigen bold, underline en italics stijlen. Daar is ook een manier voor, namelijk door gebruik te maken van het Clipboard object en .PasteSpecial(). Ook dit heb ik prima voor elkaar, like so:
code:
1
2
3
4
5
6
7
8
9
10
11
| Dim objDataObject As New DataObject Dim nStart As Integer = objWordBookmark.Start Dim nEnd As Integer = objWordBookmark.End Dim objPasteRTF As Object = Word.WdPasteDataType.wdPasteRTF Dim objInline As Object = Word.WdOLEPlacement.wdInLine objDataObject.SetData(DataFormats.Rtf, strRTFText) Clipboard.SetDataObject(objDataObject, True) objWordDoc.Range(CObj(nStart), CObj(nEnd)).PasteSpecial(, , objInline, , objPasteRTF, , ) |
In strRTFText staat dan iets als dit:
code:
1
2
3
| {\b Peter de Vroomen\b0\par
\tab 12-3-2005\tab BB-10-VV\tab 8\tab 0\tab 10,00\par
\tab 9-4-2005\tab BB-10-VV\tab 6,5\tab 0\tab 11,00\par } |
Echter helaas wordt de formatting van het originele document hierbij niet overgenomen
Erg vervelend, want als ik de fonts en tabstops ook mee moet gaan geven in de RTF tekst krijg ik in mijn programma een harde koppeling met het template. Wordt het template veranderd, dan moet mijn programma mee veranderd worden.
Is er een mogelijkheid om toch RTF tekst te pasten, waarbij het format van het document automatisch overgenomen (overerfd) wordt door de geinserte tekst? In de parameters van .PasteSpecial() vind ik jammer genoeg niks terug.
Platform is VB.NET 2003 met Office 2000.
Edit:
Hmm, misschien kan ik eerst de stijl van de bookmark Range kopieeren en die dan weer toepassen op de Range nadat ik PasteSpecial heb gedaan... Maar er moet toch vast wel een simpeler manier zijn
[ Voor 7% gewijzigd door RetepV op 14-10-2005 15:44 ]
Macbook Pro