8
Using ColdFusion to Generate Multiple Word Documents (Batch Creation)
ColdFusion, Web development, Work
Tags: ColdFusion, Word
Share
UPDATE: Now includes line returns. The example’s form has been modified with additional fields so adding line returns to the Word doc could be shown. The zip has all the new files.
As a continuation (and request from Simon) to the Using ColdFusion to Generate a Custom Word Document post, here is an example of creating multiple Word documents in a batch-like manner.
Create the Word template as an RTF (.rtf) document with placeholders in the same manner as the previous post. Collect the data or have it spit out from a database.
Here’s where the code changes for multiple file generation. The number of files to be created is looped over, a dynamic name is generated for the new file, the output of the Replace functions is written to the new file, and the file is renamed with a .doc extension.
Also, a cfloop was added for the studentname fields so a line return (\par) could be appended on.
<cfset pathToRTF = GetDirectoryFromPath(GetCurrentTemplatePath()) & "homeworkpass.rtf" />
<cfloop from="1" to="10" index="i">
<cfset studentnames = "" />
<cfloop from="1" to="3" index="num">
<cfset studentnames = studentnames & " " & form["studentname" & num] & " \par " />
</cfloop>
<cflock name="homeworkpass" type="exclusive" timeout="30">
<cfif form.cfversion EQ "pre8">
<!--- CFMX7 or earlier --->
<cffile action="read" file="#pathToRTF#" variable="rtf">
<cfelse>
<!--- CF8 or later --->
<cfset rtf = FileRead(pathToRTF) />
</cfif>
<cfset rtf = Replace(rtf,"%expirydate%",form.expirydate) />
<cfset rtf = Replace(rtf,"%points%",form.points) />
<cfset rtf = Replace(rtf,"%studentname%",studentnames) />
<cfset rtf = Replace(rtf,"%subject%",form.subject) />
<cfset rtf = Replace(rtf,"%datereceived%",form.datereceived) />
</cflock>
<cfset rtfFile = GetDirectoryFromPath(GetCurrentTemplatePath()) & "classPasses/" & "homeworkpass" & i & ".rtf" />
<cfset docFile = GetDirectoryFromPath(GetCurrentTemplatePath()) & "classPasses/" & "homeworkpass" & i & ".doc" />
<cfif form.cfversion EQ "pre8">
<!--- CFMX7 or earlier --->
<cffile action="write" file="#rtfFile#" output="#rtf#" />
<cfelse>
<!--- CF8 or later --->
<cfset FileWrite(rtfFile,rtf) />
</cfif>
<cffile action="rename" source="#rtfFile#" destination="#docFile#" />
</cfloop>
<p>Passes Generated</p>
<cfabort>
This should get you pointed in the right direction for creating multiple Word documents. And, again, there is a choice of ColdFusion 8 or an earlier version just to show the new, simpler functions available in CF8.
If this post helped you out, please consider donating to help pay the hosting fees. 100% of the donations go to the web host.
Further Reading:
4 Comments for Using ColdFusion to Generate Multiple Word Documents (Batch Creation)
[...] As a continuation (and request from Simon) to the Using ColdFusion to Generate a Custom Word Document post, here is an example of creating multiple Word documents in a batch-like manner. Create the Word template as an RTF (.rtf) document with placeholders in the same manner as the previous post . Original post: Using ColdFusion to Generate Multiple Word Documents (Batch Creation) [...]
Hi Jen,
Thank you very much for the code and all your help! Much appreciated.
Simon
Hi Jen,
I have been playing with your Word/CF code and have it working locally…thanks!
Curious how you would combine 2 multi-page documents into 1. Also do you know if it would handle the page numbering?
@Ebud
ColdFusion and Word is kind of kludge all by itself. So, no, I don't know how to combine the docs or use the page numbering. Wish I could help.
Leave a comment
« Using ColdFusion to Generate a Custom Word Document | Google Visualization API and ColdFusion: Create a Data Table »

Using ColdFusion to Generate Multiple Word Documents (Batch Creation) | Adobe Tutorials
July 8, 2009