【问题标题】:ASP Table to ExcelASP 表格转 Excel
【发布时间】:2016-11-06 01:29:56
【问题描述】:

在网站中查看 ASPX 时,我得到一个表格,单元格中的文本很少,例如:

tab.Rows[1].Cells[1].innerHtml = "Booked :"

(在很多行和单元格中,但每个单元格中的文本不同)

现在我只想点击一个按钮,表格中的数据就会被下载到 Excel 文件中。

表 ID:标签

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        //Table tbl = new Table();
        TableRow tr = new TableRow();
        TableCell tcel = new TableCell();
        tcel.Text = "id";
        tr.Cells.Add(tcel);

        TableCell tcel1 = new TableCell();
        tcel1.Text = "id1";
        tr.Cells.Add(tcel1);

        tab.Rows.Add(tr);
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    string filename = "ExportExcel.xls";
    System.IO.StringWriter tw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);

    //DataGrid dgGrid = new DataGrid();
    //dgGrid.DataSource = tbl;
    //dgGrid.DataBind();

    //Get the HTML for the control.             
    tab.RenderControl(hw);
    //Write the HTML back to the browser.
    //Response.ContentType = application/vnd.ms-excel;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
    this.EnableViewState = false;
    Response.Write(tw.ToString());
    Response.End();
}

修改了 watraplion 答案,但仍然没有答案.. 错误:

DataTable dt = dt; //Use of unassigned local variable 'dt'

【问题讨论】:

    标签: c# html asp.net excel


    【解决方案1】:

    试试这个:

    aspx 设计视图:

    <body>
       <form id="form1" runat="server">
          <div>
              <asp:Table ID="Table1" runat="server">
               </asp:Table>
          </div>
          <div>
               <asp:Button ID="btnExport" onclick="btnExport_Click" Text="Export" runat="server">
          </div>
       </form>
    </body>
    

    aspx.cs(后面的代码)

        protected void Page_Load(object sender, EventArgs e)
        {
            TableRow tr = new TableRow();
            TableCell tcel = new TableCell();
            tcel.Text = "id";
            tr.Cells.Add(tcel);
    
            TableCell tcel1 = new TableCell();
            tcel1.Text = "id1";
            tr.Cells.Add(tcel1);
    
            Table1.Rows.Add(tr);
        }
    
        protected void btn_Click(object sender, EventArgs e)
        {
            string filename = "ExportExcel.xls";
            System.IO.StringWriter tw = new System.IO.StringWriter();
            System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
    
            //Get the HTML for the control.             
            Table1.RenderControl(hw);
            //Write the HTML back to the browser.
            //Response.ContentType = application/vnd.ms-excel;
            Response.ContentType = "application/vnd.ms-excel";
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename + "");
            this.EnableViewState = false;
            Response.Write(tw.ToString());
            Response.End();
         }
    

    【讨论】:

    • 对不起,我认为没有必要更改,但这里出现错误 DataGrid dgGrid = new DataGrid();
    • 它要求我使用 System.Windows.Forms.DataGrid 或 System.Web.UI.WebControls.DataGrid...
    • 您是在文件后面的代码上动态创建 HTML 表还是在 aspx 页面中使用
      ??
    • 我在设计视图中创建了行和单元格,然后将 innerhtml 添加到每个带有文本的单元格中
    • 你期待类似的吗?否则请显示您的 aspx 页面代码和在表格中附加文本的方式。
    【解决方案2】:

    首先要说的是,您要做的不是导出到 excel,而是发送带有错误标题的 html 以欺骗浏览器以使用 excel 打开此内容。

    这个解决方案有很多问题,excel它自己会警告用户内容与扩展名不同,因为你发送html并且你的响应头说这是一个excel文件。而且我敢打赌,客户端上的某些反恶意软件或服务器上的类似软件会阻止此响应,因为提供与标头中声明的内容不同的内容是已知的恶意软件行为。

    使用专用的 excel 库更好更容易,例如EPPlus,在此处查找将 DataTable 导出到真实 excel 文件的 ASP.NET ashx 处理程序:

    https://stackoverflow.com/a/9569827/351383

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 2022-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多