1

我将数据表导出到 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

4

5 回答 5

4

关于您的代码的几点说明:

  1. 您正在将内容类型标题设置为 word 文档,但实际上是通过呈现 GridView 来发送 HTML 内容
  2. dd/MM/YYYY/由于该字符,它不是有效的文件名。
  3. try/catch如果在catch语句中你只是在做,你不需要一个块throw err
  4. 最后调用Response.End是没有必要的。
  5. 在处理流和读取器/写入器等一次性对象时始终使用using语句,以确保Dispose在所有情况下都调用该方法。
于 2009-12-29T10:10:35.437 回答
2

您应该使用类似的文件名

String.Format("report{0:ddMMyyyy}.doc", DateTime.Now);
于 2009-12-29T10:12:30.227 回答
0

文件名不能有“/”。

于 2009-12-29T10:11:37.777 回答
0

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

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

于 2009-12-29T10:11:41.470 回答
0

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

于 2009-12-29T10:11:56.713 回答