C#console应用程序保存excel文件(不提示)

时间:2012-06-21 21:22:43

标签: c# console-application export-to-excel

我想编写一个控制台应用程序,我将数据提取到数据集中。然后我想将文件保存到本地硬盘驱动器。我的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();

我将不胜感激任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

系统会提示用户通过浏览器保存文件,而不是通过您的网络应用程序保存文件。如果您有本地执行的控制台应用程序,则可以绕过所有这些,只需打开FileStream进行编写,并将HtmlTextWriter与之关联。如果您明确编写代码来执行此操作,它只会提示用户覆盖。

答案 1 :(得分: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)