将excel列格式化为十进制从c#导出

Posted

技术标签:

【中文标题】将excel列格式化为十进制从c#导出【英文标题】:Format excel column to decimal doing export from c# 【发布时间】:2017-11-14 18:12:27 【问题描述】:

您好,我正在使用以下方法将数据库导出到 excel

        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();

但我无法以十进制格式导出 Excel 中的实际估计价格、已批准的估计价格

该值为 5 而不是显示为 5.00

如何从c#端将excel的某些列格式化为十进制格式

更新

如何在 EPPPlus 中合并列标题合并

我希望两个标题名称都为

CustomerName
Mitesh Jain

【问题讨论】:

开始使用专门的库来创建 Excel 文件,例如 EPPlus。您现在所做的只是创建一个扩展名为 .xls 的 html 页面。然后也可以指定数据类型 @VDWWD 点击时没有打开链接,我也不想更改代码。有没有最简单的方法? 不,因为您创建的不是 xls 而是 html 页面。但是为什么不更改代码。你可以用更少的代码行来做到这一点。您可以将其全部转换为字符串,但会丢失本地化。 @VDWWD 你能给我那个代码作为答案吗 在这里查看我的答案***.com/a/44330799/5836671 或者这个:***.com/a/37543745/5836671 【参考方案1】:

给你,一个完整的方法。只需发送一个 DataTable 和一个文件名,剩下的就交给它了。这个 sn-p 也会使标题行变成灰色并带有粗体文本,并且会自动适应列。

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();

【讨论】:

无法找到 Excel 包,我们需要添加任何 DLL 或命名空间吗? 您是否将库添加到 bin 文件夹,将using 添加到页面顶部并在您的项目中添加了引用?这是我能做到的最简单的... 假设我希望 D 行采用十进制格式,E 作为数据时间格式 我尝试添加 if(col==11) ws.Cells[1, col].Style.Numberformat.Format = "0.00"; foreach 循环中的代码,但我没有得到这种格式 查看我的帖子了解数字格式:***.com/questions/40209636/epplus-number-format/…

以上是关于将excel列格式化为十进制从c#导出的主要内容,如果未能解决你的问题,请参考以下文章

将剑道网格导出到excel时格式化为文本的数字

导出到 Excel 时将所有数据格式化为文本(非通用)

数字应格式化为 excel 中的数字,而不是文本 C#

c#导出EXCEL设置单元格格式?

为啥java导出excel 日期格式不显示时分秒

将数字格式化为 s-s-rS 中的文本