0

是否可以使用 Response.Write() 保存导出的 Word 文档文件。现在它显示保存/打开对话框,一旦它转换成功。但我需要将此文件保存到文件夹中。请帮我解决这个问题。

我的 Doc 代码转换附在下面。

  private void ExportDataSetToWordDoc()
    {
        try
        {
            Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", DateTime.Today.ToShortDateString().Replace("/", "").Replace("-", "") + "_" + DateTime.Now.ToShortDateString() + ".doc"));
            Response.ContentType = "application/ms-word";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            tblMain.RenderControl(htw);


            Response.Write(sw.ToString());
            Response.End();
        }
        catch (ThreadAbortException ex)
        {

            Common.LogError(ex);
        }

    }
4

3 回答 3

1

我修改了我的代码,如下所示。现在它保存指定的文件夹

Response.ClearContent();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", DateTime.Today.ToShortDateString().Replace("/", "").Replace("-", "") + "_" + DateTime.Now.ToShortDateString() + ".doc"));
            Response.ContentType = "application/ms-word";
            StringWriter sw = new StringWriter();
            HtmlTextWriter htw = new HtmlTextWriter(sw);

            tblMain.RenderControl(htw);

            string strPath = Request.PhysicalApplicationPath + "Test.doc";
            StreamWriter sWriter = new StreamWriter(strPath);
            sWriter.Write(sw.ToString());
            sWriter.Close();

谢谢。

于 2013-03-27T13:22:02.437 回答
1

由浏览器为用户提供“打开或保存”选项。这就是您的内容处置“附加”鼓励浏览器执行的操作。您的另一个选项是内容处置“内联”,浏览器通常只会调用应用程序(在本例中为 Word)来打开文件。 请参阅 MSDN

遗憾的是,浏览器并不总是提供您在“另存为”对话框中指定为默认文件名的文件名。通常,它会提供您的网页名称作为默认名称。Firefox 至少将其记录为一个错误,IE 似乎认为这是一个“功能”。

于 2013-03-27T12:48:37.603 回答
0

您可以通过路径使用流编写器 (System.IO.StreamWriter)。当流写入器关闭时,文件将保存在指定路径。

但是,它将保存在服务器磁盘上。如果你想在客户端保存,你别无选择,只能询问用户将文件放在哪里。未经客户端批准,您不能将文件保存在客户端上。

var x = new System.IO.StreamWriter(path);
x.Close();
于 2013-03-27T12:33:48.447 回答