Search code examples
c#asp.netexcelexcel-2010epplus

Format excel column to decimal doing export from c#


Hi I am exporting database to excel with below method as

        Response.ClearContent();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment; filename=" + FileName);
        Response.ContentType = "application/vnd.ms-excel";
        EnableViewState = false;
        Response.Write("<style> TABLE { border:dotted 1px #999; } TH { border:dotted 1px #D5D5D5; text-align:center } TD { border:dotted 1px #D5D5D5; } </style>");
        Response.Write("<table>");
        Response.Write("<tr>");          
        Response.Write("<th>Actual Estimated Price</th>");
        Response.Write("<th>Aprroved Estimated Price </th>");
        Response.Write("<th>Actual Price</th>");
        Response.Write("<th>Aprroved Actual Price </th>");
        Response.Write("<th>TransactionID </th>");            
        Response.Write("<th>Created On</th>");
        Response.Write("</tr>");
        foreach (DataRow dr in dt.Rows)
        {
            Response.Write("<tr>");
            Response.Write("<td>");
            Response.Write(String.Format("{0:0.0#}", dr["EstimatedPriceTotal"].ToString()));
            Response.Write("</td>");
            Response.Write("<td>");
            Response.Write(String.Format("{0:0.0#}", dr["ApprovedEstimatedPriceTotal"].ToString()));
            Response.Write("</td>");
            Response.Write("<td>");
            Response.Write(String.Format("{0:0.0#}", dr["ActualPriceTotal"].ToString()));
            Response.Write("</td>");
            Response.Write("<td>");
            Response.Write(String.Format("{0:0.0#}", dr["ApprovedActualPriceTotal"].ToString()));
            Response.Write("</td>");
            Response.Write("<td>");
            Response.Write(dr["TransactionID"].ToString());
            Response.Write("</td>"); 
            Response.Write("<td>");    
            Response.Write(Convert.ToDateTime(dr["CreatedOn"].ToString()));
            Response.Write("</td>");
            Response.Write("</tr>");
        }
        Response.Write("</table>");
        Response.End();

but I am not able to export Actual Estimated Price, Aprroved Estimated Price in excel as decimal format

The value is coming as 5 instead of showing 5.00

How can I format some column of excel to decimal format from c# side

Update

How can I merge column header merge in EPPPlus

enter image description here

I want both header name as

CustomerName
Mitesh Jain

Solution

  • Here you go, one complete method. Just send a DataTable and a file name and this does the rest. This snippet will also make the header row gray with bold text and will auto fit the columns.

    using OfficeOpenXml;
    using OfficeOpenXml.Style;
    
    public void ExportToExcel(DataTable dt, string FileName)
    {
        //create a new byte array       
        byte[] bin;
    
        //create a new excel document
        using (ExcelPackage excelPackage = new ExcelPackage())
        {
            //create a new worksheet
            ExcelWorksheet ws = excelPackage.Workbook.Worksheets.Add(FileName);
    
            //add the contents of the datatable to the excel file
            ws.Cells["A1"].LoadFromDataTable(dt, true);
    
            //auto fix the columns
            ws.Cells[ws.Dimension.Address].AutoFitColumns();
    
            //loop all the columns
            for (int col = 1; col <= ws.Dimension.End.Column; col++)
            {
                //make all columns just a bit wider, it would sometimes not fit
                ws.Column(col).Width = ws.Column(col).Width + 1;
    
                var cell = ws.Cells[1, col];
    
                //make the text bold
                cell.Style.Font.Bold = true;
    
                //make the background of the cell gray
                var fill = cell.Style.Fill;
                fill.PatternType = ExcelFillStyle.Solid;
                fill.BackgroundColor.SetColor(ColorTranslator.FromHtml("#BFBFBF"));
    
                //make the header text upper case
                cell.Value = ((string)cell.Value).ToUpper();
            }
    
            //convert the excel package to a byte array
            bin = excelPackage.GetAsByteArray();
        }
    
        //clear the buffer stream
        Response.ClearHeaders();
        Response.Clear();
        Response.Buffer = true;
    
        //set the correct contenttype
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    
        //set the correct length of the data being send
        Response.AddHeader("content-length", bin.Length.ToString());
    
        //set the filename for the excel package
        Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + ".xlsx\"");
    
        //send the byte array to the browser
        Response.OutputStream.Write(bin, 0, bin.Length);
    
        //cleanup
        Response.Flush();
        HttpContext.Current.ApplicationInstance.CompleteRequest();
    }