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

ユーザーに「開くか保存する」オプションを提供するかどうかは、ブラウザ次第です。これが、コンテンツ処理の「アタッチ」がブラウザに実行を促していることです。もう1つのオプションは、コンテンツ処理の「インライン」です。この場合、ブラウザは通常、アプリケーション(この場合はWord)を呼び出してファイルを開きます。 MSDNを参照してください

残念ながら、ブラウザは、[名前を付けて保存]ダイアログでデフォルトのファイル名として指定したファイル名を常に提供するとは限りません。多くの場合、代わりにデフォルトとしてWebページの名前が表示されます。Firefoxは少なくともこれをバグとして文書化しており、IEはこれを「機能」と見なしているようです。

于 2013-03-27T12:48:37.603 に答える
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 に答える
0

パスを使用してストリームライター(System.IO.StreamWriter)を使用できます。ストリームライターを閉じると、ファイルは指定されたパスに保存されます。

ただし、サーバーディスクには保存されます。クライアント側で保存したい場合は、ファイルをどこに置くかをユーザーに尋ねる以外に選択肢はありません。承認なしにクライアントにファイルを保存することはできません。

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