Gridview 将动态/多网格视图导出到excel

Gridview 将动态/多网格视图导出到excel,gridview,Gridview,我有以下代码来生成多个gridview private void LoadData() { .... .... for (int i = 0; i <= batchNo.Split(',').Length - 1; i++) { GridView gv = new GridView(); BoundField BatchID = new BoundField(); BatchID.DataField = "B

我有以下代码来生成多个gridview

private void LoadData()
{
    ....
    ....

    for (int i = 0; i <= batchNo.Split(',').Length - 1; i++)
    {
        GridView gv = new GridView();
        BoundField BatchID = new BoundField();
        BatchID.DataField = "BatchID";
        BatchID.HeaderText = "Batch ID";
        BoundField BatchDate = new BoundField();
        BatchDate.DataField = "BatchDate";
        BatchDate.HeaderText = "Batch Date";
        BoundField BatchAmount = new BoundField();
        BatchAmount.DataField = "BatchAmount";
        BatchAmount.HeaderText = "Batch Amount";
        Label lbTitle = new Label();

        lbTitle.Text = "Batch No: " + batchNo[i];

        gv.AutoGenerateColumns = false;
        gv.EmptyDataText = "No batch data.";

        // query goes here
        sSql = "select * from batchTable where BatchID = " + batchNo.Split(',')[i];

        gv.Columns.Add(BatchID);
        gv.Columns.Add(BatchDate);
        gv.Columns.Add(BatchAmount);
        gv.ShowFooter = true;

        gv.DataSource = db.returnDataSet(sSql);
        gv.DataBind();

        phGridView.Controls.Add(new LiteralControl("<br />"));
        phGridView.Controls.Add(lbTitle);
        phGridView.Controls.Add(gv);

        total = 0;

        foreach (GridViewRow gvr in gv.Rows)
        {
            if (gvr.RowType == DataControlRowType.DataRow)
            {
                double val = 0.0;
                try
                {
                    val = Convert.ToDouble(gvr.Cells[2].Text);
                }
                catch (Exception ex) { }
                total = val + total;
            }
        }

        gv.FooterRow.Cells[2].Text = total.ToString();
    }
}
但是这个函数可以导出所有没有lbTitle.Text和页脚(total)的gridview。如何根据屏幕上的显示将gridview导出到excel。示例如下

--------------------------------------------
|Batch ID     | Batch Date | Batch Amount  |
--------------------------------------------
|Batch No: 1234                            |
| A1          | 3/12/2019  | 1000.00       |
| A2          | 3/12/2019  |  500.00       |
--------------------------------------------
|             |            | 1500.00       |
--------------------------------------------
|Batch No: 5555                            |
| D1          | 3/12/2019  |  800.00       |
| E2          | 3/12/2019  |  300.00       |
--------------------------------------------
|             |            | 1100.00       |
--------------------------------------------    
|Batch No: 6565                            |
| Z1          | 3/12/2019  | 1200.00       |
| Z2          | 3/12/2019  | 1500.00       |
--------------------------------------------
|             |            | 2700.00       |
--------------------------------------------

谢谢你的帮助。谢谢

您可以使用ApachePOI库来实现这一点。
经过多次尝试和错误后,可以在以下位置找到示例和详细信息:

。。我找到了解决办法。。不确定这是否是最好的解决方案,但它暂时有效。。这是我的密码。。感谢所有的意见和建议

protected void bExportBatch_Click(object sender, EventArgs e)
{
LoadData();

Response.Clear();
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
string FileName = "Batch_End_Shift" + ".xls";
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);

batchID = Request.QueryString["id"];
// To check if got more than 1 gv    
    if (batchID .Contains(','))
    {
        LoadDataGV(true, htmltextwrtter); // LoadDataGV() for more than 1 gv            
        Response.Write(strwritter.ToString());
        Response.End();
    }
    else
    {
        LoadData(); // LoadData for 1 gv only
        gv.GridLines = GridLines.Both;
        gv.HeaderStyle.Font.Bold = true;
        gv.RenderControl(htmltextwrtter);
        Response.Write(strwritter.ToString());
        Response.End();
    }
}
protected void bExportBatch_Click(object sender, EventArgs e)
{
LoadData();

Response.Clear();
Response.Buffer = true;
Response.ClearContent();
Response.ClearHeaders();
Response.Charset = "";
string FileName = "Batch_End_Shift" + ".xls";
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);

batchID = Request.QueryString["id"];
// To check if got more than 1 gv    
    if (batchID .Contains(','))
    {
        LoadDataGV(true, htmltextwrtter); // LoadDataGV() for more than 1 gv            
        Response.Write(strwritter.ToString());
        Response.End();
    }
    else
    {
        LoadData(); // LoadData for 1 gv only
        gv.GridLines = GridLines.Both;
        gv.HeaderStyle.Font.Bold = true;
        gv.RenderControl(htmltextwrtter);
        Response.Write(strwritter.ToString());
        Response.End();
    }
}