Home All Groups Group Topic Archive Search About

Populate Word template from ASP

Author
29 Apr 2009 2:30 PM
GwenP
Hi

Does anyone know if there is a way to populate a Word template from an asp
page and then save it (to a directory on the IIS server) as a new document?

The template also resides on the IIS server.

I can hyperlink to the template but it always comes up read only which I
cannot amend anyway but ideally I'd like to poulate it with data from a form
on the asp page and save it as a new document all from the click of a button
without the user even needing to see any of it happening.

Many thanks
GwenP

Author
29 Apr 2009 2:42 PM
Bob Barrows
GwenP wrote:
> Hi
>
> Does anyone know if there is a way to populate a Word template from
> an asp page and then save it (to a directory on the IIS server) as a
> new document?
>
> The template also resides on the IIS server.
>
> I can hyperlink to the template but it always comes up read only
> which I cannot amend anyway but ideally I'd like to poulate it with
> data from a form on the asp page and save it as a new document all
> from the click of a button without the user even needing to see any
> of it happening.
>
You will need a third-party component such as the one offerred by ASPOSE
(google it).

Yes, it is possible to automate Word, but it is not recommended:
http://support.microsoft.com/default.aspx?scid=KB;en-us;q257757


--
HTH,
Bob Barrows
Are all your drivers up to date? click for free checkup

Author
6 May 2009 8:42 AM
bmguk
Hi Gwen

You can do this with a little preparation of the word document
beforehand and then using a Replace() function, I have a link
somewhere to online instructions but for the life of me I cannot find
it so I will try and explain best I can.

To prepare your template document:
Create a word document to use as you template and the items that you
want to replace you need to give them distinctive names as these are
going to be replaced later. For example if you have a word doc which
will have the first name and last name filled in automatically then
name these items FIRST_NAME & LAST_NAME respectively (Note: I use
underscores for spaces as this tends to give a more distinctive name
to the replaceable items)

When you have distinctively named your replaceable items save the
document as an XML file (File > Save As > MS Word XML File)

Now change the file extension to a .TXT. This stops the server reading
the document into memory later as an XML file and forces it in as
plain text. You can also give the file a more distinctive name but I
would advise that you have no spaces in the filename. For this
explanation we will call the file WORDTEMP.TXT.

You now need to open the file in a text editor (Notepad is fine) and
remove the carridge return at the end of the first 2 lines in the file
then save the file (still as a text file mind). This is needed because
otherwise when you read the file into memory later it will only read
the first line of the file. Wierd I know but it took me a few hours to
work this out when I first tried this method.

That is your word template prepared, so store that on your web server
in a fixed location so that you can open it as required. e.g. /
docstore

To Build The Word Document

Use the FileSystemObject to open the file

    'First build the path name to the template file
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    theFile = "WORDTEMP.TXT"
    thePathName = "/docstore/" & theFile

If FSO.FileExists(Server.MapPath(thePathName)) Then 'File exists

    'Open the the template file
    Set templatefile = FSO.OpenTextFile(Server.MapPath(thePathName))

    'Load the template file into a variable called theinfo
    theinfo = templatefile.ReadAll

    'Close the file
    templatefile.Close

    'Now replace the Keywords with your dynamic content, I also always
replace ampersands with and as they can cause problems when saving the
file
    theinfo = Replace(theinfo, "FIRST_NAME", Replace(Request.Form
("FirstName"), "&", "and"))
    theinfo = Replace(theinfo, "LAST_NAME", Replace(Request.Form
("LastName"), "&", "and"))

    'Create a new word document file
    worddocname = "NEWWORDFILE.DOC"
    thePathName = "/docstore" & "/" & worddocname


    Set templatefile = FSO.CreateTextFile(Server.MapPath(thePathName),
true)
    'Write the new info to the new file
    templatefile.Write(theinfo)

    'Close the new file
    templatefile.Close
    Set FSO = Nothing
End If

You will now have a word document available to utilise as you wish.
Don't be concerned that your document is an XML file as Word is more
than happy to open it and parse it correctly.

Points to note:
I use this method on Intranet applications mainly, if I am using it on
a public domain then I always try to do my document storage outside of
my web root.
You will probably need Modify permissions on the folders that you read/
write your documents to, the only way to test if you have these
permissions is to either ask your web hosting company or just try it.
If the documents don't appear or you get a permission denied error
then you will have to talk nicely to your hosting provider/system
administrator. I have never had a problem before getting permissions
set so I would guess niether would you.

Hope this helps.
Bren
Author
6 May 2009 4:24 PM
Daniel Crichton
bmguk wrote  on Wed, 6 May 2009 01:42:58 -0700 (PDT):

> Hi Gwen

> You will now have a word document available to utilise as you wish.
> Don't be concerned that your document is an XML file as Word is more
> than happy to open it and parse it correctly.

This only applies to Word 2007, Word XP (2002) or 2003 (and older versions,
but I didn't test them) will just parse the XML as plain text.

--
Dan

Bookmark and Share