Inserting data into an excel sheet from a DataTable

前端 未结 2 1873
迷失自我
迷失自我 2020-12-10 09:48

I\'m extracting data from the database into a DataTable and displaying it by binding it to a Repeater control. Now I need to copy the same data int

2条回答
  •  [愿得一人]
    2020-12-10 10:23

    I would suggest to create a real excel-file instead of a html table(what many people do). Therefor i can warmly recommend EPPlus(LGPL license).

    Then it is simple. Assuming that you have a button BtnExportExcel:

    protected void BtnExcelExport_Click(object sender, System.Web.UI.ImageClickEventArgs e)
    {
        try {
            var pck = new OfficeOpenXml.ExcelPackage();
            var ws = pck.Workbook.Worksheets.Add("Name of the Worksheet");
            // get your DataTable
            var tbl = GetDataTable();
            ws.Cells["A1"].LoadFromDataTable(tbl, true, OfficeOpenXml.Table.TableStyles.Medium6);
            foreach (DataColumn col in tbl.Columns) {
                if (col.DataType == typeof(System.DateTime)) {
                    var colNumber = col.Ordinal + 1;
                    var range = ws.Cells[1, colNumber, tbl.Rows.Count, colNumber];
                    // apply the correct date format, here for germany
                    range.Style.Numberformat.Format = "dd.MM.yyyy";
                }
            }
            var dataRange = ws.Cells[ws.Dimension.Address.ToString()];
            dataRange.AutoFitColumns();
    
            Response.Clear();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=NameOfExcelFile.xlsx");
            Response.BinaryWrite(pck.GetAsByteArray());
        } catch (Exception ex) {
            // log exception
            throw;
        } 
        Response.End();
    }
    

提交回复
热议问题