导出到带有文件名的单词似乎不起作用

时间:2009-12-29 10:06:01

标签: asp.net filenames export-to-word

我将数据表导出为单词,当我传递文件名时,它似乎没有在打开/保存对话框中获取文件名。

这就是我正在做的事情

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;
    }
}

当我传递文件名"report(" + System.DateTime.Now.ToString("dd/MM/yyyy"); + ")"时,它不会将值设为 dd / MM / YYYY ,而是将文件名显示为 dd_MM_YYYY

5 个答案:

答案 0 :(得分:4)

关于您的代码的几点评论:

  1. 您正在将内容类型标题设置为word文档,但实际上是通过呈现GridView来发送HTML内容
  2. 由于dd/MM/YYYY字符,
  3. /不是有效的文件名。
  4. 如果您只是在try/catch声明catch
  5. ,则不需要throw err阻止
  6. 无需在结尾处拨打Response.End
  7. 在处理诸如流和读取器/写入器之类的一次性对象时始终使用using语句,以确保在所有情况下都调用Dispose方法。

答案 1 :(得分:2)

你应该使用像

这样的文件名
String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);

答案 2 :(得分:0)

文件名不能有“/".

答案 3 :(得分:0)

这很可能是因为/不是文件名的有效字符。您的名字必须符合某些标准,请务必不要使用任何

  

* . " / \ [ ] : ; | = ,

答案 4 :(得分:0)

如果文件名中有正斜杠,我会认为这会破坏文件的URL,因此斜杠会在某个时候被替换掉?