It depends on the version of Word(r) you're wanting to target. For the old .DOC files, Microsoft has a robust interop assembly, but it needs to reside on the computer/server running the tasks. This may present security concerns for public-facing machines.
For the new .DOCX files, I was able to accomplish the task by creating a template with text=placeholders for the data to be inserted. I renamed the template to be a .ZIP file. (The new .docx format is simply a zip file with specific document elements (folder structure, xml files, etc).
In the zip folders there is a file ~\word\document.xml that contains the text of the document.
For each new document, I unzip the .zip file to an empty directory, replace the placeholders in the xml file with the proper data, and then re-zip the directory and rename the resulting zip file to end in .docx. The last step is to delete the temporary files and then provide a link for downloading the new .docx file.
I use the free Ionic zipping library for ASP
http://dotnetzip.codeplex.com/[
^] to unzip
I've also had success with swapping out images (in the ~/word/media folder), document properties, and so forth.
This method works very well for simple documents with only a few images and a few pages of text. For very large documents with many chapters, headings, many large images, complex formatting, table of contents, it can strain the server during the un-zip, re-zip phases.