hi all,
i was wondering if anyone had a quick solution to have a button click to pass values from aspx web form to a word.dot
i have a button that opens my template but i would like it to pass textbox.text to book marks in the word template
e.g
textbox1.text = bookmark.ID
textbox2.text = bookmark.Fname
textbox3.text = bookmark.Lname
textbox4.text = bookmark.Address ext...
protected void Button7_Click(object sender, EventArgs e) { string fPath = @"\\Server12\170912.dot"; FileInfo myDoc = new FileInfo(fPath); Response.Clear(); Response.ContentType = "Application/msword"; Response.AddHeader("content-disposition", "attachment;filename=" + myDoc.Name); Response.AddHeader("Content-Length", myDoc.Length.ToString()); Response.ContentType = "application/octet-stream"; Response.WriteFile(myDoc.FullName); Response.End(); }
Thank you in advance as always
rough riderPosted Oct 1, 2013, 9:03 AM
i have done as you have suggested, im getting this error when i click the button
Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.Runtime.InteropServices.COMException: Type mismatch. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
Line 223: _Document doc = NewWordApp.Documents.Add(ref template, ref mv, ref mv, ref mv);
Sunny SharmaPosted Oct 1, 2013, 7:52 AM
Sorry for I forgot to mention in my last reply, you need to add these namespaces:
using Microsoft.Office.Interop.Word; using System.Reflection;
-----------------------------------------------------
protected void Button7_Click(object sender, EventArgs e)
{
string templatePath = @"\\Server12\170912.dot";
string SaveFilePath = @"\\SomePath" // Set the desired path to save the generated documents
object mv = Missing.Value;
object objFalse = false;
object template = templatePath;
_Application NewWordApp = new ApplicationClass();
_Document doc = NewWordApp.Documents.Add(ref template, ref mv, ref mv, ref mv);
object ObjFalse = false;
object objBkMark = "ID"; // Name of the bookmark
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark); //Get Bookmark Range
bookmark.Range.Text = textbox1.Text //Set bookmark Range
//Repeat the above three lines for each bookmark
object objBkMark = "FName";
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark);
bookmark.Range.Text = "TextBox2.Text";
object objBkMark = "LName";
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark);
bookmark.Range.Text = "TextBox3.Text";
object objBkMark = "Address";
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark);
bookmark.Range.Text = "TextBox4.Text";
object savefileformat = WdSaveFormat.wdFormatDocument; //choose the file format
object savefileName = SaveFilePath+"\\mySampleFile.docx"; //extension will depend on chosen format
//Refer here for different type of formats available:
// http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.wdsaveformat(v=office.14).aspx
doc.SaveAs(ref savefileName, ref savefileformat, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv);
doc.Close(ref ObjFalse, ref mv, ref mv);
doc = null;
FileInfo myDoc = new FileInfo(savefileName);
Response.Clear();
Response.ContentType = "Application/msword";
Response.AddHeader("content-disposition", "attachment;filename=" + myDoc.Name);
Response.AddHeader("Content-Length", myDoc.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(myDoc.FullName);
Response.End();
}
HTH :)
rough riderPosted Oct 1, 2013, 6:25 AM
Hi sunny
thank you for your reply, but I'm new to code and was wondering how do i use what you have provided.
The code I have for button currently open the word template, how do I use your code to achieve the text box value to wordbook marks.
do i add it to the button code do i need name spacenames
thank you
Sunny SharmaPosted Oct 1, 2013, 6:14 AM
-------------------------------------------------------------------------
_Document doc = null;
object mv = Missing.Value;
object objFalse = false;
string templatePath = Environment.CurrentDirectory + "\\template.dot";
object template = templatePath;
_Application NewWordApp = new ApplicationClass();
doc = NewWordApp.Documents.Add(ref template, ref mv, ref mv, ref mv);
object ObjFalse = false;
object objBkMark = "FirstBookMark"; //repeat these three below lines for every bookmark.
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark);
bookmark.Range.Text = "MySampleBookMark1";
object objBkMark = "SecondBookMark";
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark);
bookmark.Range.Text = "MySampleBookMark2";
object objBkMark = "ThirdBookmark";
Bookmark bookmark = doc.Bookmarks.get_Item(ref objBkMark);
bookmark.Range.Text = "MySampleBookMark3";
object savefileformat = WdSaveFormat.wdFormatDocument; //choose the file format
object savefileName = SaveFilePath+"\\mySampleFile.docx"; //extension will depend on chosen format
doc.SaveAs(ref savefileName, ref savefileformat, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv, ref mv);
doc.Close(ref ObjFalse, ref mv, ref mv);
doc = null;
-----------------------------------------------------------------------------
Now you can refer to SaveFileName and do anything that you want.
Hope it helps :)