RTF Mail Merge Fields

V

Vic

Hello,

I am trying to setup a mail merge and use rtf text fields from a database.
These rtf fields contain the formatting instructions for bolding, bullets,
font settings etc. However, the problem I am having is word does not
recognize these formatting characters and prints everything as plain text.
My main document is an rtf file.

How can I get word to interpretate these instructions? I am using Word 2002.


Thank you,

Vic
 
M

macropod

Hi Vic,

Word's mailmerge facility outputs the source data as displayed, but without any character formatting that may be present in the data
source.

You can, however, apply formatting switches (picture switches in Word parlance) to mergefields to control the output's appearance.
 
D

Doug Robbins - Word MVP on news.microsoft.com

For any more than the formatting that can be applied by use of Word field
formatting switches, I think that you would have to use a "roll-your-own"
equivalent to mailmerge where in place of a mail merge main document
containing mergefields, you would use a template containing docvariable
fields and then you would run a macro that would create a new document from
that template for each record in data source, setting the values of
variables in the document to the value of corresponding field for that
record in the data source and making use of the formatting information in
the data source to apply the required formatting.

For information on Word field formatting switches, see "Formatting Word
fields with switches" on fellow MVP Graham Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com
 
V

Vic

Doug,

Thanks for the reply but I'm having a problem understanding how to implement
these switches. The rtf fields are inserted in an Access database using a
VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these text boxes
so that we can \b set strings of words to BOLD\b0 , change fonts, do
underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all of the
formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use /*charformat to
bold, underline and italics. So where are these switches implemented? I
tried as a test to press ctl F9 and inserted Graham's bold example { REF
chapter2_title \* Charformat } would display "Whales of the Pacific" but it
only displayed this as plain text without formatting.

I need to be able to have this done programmatically so I would assume I'd
need some sort of word macro. The VB program invokes the mail merge and
turns the document into a PDF which then gets merged with other PDF
documents to produce a final document as a PDF. So I suppose I'd have to
invoke the word macro to massage the word document after the mail merge is
completed. Would that be correct?

I don't see that bullets, indenting and font changes are supported with
switches. Are there any examples of using templates with docvariable
fields. There are about 20 merge fields that are inserted in this document.

Would you provide a bit of guidance on where to go from here? Are there
some examples somewhere for doing this. It would seem to me to be a quite
common occurance but I'm finding limited information on using switches and
merge fields that contain rtf data.

Vic
 
P

Peter Jamieson

The problem with trying to include RTF text via merge fields is that
merge fields only insert character data, with no formatting information
from the data source. If you copied your Access data to a Word document,
used that as the data source, and used REF fields instead of MERGEFIELD
fields to insert data, some of the formatting gets through, but it's all
rather arbitrary.

The only way I know to get the RTF text from Access to Word that has any
hope of working is to export the contents of each Access RTF field to a
..rtf file on disk, then insert t using an INCLUDETEXT field. This is of
course non-trivial, but I quote an earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism, but
faced with this problem for real, I would probably avoid MailMerge and
use Access VBA code to generate each Word document in turn (assuming
you're not going for a catalog/directory), saving each RTF field to disk
as needed and inserting it directly using the relevant Word Insert
file method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do, but there
are non-trivial problems to solve when attempting this, no matter how
you encode your formatted text (e.g., you encode it using XML, but using
which vocabulary/ies?). And I don't suppose anyone on the development
side has wanted to solve it for RTF-encoded text ever since RTF became a
"legacy format", which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk
 
V

Vic

Peter,

Thanks for the reply! I found an old post where you had indicated using
tables and the originator had indicated success. I have modified my program
to create the merge data source as a word table and I'm having some
successes. I load the form(s) containing the rtf data and then create a
word document with a table for the merge data which I then copy and paste
into the word table columns from the form values. It works! I had to
change MERGEFIELD to Ref to make it work.

The only problem I'm having now setting the bullet style. When it gets
merged the bullets come in as 1 - 2 - 3 ...


Thanks Peter, Your help is appreciated.


Vic





Peter Jamieson said:
The problem with trying to include RTF text via merge fields is that merge
fields only insert character data, with no formatting information from the
data source. If you copied your Access data to a Word document, used that
as the data source, and used REF fields instead of MERGEFIELD fields to
insert data, some of the formatting gets through, but it's all rather
arbitrary.

The only way I know to get the RTF text from Access to Word that has any
hope of working is to export the contents of each Access RTF field to a
.rtf file on disk, then insert t using an INCLUDETEXT field. This is of
course non-trivial, but I quote an earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to insert
it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism, but
faced with this problem for real, I would probably avoid MailMerge and use
Access VBA code to generate each Word document in turn (assuming you're
not going for a catalog/directory), saving each RTF field to disk as
needed and inserting it directly using the relevant Word Insert file
method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do, but there
are non-trivial problems to solve when attempting this, no matter how you
encode your formatted text (e.g., you encode it using XML, but using which
vocabulary/ies?). And I don't suppose anyone on the development side has
wanted to solve it for RTF-encoded text ever since RTF became a "legacy
format", which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these text
boxes so that we can \b set strings of words to BOLD\b0 , change fonts,
do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all of the
formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use /*charformat to
bold, underline and italics. So where are these switches implemented? I
tried as a test to press ctl F9 and inserted Graham's bold example { REF
chapter2_title \* Charformat } would display "Whales of the Pacific" but
it only displayed this as plain text without formatting.

I need to be able to have this done programmatically so I would assume
I'd need some sort of word macro. The VB program invokes the mail merge
and turns the document into a PDF which then gets merged with other PDF
documents to produce a final document as a PDF. So I suppose I'd have to
invoke the word macro to massage the word document after the mail merge
is completed. Would that be correct?

I don't see that bullets, indenting and font changes are supported with
switches. Are there any examples of using templates with docvariable
fields. There are about 20 merge fields that are inserted in this
document.

Would you provide a bit of guidance on where to go from here? Are there
some examples somewhere for doing this. It would seem to me to be a
quite common occurance but I'm finding limited information on using
switches and merge fields that contain rtf data.

Vic
 
V

Vic

Another thing the bullets cause is to change the paragraph numbering that
follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so that we
can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of the
formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1. Perhaps if I
could get the bullet character to change to something else may have some
sort of impact on the numbering but so far I haven't found a way to specify
the bullet character.


Vic



Peter Jamieson said:
The problem with trying to include RTF text via merge fields is that merge
fields only insert character data, with no formatting information from the
data source. If you copied your Access data to a Word document, used that
as the data source, and used REF fields instead of MERGEFIELD fields to
insert data, some of the formatting gets through, but it's all rather
arbitrary.

The only way I know to get the RTF text from Access to Word that has any
hope of working is to export the contents of each Access RTF field to a
.rtf file on disk, then insert t using an INCLUDETEXT field. This is of
course non-trivial, but I quote an earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to insert
it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism, but
faced with this problem for real, I would probably avoid MailMerge and use
Access VBA code to generate each Word document in turn (assuming you're
not going for a catalog/directory), saving each RTF field to disk as
needed and inserting it directly using the relevant Word Insert file
method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do, but there
are non-trivial problems to solve when attempting this, no matter how you
encode your formatted text (e.g., you encode it using XML, but using which
vocabulary/ies?). And I don't suppose anyone on the development side has
wanted to solve it for RTF-encoded text ever since RTF became a "legacy
format", which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these text
boxes so that we can \b set strings of words to BOLD\b0 , change fonts,
do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all of the
formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use /*charformat to
bold, underline and italics. So where are these switches implemented? I
tried as a test to press ctl F9 and inserted Graham's bold example { REF
chapter2_title \* Charformat } would display "Whales of the Pacific" but
it only displayed this as plain text without formatting.

I need to be able to have this done programmatically so I would assume
I'd need some sort of word macro. The VB program invokes the mail merge
and turns the document into a PDF which then gets merged with other PDF
documents to produce a final document as a PDF. So I suppose I'd have to
invoke the word macro to massage the word document after the mail merge
is completed. Would that be correct?

I don't see that bullets, indenting and font changes are supported with
switches. Are there any examples of using templates with docvariable
fields. There are about 20 merge fields that are inserted in this
document.

Would you provide a bit of guidance on where to go from here? Are there
some examples somewhere for doing this. It would seem to me to be a
quite common occurance but I'm finding limited information on using
switches and merge fields that contain rtf data.

Vic
 
P

Peter Jamieson

Ypur best bet here is probably to avoid using automatic numbering in the
main document - although it may be possible to prevent "interference"
between the numbering in the RTF and the numbering in the main document
by specifying a named list template or some such in the main document,
that stuff is hard to tame. What you coud try is SEQ-based numbering in
the main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence, \h
to hide the result when you do that, and the \c switch to re-use the
existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the best I
can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk
Another thing the bullets cause is to change the paragraph numbering
that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so that
we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of the
formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1. Perhaps
if I could get the bullet character to change to something else may have
some sort of impact on the numbering but so far I haven't found a way to
specify the bullet character.


Vic



Peter Jamieson said:
The problem with trying to include RTF text via merge fields is that
merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data to a
Word document, used that as the data source, and used REF fields
instead of MERGEFIELD fields to insert data, some of the formatting
gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that has
any hope of working is to export the contents of each Access RTF field
to a .rtf file on disk, then insert t using an INCLUDETEXT field. This
is of course non-trivial, but I quote an earlier message that has some
ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to
insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism,
but faced with this problem for real, I would probably avoid MailMerge
and use Access VBA code to generate each Word document in turn
(assuming you're not going for a catalog/directory), saving each RTF
field to disk as needed and inserting it directly using the relevant
Word Insert file method. However, I cannot provide you with code for
that.

Yes, it probably is something that lots of people want to do, but
there are non-trivial problems to solve when attempting this, no
matter how you encode your formatted text (e.g., you encode it using
XML, but using which vocabulary/ies?). And I don't suppose anyone on
the development side has wanted to solve it for RTF-encoded text ever
since RTF became a "legacy format", which you could argue is over a
decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 , change
fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all of
the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and inserted
Graham's bold example { REF chapter2_title \* Charformat } would
display "Whales of the Pacific" but it only displayed this as plain
text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program invokes the
mail merge and turns the document into a PDF which then gets merged
with other PDF documents to produce a final document as a PDF. So I
suppose I'd have to invoke the word macro to massage the word
document after the mail merge is completed. Would that be correct?

I don't see that bullets, indenting and font changes are supported
with switches. Are there any examples of using templates with
docvariable fields. There are about 20 merge fields that are
inserted in this document.

Would you provide a bit of guidance on where to go from here? Are
there some examples somewhere for doing this. It would seem to me to
be a quite common occurance but I'm finding limited information on
using switches and merge fields that contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of Word
field formatting switches, I think that you would have to use a
"roll-your-own" equivalent to mailmerge where in place of a mail
merge main document containing mergefields, you would use a template
containing docvariable fields and then you would run a macro that
would create a new document from that template for each record in
data source, setting the values of variables in the document to the
value of corresponding field for that record in the data source and
making use of the formatting information in the data source to apply
the required formatting.

For information on Word field formatting switches, see "Formatting
Word fields with switches" on fellow MVP Graham Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from a
database. These rtf fields contain the formatting instructions for
bolding, bullets, font settings etc. However, the problem I am
having is word does not recognize these formatting characters and
prints everything as plain text. My main document is an rtf file.

How can I get word to interpretate these instructions? I am using
Word 2002.


Thank you,

Vic
 
V

Vic

Peter,

What I've found is that I can enter the bullet character using ALT 7 (.)
for each item instead of setting selBullet = true per the rtf spec and it
works correctly in the merge. Also the paragraph sequencing is not
affected. Any ideas ?

Vic

Peter Jamieson said:
Ypur best bet here is probably to avoid using automatic numbering in the
main document - although it may be possible to prevent "interference"
between the numbering in the RTF and the numbering in the main document by
specifying a named list template or some such in the main document, that
stuff is hard to tame. What you coud try is SEQ-based numbering in the
main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence, \h to
hide the result when you do that, and the \c switch to re-use the
existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the best I
can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk
Another thing the bullets cause is to change the paragraph numbering that
follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so that
we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of the
formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1. Perhaps
if I could get the bullet character to change to something else may have
some sort of impact on the numbering but so far I haven't found a way to
specify the bullet character.


Vic



Peter Jamieson said:
The problem with trying to include RTF text via merge fields is that
merge fields only insert character data, with no formatting information
from the data source. If you copied your Access data to a Word document,
used that as the data source, and used REF fields instead of MERGEFIELD
fields to insert data, some of the formatting gets through, but it's all
rather arbitrary.

The only way I know to get the RTF text from Access to Word that has any
hope of working is to export the contents of each Access RTF field to a
.rtf file on disk, then insert t using an INCLUDETEXT field. This is of
course non-trivial, but I quote an earlier message that has some
ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to insert
it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query as
the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism, but
faced with this problem for real, I would probably avoid MailMerge and
use Access VBA code to generate each Word document in turn (assuming
you're not going for a catalog/directory), saving each RTF field to disk
as needed and inserting it directly using the relevant Word Insert file
method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do, but there
are non-trivial problems to solve when attempting this, no matter how
you encode your formatted text (e.g., you encode it using XML, but using
which vocabulary/ies?). And I don't suppose anyone on the development
side has wanted to solve it for RTF-encoded text ever since RTF became a
"legacy format", which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these text
boxes so that we can \b set strings of words to BOLD\b0 , change fonts,
do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all of
the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use /*charformat
to bold, underline and italics. So where are these switches
implemented? I tried as a test to press ctl F9 and inserted Graham's
bold example { REF chapter2_title \* Charformat } would display "Whales
of the Pacific" but it only displayed this as plain text without
formatting.

I need to be able to have this done programmatically so I would assume
I'd need some sort of word macro. The VB program invokes the mail
merge and turns the document into a PDF which then gets merged with
other PDF documents to produce a final document as a PDF. So I suppose
I'd have to invoke the word macro to massage the word document after
the mail merge is completed. Would that be correct?

I don't see that bullets, indenting and font changes are supported with
switches. Are there any examples of using templates with docvariable
fields. There are about 20 merge fields that are inserted in this
document.

Would you provide a bit of guidance on where to go from here? Are
there some examples somewhere for doing this. It would seem to me to
be a quite common occurance but I'm finding limited information on
using switches and merge fields that contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of Word
field formatting switches, I think that you would have to use a
"roll-your-own" equivalent to mailmerge where in place of a mail merge
main document containing mergefields, you would use a template
containing docvariable fields and then you would run a macro that
would create a new document from that template for each record in data
source, setting the values of variables in the document to the value
of corresponding field for that record in the data source and making
use of the formatting information in the data source to apply the
required formatting.

For information on Word field formatting switches, see "Formatting
Word fields with switches" on fellow MVP Graham Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from a
database. These rtf fields contain the formatting instructions for
bolding, bullets, font settings etc. However, the problem I am
having is word does not recognize these formatting characters and
prints everything as plain text. My main document is an rtf file.

How can I get word to interpretate these instructions? I am using
Word 2002.


Thank you,

Vic
 
P

Peter Jamieson

Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what you
are using in the RTF, what you are using in the mail merge main
document, what results you are trying to achieve and what you are
actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

What I've found is that I can enter the bullet character using ALT 7 (.)
for each item instead of setting selBullet = true per the rtf spec and
it works correctly in the merge. Also the paragraph sequencing is not
affected. Any ideas ?

Vic

Peter Jamieson said:
Ypur best bet here is probably to avoid using automatic numbering in
the main document - although it may be possible to prevent
"interference" between the numbering in the RTF and the numbering in
the main document by specifying a named list template or some such in
the main document, that stuff is hard to tame. What you coud try is
SEQ-based numbering in the main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence, \h
to hide the result when you do that, and the \c switch to re-use the
existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the best
I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk
Another thing the bullets cause is to change the paragraph numbering
that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so
that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of the
formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to something
else may have some sort of impact on the numbering but so far I
haven't found a way to specify the bullet character.


Vic



The problem with trying to include RTF text via merge fields is that
merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data to
a Word document, used that as the data source, and used REF fields
instead of MERGEFIELD fields to insert data, some of the formatting
gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that has
any hope of working is to export the contents of each Access RTF
field to a .rtf file on disk, then insert t using an INCLUDETEXT
field. This is of course non-trivial, but I quote an earlier message
that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to
insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query
as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism,
but faced with this problem for real, I would probably avoid
MailMerge and use Access VBA code to generate each Word document in
turn (assuming you're not going for a catalog/directory), saving
each RTF field to disk as needed and inserting it directly using the
relevant Word Insert file method. However, I cannot provide you with
code for that.

Yes, it probably is something that lots of people want to do, but
there are non-trivial problems to solve when attempting this, no
matter how you encode your formatted text (e.g., you encode it using
XML, but using which vocabulary/ies?). And I don't suppose anyone on
the development side has wanted to solve it for RTF-encoded text
ever since RTF became a "legacy format", which you could argue is
over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all
of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and
inserted Graham's bold example { REF chapter2_title \* Charformat }
would display "Whales of the Pacific" but it only displayed this as
plain text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program invokes
the mail merge and turns the document into a PDF which then gets
merged with other PDF documents to produce a final document as a
PDF. So I suppose I'd have to invoke the word macro to massage the
word document after the mail merge is completed. Would that be
correct?

I don't see that bullets, indenting and font changes are supported
with switches. Are there any examples of using templates with
docvariable fields. There are about 20 merge fields that are
inserted in this document.

Would you provide a bit of guidance on where to go from here? Are
there some examples somewhere for doing this. It would seem to me
to be a quite common occurance but I'm finding limited information
on using switches and merge fields that contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of
Word field formatting switches, I think that you would have to
use a "roll-your-own" equivalent to mailmerge where in place of a
mail merge main document containing mergefields, you would use a
template containing docvariable fields and then you would run a
macro that would create a new document from that template for each
record in data source, setting the values of variables in the
document to the value of corresponding field for that record in
the data source and making use of the formatting information in
the data source to apply the required formatting.

For information on Word field formatting switches, see "Formatting
Word fields with switches" on fellow MVP Graham Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from a
database. These rtf fields contain the formatting instructions
for bolding, bullets, font settings etc. However, the problem I
am having is word does not recognize these formatting characters
and prints everything as plain text. My main document is an rtf
file.

How can I get word to interpretate these instructions? I am using
Word 2002.


Thank you,

Vic
 
V

Vic

Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail merge
where the both the merge source and the main document are rtf files. For
the merge source the app creates the word document with a word table which
contains the merge data from an Access database. The problem I'm having is
when the merge source contains a bulleted list, the merged documents are
formatted as 1. 2. 3. etc. instead of a bullet (.). I have checked the
merge source and the column containing the bullet list is correctly
formatted. I also tried doing the merge in word and the results are the
same as when the merge is done in my program. So my question is how do I a
merge where the source contains bulleted lists and maintain the correct
style of the bullets.

Vic



Peter Jamieson said:
Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what you
are using in the RTF, what you are using in the mail merge main document,
what results you are trying to achieve and what you are actually getting,
I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

What I've found is that I can enter the bullet character using ALT 7 (.)
for each item instead of setting selBullet = true per the rtf spec and it
works correctly in the merge. Also the paragraph sequencing is not
affected. Any ideas ?

Vic

Peter Jamieson said:
Ypur best bet here is probably to avoid using automatic numbering in the
main document - although it may be possible to prevent "interference"
between the numbering in the RTF and the numbering in the main document
by specifying a named list template or some such in the main document,
that stuff is hard to tame. What you coud try is SEQ-based numbering in
the main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence, \h
to hide the result when you do that, and the \c switch to re-use the
existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the best I
can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph numbering
that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so that
we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of the
formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1. Perhaps
if I could get the bullet character to change to something else may
have some sort of impact on the numbering but so far I haven't found a
way to specify the bullet character.


Vic



The problem with trying to include RTF text via merge fields is that
merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data to a
Word document, used that as the data source, and used REF fields
instead of MERGEFIELD fields to insert data, some of the formatting
gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that has
any hope of working is to export the contents of each Access RTF field
to a .rtf file on disk, then insert t using an INCLUDETEXT field. This
is of course non-trivial, but I quote an earlier message that has some
ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to
insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key field(s))
in the table you are merging. So suppose you have a autonumber primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for
each
Access record, the event handler (probably MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query as
the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism,
but faced with this problem for real, I would probably avoid MailMerge
and use Access VBA code to generate each Word document in turn
(assuming you're not going for a catalog/directory), saving each RTF
field to disk as needed and inserting it directly using the relevant
Word Insert file method. However, I cannot provide you with code for
that.

Yes, it probably is something that lots of people want to do, but
there are non-trivial problems to solve when attempting this, no
matter how you encode your formatted text (e.g., you encode it using
XML, but using which vocabulary/ies?). And I don't suppose anyone on
the development side has wanted to solve it for RTF-encoded text ever
since RTF became a "legacy format", which you could argue is over a
decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 , change
fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all of
the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and inserted
Graham's bold example { REF chapter2_title \* Charformat } would
display "Whales of the Pacific" but it only displayed this as plain
text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program invokes the
mail merge and turns the document into a PDF which then gets merged
with other PDF documents to produce a final document as a PDF. So I
suppose I'd have to invoke the word macro to massage the word
document after the mail merge is completed. Would that be correct?

I don't see that bullets, indenting and font changes are supported
with switches. Are there any examples of using templates with
docvariable fields. There are about 20 merge fields that are
inserted in this document.

Would you provide a bit of guidance on where to go from here? Are
there some examples somewhere for doing this. It would seem to me to
be a quite common occurance but I'm finding limited information on
using switches and merge fields that contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of Word
field formatting switches, I think that you would have to use a
"roll-your-own" equivalent to mailmerge where in place of a mail
merge main document containing mergefields, you would use a template
containing docvariable fields and then you would run a macro that
would create a new document from that template for each record in
data source, setting the values of variables in the document to the
value of corresponding field for that record in the data source and
making use of the formatting information in the data source to apply
the required formatting.

For information on Word field formatting switches, see "Formatting
Word fields with switches" on fellow MVP Graham Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of
my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from a
database. These rtf fields contain the formatting instructions for
bolding, bullets, font settings etc. However, the problem I am
having is word does not recognize these formatting characters and
prints everything as plain text. My main document is an rtf file.

How can I get word to interpretate these instructions? I am using
Word 2002.


Thank you,

Vic
 
P

Peter Jamieson

Vic,

OK, I think it's going to be difficult to start from where you are and
achieve a reliable result.

It seems to me that there are two main considerations:
a. do you have full control over the formatting that is in the data
source?
b. even if you do, is there a way to ensure that Word honours the
formatting that you applied?

Most of the following is guesswork as I have not even attempted to
follow all the steps you are likely to be using...

As far as (a) is concerned, if you are using the Richtext control in VB6
to generate the RTF in the data source, then
c. From your previous messages it seems that the control is generating

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges

\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

d. my guess is that Word 2002 will ignore the formatting specified as

{\pntext\f1\'B7\tab}

(which is "direct formatting"), because Word 2002 is supposed to
know how to honour

{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}

which specifies bullet formatting for the list as a whole.

e. in other words, it is possible that if you could avoid generating
that {\*\...} stuff, Word would just take the bullets you provided and
insert them

However, if you are going via an intermediate Word file as my previous
posts suggested, it is possible that even if you were able to remove
that {\*\ } RTF code, Word might well re-introduce it if you
programmatically use Word Save->As to save your data source.

Finally, if you have control over what is in the database, the chances
are that you would be much better off avoiding this approach to a merge
- perhaps generating th necessary bullets by direct programming of the
word object model rather than going via mailmerge. If you do not, then
the only way is if something can be done about (b)

As for (b), it is probably a question of whether the paragraph(s)
containing the { REF memofield } field could be formatted using a
particular "listformat" that overrides anything in the RTF. I simply do
not know whether that can be done or not.


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail merge
where the both the merge source and the main document are rtf files.
For the merge source the app creates the word document with a word table
which contains the merge data from an Access database. The problem I'm
having is when the merge source contains a bulleted list, the merged
documents are formatted as 1. 2. 3. etc. instead of a bullet (.). I
have checked the merge source and the column containing the bullet list
is correctly formatted. I also tried doing the merge in word and the
results are the same as when the merge is done in my program. So my
question is how do I a merge where the source contains bulleted lists
and maintain the correct style of the bullets.

Vic



Peter Jamieson said:
Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what
you are using in the RTF, what you are using in the mail merge main
document, what results you are trying to achieve and what you are
actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

What I've found is that I can enter the bullet character using ALT 7
(.) for each item instead of setting selBullet = true per the rtf
spec and it works correctly in the merge. Also the paragraph
sequencing is not affected. Any ideas ?

Vic

Ypur best bet here is probably to avoid using automatic numbering in
the main document - although it may be possible to prevent
"interference" between the numbering in the RTF and the numbering in
the main document by specifying a named list template or some such
in the main document, that stuff is hard to tame. What you coud try
is SEQ-based numbering in the main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence,
\h to hide the result when you do that, and the \c switch to re-use
the existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the
best I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph
numbering that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so
that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of
the formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to something
else may have some sort of impact on the numbering but so far I
haven't found a way to specify the bullet character.


Vic



The problem with trying to include RTF text via merge fields is
that merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data
to a Word document, used that as the data source, and used REF
fields instead of MERGEFIELD fields to insert data, some of the
formatting gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that
has any hope of working is to export the contents of each Access
RTF field to a .rtf file on disk, then insert t using an
INCLUDETEXT field. This is of course non-trivial, but I quote an
earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to
insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key
field(s))
in the table you are merging. So suppose you have a autonumber
primary
key called k containing 1,2,3,... and your column is called mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf
for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for
each
Access record, the event handler (probably
MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the
RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the
pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column
3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query
as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge
mechanism, but faced with this problem for real, I would probably
avoid MailMerge and use Access VBA code to generate each Word
document in turn (assuming you're not going for a
catalog/directory), saving each RTF field to disk as needed and
inserting it directly using the relevant Word Insert file method.
However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do, but
there are non-trivial problems to solve when attempting this, no
matter how you encode your formatted text (e.g., you encode it
using XML, but using which vocabulary/ies?). And I don't suppose
anyone on the development side has wanted to solve it for
RTF-encoded text ever since RTF became a "legacy format", which
you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how
to implement these switches. The rtf fields are inserted in an
Access database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and
inserted Graham's bold example { REF chapter2_title \* Charformat
} would display "Whales of the Pacific" but it only displayed
this as plain text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program invokes
the mail merge and turns the document into a PDF which then gets
merged with other PDF documents to produce a final document as a
PDF. So I suppose I'd have to invoke the word macro to massage
the word document after the mail merge is completed. Would that
be correct?

I don't see that bullets, indenting and font changes are
supported with switches. Are there any examples of using
templates with docvariable fields. There are about 20 merge
fields that are inserted in this document.

Would you provide a bit of guidance on where to go from here?
Are there some examples somewhere for doing this. It would seem
to me to be a quite common occurance but I'm finding limited
information on using switches and merge fields that contain rtf
data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of
Word field formatting switches, I think that you would have to
use a "roll-your-own" equivalent to mailmerge where in place of
a mail merge main document containing mergefields, you would use
a template containing docvariable fields and then you would run
a macro that would create a new document from that template for
each record in data source, setting the values of variables in
the document to the value of corresponding field for that record
in the data source and making use of the formatting information
in the data source to apply the required formatting.

For information on Word field formatting switches, see
"Formatting Word fields with switches" on fellow MVP Graham
Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself
of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from
a database. These rtf fields contain the formatting
instructions for bolding, bullets, font settings etc. However,
the problem I am having is word does not recognize these
formatting characters and prints everything as plain text. My
main document is an rtf file.

How can I get word to interpretate these instructions? I am
using Word 2002.


Thank you,

Vic
 
V

Vic

Peter,

I think there is just an inherent problem in Word (and I've also tried Word
7) with merging a data source that contains a table with a bulleted list.
If you can just create 2 documents and the source contains a column that
includes a bulleted list and merge that into a second word document. I
have not been able to get this to work simply using the buttons on the menu
for a mail merge.


Vic




Peter Jamieson said:
Vic,

OK, I think it's going to be difficult to start from where you are and
achieve a reliable result.

It seems to me that there are two main considerations:
a. do you have full control over the formatting that is in the data
source?
b. even if you do, is there a way to ensure that Word honours the
formatting that you applied?

Most of the following is guesswork as I have not even attempted to follow
all the steps you are likely to be using...

As far as (a) is concerned, if you are using the Richtext control in VB6
to generate the RTF in the data source, then
c. From your previous messages it seems that the control is generating

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

d. my guess is that Word 2002 will ignore the formatting specified as

{\pntext\f1\'B7\tab}

(which is "direct formatting"), because Word 2002 is supposed to know
how to honour

{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}

which specifies bullet formatting for the list as a whole.

e. in other words, it is possible that if you could avoid generating that
{\*\...} stuff, Word would just take the bullets you provided and insert
them

However, if you are going via an intermediate Word file as my previous
posts suggested, it is possible that even if you were able to remove that
{\*\ } RTF code, Word might well re-introduce it if you programmatically
use Word Save->As to save your data source.

Finally, if you have control over what is in the database, the chances are
that you would be much better off avoiding this approach to a merge -
perhaps generating th necessary bullets by direct programming of the word
object model rather than going via mailmerge. If you do not, then the only
way is if something can be done about (b)

As for (b), it is probably a question of whether the paragraph(s)
containing the { REF memofield } field could be formatted using a
particular "listformat" that overrides anything in the RTF. I simply do
not know whether that can be done or not.


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail merge
where the both the merge source and the main document are rtf files. For
the merge source the app creates the word document with a word table
which contains the merge data from an Access database. The problem I'm
having is when the merge source contains a bulleted list, the merged
documents are formatted as 1. 2. 3. etc. instead of a bullet (.). I
have checked the merge source and the column containing the bullet list
is correctly formatted. I also tried doing the merge in word and the
results are the same as when the merge is done in my program. So my
question is how do I a merge where the source contains bulleted lists and
maintain the correct style of the bullets.

Vic



Peter Jamieson said:
Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what you
are using in the RTF, what you are using in the mail merge main
document, what results you are trying to achieve and what you are
actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

What I've found is that I can enter the bullet character using ALT 7
(.) for each item instead of setting selBullet = true per the rtf spec
and it works correctly in the merge. Also the paragraph sequencing is
not affected. Any ideas ?

Vic

Ypur best bet here is probably to avoid using automatic numbering in
the main document - although it may be possible to prevent
"interference" between the numbering in the RTF and the numbering in
the main document by specifying a named list template or some such in
the main document, that stuff is hard to tame. What you coud try is
SEQ-based numbering in the main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence, \h
to hide the result when you do that, and the \c switch to re-use the
existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the best
I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph numbering
that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so
that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of the
formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to something
else may have some sort of impact on the numbering but so far I
haven't found a way to specify the bullet character.


Vic



The problem with trying to include RTF text via merge fields is that
merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data to
a Word document, used that as the data source, and used REF fields
instead of MERGEFIELD fields to insert data, some of the formatting
gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that has
any hope of working is to export the contents of each Access RTF
field to a .rtf file on disk, then insert t using an INCLUDETEXT
field. This is of course non-trivial, but I quote an earlier message
that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of each
field containing rtf text to a disk file, then use INCLUDETEXT to
insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key
field(s))
in the table you are merging. So suppose you have a autonumber
primary
key called k containing 1,2,3,... and your column is called
mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf
for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge
main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for
each
Access record, the event handler (probably
MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into
the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports the
RTF
for a specified field into a file
b. create an Access query that returns the other data you want and
calls that function. Ideally the function would return the pathname
of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column 3
to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the query
as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge mechanism,
but faced with this problem for real, I would probably avoid
MailMerge and use Access VBA code to generate each Word document in
turn (assuming you're not going for a catalog/directory), saving
each RTF field to disk as needed and inserting it directly using the
relevant Word Insert file method. However, I cannot provide you with
code for that.

Yes, it probably is something that lots of people want to do, but
there are non-trivial problems to solve when attempting this, no
matter how you encode your formatted text (e.g., you encode it using
XML, but using which vocabulary/ies?). And I don't suppose anyone on
the development side has wanted to solve it for RTF-encoded text
ever since RTF became a "legacy format", which you could argue is
over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how to
implement these switches. The rtf fields are inserted in an Access
database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word, all
of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and
inserted Graham's bold example { REF chapter2_title \* Charformat }
would display "Whales of the Pacific" but it only displayed this as
plain text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program invokes
the mail merge and turns the document into a PDF which then gets
merged with other PDF documents to produce a final document as a
PDF. So I suppose I'd have to invoke the word macro to massage the
word document after the mail merge is completed. Would that be
correct?

I don't see that bullets, indenting and font changes are supported
with switches. Are there any examples of using templates with
docvariable fields. There are about 20 merge fields that are
inserted in this document.

Would you provide a bit of guidance on where to go from here? Are
there some examples somewhere for doing this. It would seem to me
to be a quite common occurance but I'm finding limited information
on using switches and merge fields that contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of
Word field formatting switches, I think that you would have to
use a "roll-your-own" equivalent to mailmerge where in place of a
mail merge main document containing mergefields, you would use a
template containing docvariable fields and then you would run a
macro that would create a new document from that template for each
record in data source, setting the values of variables in the
document to the value of corresponding field for that record in
the data source and making use of the formatting information in
the data source to apply the required formatting.

For information on Word field formatting switches, see "Formatting
Word fields with switches" on fellow MVP Graham Mayor's website
at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself of
my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via
msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from a
database. These rtf fields contain the formatting instructions
for bolding, bullets, font settings etc. However, the problem I
am having is word does not recognize these formatting characters
and prints everything as plain text. My main document is an rtf
file.

How can I get word to interpretate these instructions? I am using
Word 2002.


Thank you,

Vic
 
P

Peter Jamieson

Yes, we are back to here...

In other words, using MERGEFIELD fields loses the most formatting, using
REF fields with a Word format data source loses less formatting, using
INCLUDETEXTed RTF files generated on the fly /may/ lose less than that
(but I wouldn't count on it, because at that point you face all the
difficulties of merging two files, each of which may reference its own
set of "format definitions" (cf. styles), which may clash in various
ways). (and in that case, it may not matter /how/ you insert the RTF,
but I guess you have a better chance of controlling the outcome using
VB(A)+Word object model than MERGEFIELD/REF fields).


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

I think there is just an inherent problem in Word (and I've also tried
Word 7) with merging a data source that contains a table with a bulleted
list. If you can just create 2 documents and the source contains a
column that includes a bulleted list and merge that into a second word
document. I have not been able to get this to work simply using the
buttons on the menu for a mail merge.


Vic




Peter Jamieson said:
Vic,

OK, I think it's going to be difficult to start from where you are and
achieve a reliable result.

It seems to me that there are two main considerations:
a. do you have full control over the formatting that is in the data
source?
b. even if you do, is there a way to ensure that Word honours the
formatting that you applied?

Most of the following is guesswork as I have not even attempted to
follow all the steps you are likely to be using...

As far as (a) is concerned, if you are using the Richtext control in
VB6 to generate the RTF in the data source, then
c. From your previous messages it seems that the control is generating

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges

\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

d. my guess is that Word 2002 will ignore the formatting specified as

{\pntext\f1\'B7\tab}

(which is "direct formatting"), because Word 2002 is supposed to
know how to honour

{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}

which specifies bullet formatting for the list as a whole.

e. in other words, it is possible that if you could avoid generating
that {\*\...} stuff, Word would just take the bullets you provided and
insert them

However, if you are going via an intermediate Word file as my previous
posts suggested, it is possible that even if you were able to remove
that {\*\ } RTF code, Word might well re-introduce it if you
programmatically use Word Save->As to save your data source.

Finally, if you have control over what is in the database, the chances
are that you would be much better off avoiding this approach to a
merge - perhaps generating th necessary bullets by direct programming
of the word object model rather than going via mailmerge. If you do
not, then the only way is if something can be done about (b)

As for (b), it is probably a question of whether the paragraph(s)
containing the { REF memofield } field could be formatted using a
particular "listformat" that overrides anything in the RTF. I simply
do not know whether that can be done or not.


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail
merge where the both the merge source and the main document are rtf
files. For the merge source the app creates the word document with a
word table which contains the merge data from an Access database.
The problem I'm having is when the merge source contains a bulleted
list, the merged documents are formatted as 1. 2. 3. etc. instead of
a bullet (.). I have checked the merge source and the column
containing the bullet list is correctly formatted. I also tried
doing the merge in word and the results are the same as when the
merge is done in my program. So my question is how do I a merge
where the source contains bulleted lists and maintain the correct
style of the bullets.

Vic



Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what
you are using in the RTF, what you are using in the mail merge main
document, what results you are trying to achieve and what you are
actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

What I've found is that I can enter the bullet character using ALT
7 (.) for each item instead of setting selBullet = true per the rtf
spec and it works correctly in the merge. Also the paragraph
sequencing is not affected. Any ideas ?

Vic

Ypur best bet here is probably to avoid using automatic numbering
in the main document - although it may be possible to prevent
"interference" between the numbering in the RTF and the numbering
in the main document by specifying a named list template or some
such in the main document, that stuff is hard to tame. What you
coud try is SEQ-based numbering in the main document, e.g. where
you use

{ SEQ } fields, the \r switch to reset numbering for each
sequence, \h to hide the result when you do that, and the \c
switch to re-use the existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the
best I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph
numbering that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes
so that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of
the formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to
something else may have some sort of impact on the numbering but
so far I haven't found a way to specify the bullet character.


Vic



message The problem with trying to include RTF text via merge fields is
that merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data
to a Word document, used that as the data source, and used REF
fields instead of MERGEFIELD fields to insert data, some of the
formatting gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that
has any hope of working is to export the contents of each Access
RTF field to a .rtf file on disk, then insert t using an
INCLUDETEXT field. This is of course non-trivial, but I quote an
earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of
each
field containing rtf text to a disk file, then use INCLUDETEXT
to insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key
field(s))
in the table you are merging. So suppose you have a autonumber
primary
key called k containing 1,2,3,... and your column is called
mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the
rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge
main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events:
for each
Access record, the event handler (probably
MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it
into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records you
could consider the following:
a. create an Access User-defined (VBA) function that exports
the RTF
for a specified field into a file
b. create an Access query that returns the other data you want
and
calls that function. Ideally the function would return the
pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in
column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as "filepath"

Then create your Word mailmerge main document and set up the
query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge
mechanism, but faced with this problem for real, I would
probably avoid MailMerge and use Access VBA code to generate
each Word document in turn (assuming you're not going for a
catalog/directory), saving each RTF field to disk as needed and
inserting it directly using the relevant Word Insert file
method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do,
but there are non-trivial problems to solve when attempting
this, no matter how you encode your formatted text (e.g., you
encode it using XML, but using which vocabulary/ies?). And I
don't suppose anyone on the development side has wanted to solve
it for RTF-encoded text ever since RTF became a "legacy format",
which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how
to implement these switches. The rtf fields are inserted in an
Access database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS
Sans Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change
these text boxes so that we can \b set strings of words to
BOLD\b0 , change fonts, do underlines and we also need to do
bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and
inserted Graham's bold example { REF chapter2_title \*
Charformat } would display "Whales of the Pacific" but it only
displayed this as plain text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program
invokes the mail merge and turns the document into a PDF which
then gets merged with other PDF documents to produce a final
document as a PDF. So I suppose I'd have to invoke the word
macro to massage the word document after the mail merge is
completed. Would that be correct?

I don't see that bullets, indenting and font changes are
supported with switches. Are there any examples of using
templates with docvariable fields. There are about 20 merge
fields that are inserted in this document.

Would you provide a bit of guidance on where to go from here?
Are there some examples somewhere for doing this. It would
seem to me to be a quite common occurance but I'm finding
limited information on using switches and merge fields that
contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of
Word field formatting switches, I think that you would have
to use a "roll-your-own" equivalent to mailmerge where in
place of a mail merge main document containing mergefields,
you would use a template containing docvariable fields and
then you would run a macro that would create a new document
from that template for each record in data source, setting the
values of variables in the document to the value of
corresponding field for that record in the data source and
making use of the formatting information in the data source to
apply the required formatting.

For information on Word field formatting switches, see
"Formatting Word fields with switches" on fellow MVP Graham
Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail
yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via
msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields
from a database. These rtf fields contain the formatting
instructions for bolding, bullets, font settings etc.
However, the problem I am having is word does not recognize
these formatting characters and prints everything as plain
text. My main document is an rtf file.

How can I get word to interpretate these instructions? I am
using Word 2002.


Thank you,

Vic
 
V

Vic

Peter,

Well, I have it pretty much working using Word Tables and I'm using Ref
fields. I'm able to specify bold, underline, italics and I'm able to change
fonts and font sizes. These will all merge fine from the data source. The
only problem is that bullet lists causes a problem because it changes the
bullet character to 1 - 2 - 3 etc. and causes problems in the paragraph
sequencing. What I'm doing now to get around this is when a bulleted list
is setup on the merge source I am inserting ALT 7 (.) instead setting
selBullet to true per the rtf spec. While on the VB screen it shows as a
heavy veritcal mark, it comes through as a . on the merged document.

Vic



Peter Jamieson said:
Yes, we are back to here...

In other words, using MERGEFIELD fields loses the most formatting, using
REF fields with a Word format data source loses less formatting, using
INCLUDETEXTed RTF files generated on the fly /may/ lose less than that
(but I wouldn't count on it, because at that point you face all the
difficulties of merging two files, each of which may reference its own set
of "format definitions" (cf. styles), which may clash in various ways).
(and in that case, it may not matter /how/ you insert the RTF, but I guess
you have a better chance of controlling the outcome using VB(A)+Word
object model than MERGEFIELD/REF fields).


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

I think there is just an inherent problem in Word (and I've also tried
Word 7) with merging a data source that contains a table with a bulleted
list. If you can just create 2 documents and the source contains a column
that includes a bulleted list and merge that into a second word document.
I have not been able to get this to work simply using the buttons on the
menu for a mail merge.


Vic




Peter Jamieson said:
Vic,

OK, I think it's going to be difficult to start from where you are and
achieve a reliable result.

It seems to me that there are two main considerations:
a. do you have full control over the formatting that is in the data
source?
b. even if you do, is there a way to ensure that Word honours the
formatting that you applied?

Most of the following is guesswork as I have not even attempted to
follow all the steps you are likely to be using...

As far as (a) is concerned, if you are using the Richtext control in VB6
to generate the RTF in the data source, then
c. From your previous messages it seems that the control is generating

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

d. my guess is that Word 2002 will ignore the formatting specified as

{\pntext\f1\'B7\tab}

(which is "direct formatting"), because Word 2002 is supposed to
know how to honour

{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}

which specifies bullet formatting for the list as a whole.

e. in other words, it is possible that if you could avoid generating
that {\*\...} stuff, Word would just take the bullets you provided and
insert them

However, if you are going via an intermediate Word file as my previous
posts suggested, it is possible that even if you were able to remove
that {\*\ } RTF code, Word might well re-introduce it if you
programmatically use Word Save->As to save your data source.

Finally, if you have control over what is in the database, the chances
are that you would be much better off avoiding this approach to a
merge - perhaps generating th necessary bullets by direct programming of
the word object model rather than going via mailmerge. If you do not,
then the only way is if something can be done about (b)

As for (b), it is probably a question of whether the paragraph(s)
containing the { REF memofield } field could be formatted using a
particular "listformat" that overrides anything in the RTF. I simply do
not know whether that can be done or not.


Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail merge
where the both the merge source and the main document are rtf files.
For the merge source the app creates the word document with a word
table which contains the merge data from an Access database. The
problem I'm having is when the merge source contains a bulleted list,
the merged documents are formatted as 1. 2. 3. etc. instead of a
bullet (.). I have checked the merge source and the column containing
the bullet list is correctly formatted. I also tried doing the merge
in word and the results are the same as when the merge is done in my
program. So my question is how do I a merge where the source contains
bulleted lists and maintain the correct style of the bullets.

Vic



Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what
you are using in the RTF, what you are using in the mail merge main
document, what results you are trying to achieve and what you are
actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

What I've found is that I can enter the bullet character using ALT 7
(.) for each item instead of setting selBullet = true per the rtf
spec and it works correctly in the merge. Also the paragraph
sequencing is not affected. Any ideas ?

Vic

Ypur best bet here is probably to avoid using automatic numbering in
the main document - although it may be possible to prevent
"interference" between the numbering in the RTF and the numbering in
the main document by specifying a named list template or some such
in the main document, that stuff is hard to tame. What you coud try
is SEQ-based numbering in the main document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each sequence,
\h to hide the result when you do that, and the \c switch to re-use
the existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the
best I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph
numbering that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes so
that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of
the formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to something
else may have some sort of impact on the numbering but so far I
haven't found a way to specify the bullet character.


Vic



The problem with trying to include RTF text via merge fields is
that merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data
to a Word document, used that as the data source, and used REF
fields instead of MERGEFIELD fields to insert data, some of the
formatting gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that
has any hope of working is to export the contents of each Access
RTF field to a .rtf file on disk, then insert t using an
INCLUDETEXT field. This is of course non-trivial, but I quote an
earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of
each
field containing rtf text to a disk file, then use INCLUDETEXT to
insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key
field(s))
in the table you are merging. So suppose you have a autonumber
primary
key called k containing 1,2,3,... and your column is called
mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the rtf
for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge
main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events: for
each
Access record, the event handler (probably
MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it into
the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records
you
could consider the following:
a. create an Access User-defined (VBA) function that exports the
RTF
for a specified field into a file
b. create an Access query that returns the other data you want
and
calls that function. Ideally the function would return the
pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection
method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in column
3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as
"filepath"

Then create your Word mailmerge main document and set up the query
as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge
mechanism, but faced with this problem for real, I would probably
avoid MailMerge and use Access VBA code to generate each Word
document in turn (assuming you're not going for a
catalog/directory), saving each RTF field to disk as needed and
inserting it directly using the relevant Word Insert file method.
However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do, but
there are non-trivial problems to solve when attempting this, no
matter how you encode your formatted text (e.g., you encode it
using XML, but using which vocabulary/ies?). And I don't suppose
anyone on the development side has wanted to solve it for
RTF-encoded text ever since RTF became a "legacy format", which
you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how
to implement these switches. The rtf fields are inserted in an
Access database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and
inserted Graham's bold example { REF chapter2_title \*
Charformat } would display "Whales of the Pacific" but it only
displayed this as plain text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program invokes
the mail merge and turns the document into a PDF which then gets
merged with other PDF documents to produce a final document as a
PDF. So I suppose I'd have to invoke the word macro to massage
the word document after the mail merge is completed. Would that
be correct?

I don't see that bullets, indenting and font changes are
supported with switches. Are there any examples of using
templates with docvariable fields. There are about 20 merge
fields that are inserted in this document.

Would you provide a bit of guidance on where to go from here?
Are there some examples somewhere for doing this. It would seem
to me to be a quite common occurance but I'm finding limited
information on using switches and merge fields that contain rtf
data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of
Word field formatting switches, I think that you would have to
use a "roll-your-own" equivalent to mailmerge where in place of
a mail merge main document containing mergefields, you would use
a template containing docvariable fields and then you would run
a macro that would create a new document from that template for
each record in data source, setting the values of variables in
the document to the value of corresponding field for that record
in the data source and making use of the formatting information
in the data source to apply the required formatting.

For information on Word field formatting switches, see
"Formatting Word fields with switches" on fellow MVP Graham
Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail yourself
of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via
msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields from
a database. These rtf fields contain the formatting
instructions for bolding, bullets, font settings etc. However,
the problem I am having is word does not recognize these
formatting characters and prints everything as plain text. My
main document is an rtf file.

How can I get word to interpretate these instructions? I am
using Word 2002.


Thank you,

Vic
 
P

Peter Jamieson

Unfortunately a miss can be as good as a mile in this area.

Can you spell out at what point you are making the Alt-7 change and
where you are doing it? The thing is that setting selBullet to true is
something you would set in the Richtext editor control's properties -
selBullet isn't (AFAIK) something in the RTF spec. What I'm interested
in is
a. whether in fact by using Alt-7 you are inserting a bullet character
(whereas a bulleted list does not actually have a bullet character in
the RTF for the paragraph)
b. what the resulting RTF is in each case.
c. what your options are with regard to generating/re-using the RTF?
e.g.,
- if you are generating it in the first place, can it usefully be
generated in a different way?
- would trying to detect bulleted paragraph paragraphs in the rtf
and "fixing" them by inserting a bullet character instead, at some point
between the data source and the merge operation, be an option?


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

Well, I have it pretty much working using Word Tables and I'm using Ref
fields. I'm able to specify bold, underline, italics and I'm able to
change fonts and font sizes. These will all merge fine from the data
source. The only problem is that bullet lists causes a problem because
it changes the bullet character to 1 - 2 - 3 etc. and causes problems in
the paragraph sequencing. What I'm doing now to get around this is when
a bulleted list is setup on the merge source I am inserting ALT 7 (.)
instead setting selBullet to true per the rtf spec. While on the VB
screen it shows as a heavy veritcal mark, it comes through as a . on the
merged document.

Vic



Peter Jamieson said:
Yes, we are back to here...
The problem with trying to include RTF text via merge fields is
that merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data
to a Word document, used that as the data source, and used REF
fields instead of MERGEFIELD fields to insert data, some of the
formatting gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that
has any hope of working is to export the contents of each Access
RTF field to a .rtf file on disk, then insert t using an
INCLUDETEXT field. This is of course non-trivial, but I quote an
earlier message that has some ideas...

In other words, using MERGEFIELD fields loses the most formatting,
using REF fields with a Word format data source loses less formatting,
using INCLUDETEXTed RTF files generated on the fly /may/ lose less
than that (but I wouldn't count on it, because at that point you face
all the difficulties of merging two files, each of which may reference
its own set of "format definitions" (cf. styles), which may clash in
various ways). (and in that case, it may not matter /how/ you insert
the RTF, but I guess you have a better chance of controlling the
outcome using VB(A)+Word object model than MERGEFIELD/REF fields).


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

I think there is just an inherent problem in Word (and I've also
tried Word 7) with merging a data source that contains a table with a
bulleted list. If you can just create 2 documents and the source
contains a column that includes a bulleted list and merge that into a
second word document. I have not been able to get this to work simply
using the buttons on the menu for a mail merge.


Vic




Vic,

OK, I think it's going to be difficult to start from where you are
and achieve a reliable result.

It seems to me that there are two main considerations:
a. do you have full control over the formatting that is in the data
source?
b. even if you do, is there a way to ensure that Word honours the
formatting that you applied?

Most of the following is guesswork as I have not even attempted to
follow all the steps you are likely to be using...

As far as (a) is concerned, if you are using the Richtext control in
VB6 to generate the RTF in the data source, then
c. From your previous messages it seems that the control is generating

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges

\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

d. my guess is that Word 2002 will ignore the formatting specified as

{\pntext\f1\'B7\tab}

(which is "direct formatting"), because Word 2002 is supposed to
know how to honour

{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}

which specifies bullet formatting for the list as a whole.

e. in other words, it is possible that if you could avoid
generating that {\*\...} stuff, Word would just take the bullets you
provided and insert them

However, if you are going via an intermediate Word file as my
previous posts suggested, it is possible that even if you were able
to remove that {\*\ } RTF code, Word might well re-introduce it if
you programmatically use Word Save->As to save your data source.

Finally, if you have control over what is in the database, the
chances are that you would be much better off avoiding this approach
to a merge - perhaps generating th necessary bullets by direct
programming of the word object model rather than going via
mailmerge. If you do not, then the only way is if something can be
done about (b)

As for (b), it is probably a question of whether the paragraph(s)
containing the { REF memofield } field could be formatted using a
particular "listformat" that overrides anything in the RTF. I simply
do not know whether that can be done or not.


Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail
merge where the both the merge source and the main document are rtf
files. For the merge source the app creates the word document with
a word table which contains the merge data from an Access
database. The problem I'm having is when the merge source contains
a bulleted list, the merged documents are formatted as 1. 2. 3.
etc. instead of a bullet (.). I have checked the merge source and
the column containing the bullet list is correctly formatted. I
also tried doing the merge in word and the results are the same as
when the merge is done in my program. So my question is how do I a
merge where the source contains bulleted lists and maintain the
correct style of the bullets.

Vic



Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out
what you are using in the RTF, what you are using in the mail
merge main document, what results you are trying to achieve and
what you are actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

What I've found is that I can enter the bullet character using
ALT 7 (.) for each item instead of setting selBullet = true per
the rtf spec and it works correctly in the merge. Also the
paragraph sequencing is not affected. Any ideas ?

Vic

message Ypur best bet here is probably to avoid using automatic
numbering in the main document - although it may be possible to
prevent "interference" between the numbering in the RTF and the
numbering in the main document by specifying a named list
template or some such in the main document, that stuff is hard
to tame. What you coud try is SEQ-based numbering in the main
document, e.g. where you use

{ SEQ } fields, the \r switch to reset numbering for each
sequence, \h to hide the result when you do that, and the \c
switch to re-use the existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's
the best I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph
numbering that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes
so that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all
of the formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot
the document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to
something else may have some sort of impact on the numbering
but so far I haven't found a way to specify the bullet character.


Vic



message The problem with trying to include RTF text via merge fields
is that merge fields only insert character data, with no
formatting information from the data source. If you copied
your Access data to a Word document, used that as the data
source, and used REF fields instead of MERGEFIELD fields to
insert data, some of the formatting gets through, but it's all
rather arbitrary.

The only way I know to get the RTF text from Access to Word
that has any hope of working is to export the contents of each
Access RTF field to a .rtf file on disk, then insert t using
an INCLUDETEXT field. This is of course non-trivial, but I
quote an earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content
of each
field containing rtf text to a disk file, then use INCLUDETEXT
to insert it.

Typically you would need to export the text to a filename that is
somehow related to a unique identifier (e.g. the primary key
field(s))
in the table you are merging. So suppose you have a autonumber
primary
key called k containing 1,2,3,... and your column is called
mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the
rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail
merge main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events:
for each
Access record, the event handler (probably
MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it
into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of
records you
could consider the following:
a. create an Access User-defined (VBA) function that exports
the RTF
for a specified field into a file
b. create an Access query that returns the other data you
want and
calls that function. Ideally the function would return the
pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection
method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the
necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in
column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as
"filepath"

Then create your Word mailmerge main document and set up the
query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge
mechanism, but faced with this problem for real, I would
probably avoid MailMerge and use Access VBA code to generate
each Word document in turn (assuming you're not going for a
catalog/directory), saving each RTF field to disk as needed
and inserting it directly using the relevant Word Insert file
method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do,
but there are non-trivial problems to solve when attempting
this, no matter how you encode your formatted text (e.g., you
encode it using XML, but using which vocabulary/ies?). And I
don't suppose anyone on the development side has wanted to
solve it for RTF-encoded text ever since RTF became a "legacy
format", which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding
how to implement these switches. The rtf fields are inserted
in an Access database using a VB program and contain data
such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS
Sans Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change
these text boxes so that we can \b set strings of words to
BOLD\b0 , change fonts, do underlines and we also need to do
bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into
word, all of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are
these switches implemented? I tried as a test to press ctl
F9 and inserted Graham's bold example { REF chapter2_title \*
Charformat } would display "Whales of the Pacific" but it
only displayed this as plain text without formatting.

I need to be able to have this done programmatically so I
would assume I'd need some sort of word macro. The VB
program invokes the mail merge and turns the document into a
PDF which then gets merged with other PDF documents to
produce a final document as a PDF. So I suppose I'd have to
invoke the word macro to massage the word document after the
mail merge is completed. Would that be correct?

I don't see that bullets, indenting and font changes are
supported with switches. Are there any examples of using
templates with docvariable fields. There are about 20 merge
fields that are inserted in this document.

Would you provide a bit of guidance on where to go from here?
Are there some examples somewhere for doing this. It would
seem to me to be a quite common occurance but I'm finding
limited information on using switches and merge fields that
contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use
of Word field formatting switches, I think that you would
have to use a "roll-your-own" equivalent to mailmerge where
in place of a mail merge main document containing
mergefields, you would use a template containing docvariable
fields and then you would run a macro that would create a
new document from that template for each record in data
source, setting the values of variables in the document to
the value of corresponding field for that record in the data
source and making use of the formatting information in the
data source to apply the required formatting.

For information on Word field formatting switches, see
"Formatting Word fields with switches" on fellow MVP Graham
Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail
yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via
msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields
from a database. These rtf fields contain the formatting
instructions for bolding, bullets, font settings etc.
However, the problem I am having is word does not recognize
these formatting characters and prints everything as plain
text. My main document is an rtf file.

How can I get word to interpretate these instructions? I am
using Word 2002.


Thank you,

Vic
 
V

Vic

Peter,

OK - I understand and I figured out why the bullet character was incorrect.
It seems the problem is that I need to set a font before inserting the
bullet character.

I started out thinking I could have a routine that would massage the rtf and
fix whatever was causing the problem. I could never get this to work so my
solution now is to use Dev Ashish's MySendkeys code and insert a bullet
character when setting up a bullet list. The user interface looks the same
so when bullets are turned on it simply inserts a bullet character each time
the enter key is pressed. Pressing the bullet list button turns it off.

I believe this is a problem with all versions of Word because I have not
been able to setup a mail merge in Word and use another Word Document
containing a table that contains bulleted lists. So my work-around is now
working just fine which contains all of the functionality that I need for
this application.

Vic




Peter Jamieson said:
Unfortunately a miss can be as good as a mile in this area.

Can you spell out at what point you are making the Alt-7 change and where
you are doing it? The thing is that setting selBullet to true is something
you would set in the Richtext editor control's properties - selBullet
isn't (AFAIK) something in the RTF spec. What I'm interested in is
a. whether in fact by using Alt-7 you are inserting a bullet character
(whereas a bulleted list does not actually have a bullet character in the
RTF for the paragraph)
b. what the resulting RTF is in each case.
c. what your options are with regard to generating/re-using the RTF?
e.g.,
- if you are generating it in the first place, can it usefully be
generated in a different way?
- would trying to detect bulleted paragraph paragraphs in the rtf and
"fixing" them by inserting a bullet character instead, at some point
between the data source and the merge operation, be an option?


Peter Jamieson

http://tips.pjmsn.me.uk
Peter,

Well, I have it pretty much working using Word Tables and I'm using Ref
fields. I'm able to specify bold, underline, italics and I'm able to
change fonts and font sizes. These will all merge fine from the data
source. The only problem is that bullet lists causes a problem because
it changes the bullet character to 1 - 2 - 3 etc. and causes problems in
the paragraph sequencing. What I'm doing now to get around this is when
a bulleted list is setup on the merge source I am inserting ALT 7 (.)
instead setting selBullet to true per the rtf spec. While on the VB
screen it shows as a heavy veritcal mark, it comes through as a . on the
merged document.

Vic



Peter Jamieson said:
Yes, we are back to here...

The problem with trying to include RTF text via merge fields is
that merge fields only insert character data, with no
formatting
information from the data source. If you copied your Access
data
to a Word document, used that as the data source, and used REF
fields instead of MERGEFIELD fields to insert data, some of the
formatting gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word
that
has any hope of working is to export the contents of each
Access
RTF field to a .rtf file on disk, then insert t using an
INCLUDETEXT field. This is of course non-trivial, but I quote
an
earlier message that has some ideas...

In other words, using MERGEFIELD fields loses the most formatting, using
REF fields with a Word format data source loses less formatting, using
INCLUDETEXTed RTF files generated on the fly /may/ lose less than that
(but I wouldn't count on it, because at that point you face all the
difficulties of merging two files, each of which may reference its own
set of "format definitions" (cf. styles), which may clash in various
ways). (and in that case, it may not matter /how/ you insert the RTF,
but I guess you have a better chance of controlling the outcome using
VB(A)+Word object model than MERGEFIELD/REF fields).


Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

I think there is just an inherent problem in Word (and I've also tried
Word 7) with merging a data source that contains a table with a
bulleted list. If you can just create 2 documents and the source
contains a column that includes a bulleted list and merge that into a
second word document. I have not been able to get this to work simply
using the buttons on the menu for a mail merge.


Vic




Vic,

OK, I think it's going to be difficult to start from where you are and
achieve a reliable result.

It seems to me that there are two main considerations:
a. do you have full control over the formatting that is in the data
source?
b. even if you do, is there a way to ensure that Word honours the
formatting that you applied?

Most of the following is guesswork as I have not even attempted to
follow all the steps you are likely to be using...

As far as (a) is concerned, if you are using the Richtext control in
VB6 to generate the RTF in the data source, then
c. From your previous messages it seems that the control is
generating

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS Sans
Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change these
text boxes so that we can \b set strings of words to BOLD\b0 ,
change fonts, do underlines and we also need to do bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

d. my guess is that Word 2002 will ignore the formatting specified as

{\pntext\f1\'B7\tab}

(which is "direct formatting"), because Word 2002 is supposed to
know how to honour

{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}

which specifies bullet formatting for the list as a whole.

e. in other words, it is possible that if you could avoid generating
that {\*\...} stuff, Word would just take the bullets you provided and
insert them

However, if you are going via an intermediate Word file as my previous
posts suggested, it is possible that even if you were able to remove
that {\*\ } RTF code, Word might well re-introduce it if you
programmatically use Word Save->As to save your data source.

Finally, if you have control over what is in the database, the chances
are that you would be much better off avoiding this approach to a
merge - perhaps generating th necessary bullets by direct programming
of the word object model rather than going via mailmerge. If you do
not, then the only way is if something can be done about (b)

As for (b), it is probably a question of whether the paragraph(s)
containing the { REF memofield } field could be formatted using a
particular "listformat" that overrides anything in the RTF. I simply
do not know whether that can be done or not.


Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

OK - Here's what I'm doing. I am using VB6 program to do a mail
merge where the both the merge source and the main document are rtf
files. For the merge source the app creates the word document with a
word table which contains the merge data from an Access database.
The problem I'm having is when the merge source contains a bulleted
list, the merged documents are formatted as 1. 2. 3. etc. instead of
a bullet (.). I have checked the merge source and the column
containing the bullet list is correctly formatted. I also tried
doing the merge in word and the results are the same as when the
merge is done in my program. So my question is how do I a merge
where the source contains bulleted lists and maintain the correct
style of the bullets.

Vic



Vic,

For one thing, you are probably now way ahead of me!

Also - I've rather lost the plot here, but if you can spell out what
you are using in the RTF, what you are using in the mail merge main
document, what results you are trying to achieve and what you are
actually getting, I can certainly have another look.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Peter,

What I've found is that I can enter the bullet character using ALT
7 (.) for each item instead of setting selBullet = true per the rtf
spec and it works correctly in the merge. Also the paragraph
sequencing is not affected. Any ideas ?

Vic

Ypur best bet here is probably to avoid using automatic numbering
in the main document - although it may be possible to prevent
"interference" between the numbering in the RTF and the numbering
in the main document by specifying a named list template or some
such in the main document, that stuff is hard to tame. What you
coud try is SEQ-based numbering in the main document, e.g. where
you use

{ SEQ } fields, the \r switch to reset numbering for each
sequence, \h to hide the result when you do that, and the \c
switch to re-use the existing number, e.g.

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

{ SEQ level2 \r0 \h }{ SEQ level1 }.
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }
{ SEQ level1 \c }.{ SEQ level2 }

to give you a sequence like

1.
1.1
1.2
1.3

2.
2.1
2.2
2.3

I don't know if that approach fits your requirement, but it's the
best I can do right now.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Another thing the bullets cause is to change the paragraph
numbering that follows the bulleted list i.e.

(The following data is from the merge source)
Text Box Facility Info: OK - We need to change these text boxes
so that we can set strings of words to
BOLD, change fonts, do underlines and we also need to do bullets:
This all seems to work but when it gets merged into word, all of
the formatting is lost. No bolding, underlines,
bullets etc.

1. Apples
2. Oranges
3. Bananas
This seems to be changing the paragraph number in the rest ot the
document

(the main document starts here)
INTRODUCTION
3.1. PURPOSE


The 3.1 PURPOSE should be 1.1. After the merge it became 3.1.
Perhaps if I could get the bullet character to change to
something else may have some sort of impact on the numbering but
so far I haven't found a way to specify the bullet character.


Vic



message The problem with trying to include RTF text via merge fields is
that merge fields only insert character data, with no formatting
information from the data source. If you copied your Access data
to a Word document, used that as the data source, and used REF
fields instead of MERGEFIELD fields to insert data, some of the
formatting gets through, but it's all rather arbitrary.

The only way I know to get the RTF text from Access to Word that
has any hope of working is to export the contents of each Access
RTF field to a .rtf file on disk, then insert t using an
INCLUDETEXT field. This is of course non-trivial, but I quote an
earlier message that has some ideas...

----------------------
Using Mailmerge without code, you have to export the content of
each
field containing rtf text to a disk file, then use INCLUDETEXT
to insert it.

Typically you would need to export the text to a filename that
is
somehow related to a unique identifier (e.g. the primary key
field(s))
in the table you are merging. So suppose you have a autonumber
primary
key called k containing 1,2,3,... and your column is called
mycolumn,
you might create a file called c:\myrtfs\mycolumn1.rtf for the
rtf for
mycolumn in record 1

Then you would use a nested INCLUDETEXT field in your mail merge
main
document, e.g.

{ INCLUDETEXT "c:\\myrtfs\\mycolumn{ MERGEFIELD k }" }

Alternatively, you might be able to use Word MailMerge events:
for each
Access record, the event handler (probably
MailMergeBeforeRecordMerge)
would need to use e.g. ADO to export the RTF, then insert it
into the
document. I do not know how feasible that is.

I can't say I recommend this, but for a small number of records
you
could consider the following:
a. create an Access User-defined (VBA) function that exports
the RTF
for a specified field into a file
b. create an Access query that returns the other data you want
and
calls that function. Ideally the function would return the
pathname of
the file it created, with backslashes doubled up.
c. In Word, connect to that query using the DDE connection
method
(there is another possibility)

Here's a how-to I wrote in 2001, slightly modified:

Suppose the function
is called rtfx
b. create a query that has columns k, r and rtfx
c. use the query as the datasource for your merge.

For example, the following Access function should do the
necessary

Function rtfx(n As Integer, s As String) As String
dim r as String
Dim t As String * 1

' Generate the file name you want
rtfx = "c:\myrtfs\rtf" & Trim(Str(n)) & ".rtf"
' and return a doubled-backslash version ias the function result
rtfx = "c:\\myrtfs\\rtf" & Trim(Str(n)) & ".rtf"

Open r For Binary As 1 Len = 1
For i = 1 To Len(s)
t = Mid(s, i, 1)
Put #1, i, t
Next
Close 1

End Function

Then your query might have columns

k, r, and rtfx(k,r)

e.g.

Run the query in Access and Access will modify the text in
column 3 to
something like
Expr1: rtfx([k],[r])

You can then change Expr1 to a more helpful name such as
"filepath"

Then create your Word mailmerge main document and set up the
query as the
data source - Word should offer k,r and filepath as the possible
mergefields.

Your INCLUDETEXT field would then need to look like

{ INCLUDETEXT "{ MERGEFIELD filepath }" }

Worth a try?
----------------------

Of course, that assumes that you are using the MailMerge
mechanism, but faced with this problem for real, I would
probably avoid MailMerge and use Access VBA code to generate
each Word document in turn (assuming you're not going for a
catalog/directory), saving each RTF field to disk as needed and
inserting it directly using the relevant Word Insert file
method. However, I cannot provide you with code for that.

Yes, it probably is something that lots of people want to do,
but there are non-trivial problems to solve when attempting
this, no matter how you encode your formatted text (e.g., you
encode it using XML, but using which vocabulary/ies?). And I
don't suppose anyone on the development side has wanted to solve
it for RTF-encoded text ever since RTF became a "legacy format",
which you could argue is over a decade ago.

Peter Jamieson

http://tips.pjmsn.me.uk

Vic wrote:
Doug,

Thanks for the reply but I'm having a problem understanding how
to implement these switches. The rtf fields are inserted in an
Access database using a VB program and contain data such as:

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\fnil\fcharset0 MS
Sans Serif;}{\f1\fnil\fcharset2 Symbol;}}
\viewkind4\uc1\pard\lang1033\f0\fs17 OK - We need to change
these text boxes so that we can \b set strings of words to
BOLD\b0 , change fonts, do underlines and we also need to do
bullets:
\par
\par
\pard{\pntext\f1\'B7\tab}{\*\pn\pnlvlblt\pnf1\pnindent0{\pntxtb\'B7}}Oranges
\par {\pntext\f1\'B7\tab}Apples
\par {\pntext\f1\'B7\tab}Pears
\par \pard
\par This all seems to work but when it gets merged into word,
all of the formatting characters show as text!
\par
\par
\par }

It appears to me from the use of these switches I can use
/*charformat to bold, underline and italics. So where are these
switches implemented? I tried as a test to press ctl F9 and
inserted Graham's bold example { REF chapter2_title \*
Charformat } would display "Whales of the Pacific" but it only
displayed this as plain text without formatting.

I need to be able to have this done programmatically so I would
assume I'd need some sort of word macro. The VB program
invokes the mail merge and turns the document into a PDF which
then gets merged with other PDF documents to produce a final
document as a PDF. So I suppose I'd have to invoke the word
macro to massage the word document after the mail merge is
completed. Would that be correct?

I don't see that bullets, indenting and font changes are
supported with switches. Are there any examples of using
templates with docvariable fields. There are about 20 merge
fields that are inserted in this document.

Would you provide a bit of guidance on where to go from here?
Are there some examples somewhere for doing this. It would
seem to me to be a quite common occurance but I'm finding
limited information on using switches and merge fields that
contain rtf data.

Vic






"Doug Robbins - Word MVP on news.microsoft.com"
For any more than the formatting that can be applied by use of
Word field formatting switches, I think that you would have
to use a "roll-your-own" equivalent to mailmerge where in
place of a mail merge main document containing mergefields,
you would use a template containing docvariable fields and
then you would run a macro that would create a new document
from that template for each record in data source, setting the
values of variables in the document to the value of
corresponding field for that record in the data source and
making use of the formatting information in the data source to
apply the required formatting.

For information on Word field formatting switches, see
"Formatting Word fields with switches" on fellow MVP Graham
Mayor's website at:

http://www.gmayor.com/formatting_word_fields.htm


--
Hope this helps.

Please reply to the newsgroup unless you wish to avail
yourself of my
services on a paid consulting basis.

Doug Robbins - Word MVP, originally posted via
msnews.microsoft.com

Hello,

I am trying to setup a mail merge and use rtf text fields
from a database. These rtf fields contain the formatting
instructions for bolding, bullets, font settings etc.
However, the problem I am having is word does not recognize
these formatting characters and prints everything as plain
text. My main document is an rtf file.

How can I get word to interpretate these instructions? I am
using Word 2002.


Thank you,

Vic
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top