0

データをデータセットにプルするコンソール アプリケーションを作成したいと考えています。次に、ファイルをローカル ハード ドライブに保存します。ユーザーに保存を求めるコードが webapp にありますが、サーバーのローカル ハード ドライブに保存し、ユーザーに電子メールを送信したいと考えています。これまでの私のコードは次のとおりです。

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=Test.xls;");
Response.Charset = "";

System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
dg.RenderControl(htw);
Response.Write("<style>.fraction { mso-number-format:#\\/#; }</style>");                   
Response.Write(sw.ToString());

Response.End();

助けていただければ幸いです。ありがとう。

4

2 に答える 2

1

ユーザーは、Webアプリではなく、ブラウザーによってファイルを保存するように求められます。ローカルで実行されているコンソールアプリケーションがある場合は、それらすべてをバイパスしてFileStream、書き込み用にを開くだけで、を関連付けることができますHtmlTextWriter。明示的にコードを記述した場合にのみ、ユーザーに上書きを求めるプロンプトが表示されます。

于 2012-06-21T21:34:33.373 に答える
0

これは私のコンソール アプリのスニペットです。ユーザーからのプロンプトなしでファイルを保存します。Excel の COM 参照を追加する必要があります。

    private void btnExcel_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
        app.Visible = true;
        Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(1);
        Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
        int i = 1;
        int i2 = 1;
        foreach (ListViewItem lvi in lvwResults.Items)
        {
            i = 1;
            foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems)
            {
                ws.Cells[i2, i] = lvs.Text;
                i++;
            }
            i2++;
        }

        wb.SaveAs(String.Format(@"C:\MyReportABC-{0}-{1}", String.Format("{0:yyyyMMdd}", DateTime.Today), String.Format("{0:hhmm}", DateTime.Now)));
        wb.Close(true);
    }

MyReportABC-20120621-0539.xls という名前のファイルを出力します (毎回変更されます。文字列にユーザー ID を追加することもできます)。

于 2012-06-21T21:43:06.043 に答える