在ASP.NET中导出到Excel,对于大于1000的数字使用十进制格式

我使用以下代码将数据集导出到excel。

public void Export() { string fileName = "Non-LaborActuals"; string cmd = ""; if (grid == "NLP") { fileName = wrnum + "_Paid Non-Labor.xls"; cmd = "sp_Act_NonLabor_Paid_export"; } if (grid == "NLC") { fileName = wrnum + "_Committed Non-Labor.xls"; cmd = "sp_Act_NonLabor_Commit_export"; } System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; response.Clear(); response.Charset = ""; response.ContentType = "application/vnd.ms-excel"; response.AddHeader("Content-Disposition", "attachment;filename=\"" + fileName); DataSet ds1; try { using (SqlCommand sqlCmd1 = new SqlCommand(cmd)) { sqlCmd1.CommandType = CommandType.StoredProcedure; sqlCmd1.Parameters.Add(new SqlParameter("@c_service_req", SqlDbType.VarChar, 10)); sqlCmd1.Parameters["@c_service_req"].Value = wrnum; ds1 = db.ExecuteDataSet(sqlCmd1); } using (System.IO.StringWriter sw = new System.IO.StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { DataGrid dg = new DataGrid(); dg.DataSource = ds1.Tables[0]; dg.DataBind(); dg.RenderControl(htw); response.Write(sw.ToString()); response.End(); } } } catch { } } 

– 导出到excel后的结果子集(抱歉格式化,我无法上传图像文件)

 EXPENSE_TYPE_DESC HOURS COST_USD
标准时间8 903.2
标准时间16 1,172.80
标准时间40 372
标准时间32 297.6
标准时间5 90
标准时间71 1,278.00
标准时间29 0

– 问题是,对于小于1000的数字,Excel在十进制位置截断零,并且我没有看到大于1000的数字的这个问题。我想看到decilam位置甚至是值为0(如0.00)。 我不想将文本样式应用于列。 任何建议或帮助实现这一点非常感谢。 提前致谢。

解决了这个问题如下。 我忘记了一篇建议这些步骤的有用文章。

  1. 在GridView的RowDataBound上,我将Class属性添加到了所需的列

    protected void gvExcel_RowDataBound(object sender,GridViewRowEventArgs e){

      if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[22].Attributes.Add("class", "cost"); } } 
  2. 并对代码进行了一些小的更改,如下所示。 那么,问题现在已经解决了。

      try { DataSet ds = new DataSet(); ds = businesscase.services.Actuals.GetActualsGridData(bcid, cmd); using (System.IO.StringWriter sw = new System.IO.StringWriter()) { using (HtmlTextWriter htw = new HtmlTextWriter(sw)) { // instantiate a datagrid GridView gvExcel = new GridView(); gvExcel.RowDataBound += new GridViewRowEventHandler(this.gvExcel_RowDataBound); gvExcel.DataSource = ds.Tables[0]; gvExcel.DataBind(); gvExcel.RenderControl(htw); response.Write(""); //response.Write(style); response.Write(sw.ToString()); response.End(); } } } catch { } 

您可以尝试向DataGrid列添加一些格式。 例如,使用货币格式字符串(“C”)可能会修复丢失的小数问题。 请看这里的例子:

http://dotnetguts.blogspot.com/2007/12/export-datagrid-to-excel-in-aspnet.html

简单 – 发送HTML并将内容类型设置为ms-excel – 方法并不能让您对Excel电子表格的格式有很多控制。 如果你真的想要控制,那么你将不得不使用另一种方法。 ASP.NET环境中最好的方法可能是返回Excel XML文档。 以下是一些可以帮助您的好资源:

http://forums.asp.net/t/1038105.aspx

http://mikesnotebook.wordpress.com/2010/03/26/dynamically-generate-excel-files-from-asp-net/

http://meghainfotech.wordpress.com/2011/04/15/how-to-generate-excel-xl-document-from-asp-net-c/