Export to word with a filename doesn't seem to work
-
21-09-2019 - |
문제
I export a datatable to word, when I pass a file name it doesn't seem to get the file name in Open/Save dialog box.
Here is what I am doing
public static void Convertword(DataTable dt, HttpResponse Response,string filename)
{
try
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".doc");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.word";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
System.Web.UI.WebControls.GridView dg = new System.Web.UI.WebControls.GridView();
dg.DataSource = dt;
dg.DataBind();
dg.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
catch(Exception err)
{
throw err;
}
}
When I pass filename "report(" + System.DateTime.Now.ToString("dd/MM/yyyy");
+ ")"
it doesn't take the value as dd/MM/YYYY instead it shows file name as dd_MM_YYYY
해결책
Few remarks about your code:
- You are setting the content type header to a word document but you are actually sending HTML contents by rendering a GridView
dd/MM/YYYY
is not a valid filename because of the/
character.- You don't need a
try/catch
block if in thecatch
statement you are only doingthrow err
- Calling
Response.End
at the end is not necessary. - Always use
using
statement when dealing with disposable objects such as streams and readers/writers to ensure that theDispose
method is invoked in all cases.
다른 팁
You should to use a filename like
String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);
A filename cannot have "/".
That's most likely because /
isn't a valid character for filenames. Your name must fulfill certain criteria, be sure not to use any of
* . " / \ [ ] : ; | = ,
If you have forward slashes in the filename, I would assume that this would break the URL to the file and hence the slashes are being replaced at some point?
제휴하지 않습니다 StackOverflow