应用中经常会遇到要从系统或数据库中导出数据平面文件,一般是导出到txt,csv或excel。txt和csv一般用在系统间的数据交换,而 excel一般有较好的显示效果,可以按照一定的模板导出,导出就不用再排版了,使用简单,如果是使用做报表一般都导出excel文件。
但是使用com组件导出到Excel数据很慢,有另一种生成excel文件的方式就是通过html和css快速导出数据同时并能设置样式,使用这种方式有两个优点:1是速度快,2是不需安装excel支持。
当使用这种方法导出文件时,有时会遇到一个问题,就是导出的Excel经常会把我们的数据自动识别为其他格式,例如只有纯数字的字段在导出到 Excel后会被自动识别为数字格式,而一旦数字超过11位,Excel便会将其以科学计数法的形式来显示,比如身份证号码,带区号的电话号码等。
解决方法有多种,这里只介绍一种本人认为最好的一种,即使用CSS给出现问题的表格字段(如<TD>)应用mso-number- format属性,用这个属性指定某单元格的数据格式,避免Excel自动转换格式。mso-number-format是Office提供的格式, 如果您将office文档转成HTML就会有这样的标志。MSO表示Microsoft Office。
示例:
<style type="text/css">
.format{
mso-number-format:'\@';
}
</style>
<td Class="format">123456789012345</td>
在css中加入:mso-number-format定义数据格式,格式可以在excel中查看自定义格式,具体可以参考一下:
mso-number-format:"0" NO Decimals
mso-number-format:"0\.000" 3 Decimals
mso-number-format:"\#\,\#\#0\.000" Comma with 3 dec
mso-number-format:"mm\/dd\/yy" Date7
mso-number-format:"mmmm\ d\,\ yyyy" Date9
mso-number-format:"m\/d\/yy\ h\:mm\ AM\/PM" D -T AMPM
mso-number-format:"Short Date" 01/03/1998
mso-number-format:"Medium Date" 01-mar-98
mso-number-format:"d\-mmm\-yyyy" 01-mar-1998
mso-number-format:"Short Time" 5:16
mso-number-format:"Medium Time" 5:16 am
mso-number-format:"Long Time" 5:16:21:00
mso-number-format:"Percent" Percent - two decimals
mso-number-format:"0%" Percent - no decimals
mso-number-format:"0\.E+00" Scientific Notation
mso-number-format:"\@" Text
mso-number-format:"\#\ ???\/???" Fractions - up to 3 digits (312/943)
public bool ExportToExcel(System.Data.DataTable dataTable, System.Web.HttpContext curContext)
{
System.Web.UI.WebControls.DataGrid dgExport = null;
// 当前对话
//System.Web.HttpContext curContext = System.Web.HttpContext.Current;
// IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
if (dataTable != null && dataTable.Rows.Count>0)
{
//转换列名为中文
for (int i = 0; i < dataTable.Columns.Count; i++)
{
dataTable.Columns[i].ColumnName = ColNameConvertToName(dataTable.Columns[i].ColumnName);
}
// 设置编码和附件格式
curContext.Response.ContentType = "application/vnd.ms-excel";
curContext.Response.ContentEncoding = System.Text.Encoding.UTF8;
curContext.Response.Charset = "";
curContext.Response.AppendHeader("Content-Disposition", "attachment;filename= export.xls");
// 导出excel文件
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid
dgExport = new System.Web.UI.WebControls.DataGrid();
dgExport.DataSource = dataTable.DefaultView;
dgExport.AllowPaging = false;
dgExport.DataBind();
// 返回客户端
dgExport.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString().Replace("<td", "<td STYLE='MSO-NUMBER-FORMAT:\\@'"));
curContext.Response.End();
return true;
}
return false;
}
分享到:
相关推荐
这段代码用于定义数据格式,在这里我们使用 mso-number-format 属性来定义数据格式,可以根据需要选择不同的格式,例如: * mso-number-format:"0" NO Decimals * mso-number-format:"0\.000" 3 Decimals * mso-...
.net导出标准格式的EXCEL的方法,使用VS2005测试通过。
然而,在处理文件导出,尤其是将数据导出为Excel格式时,开发者经常会遇到一个令人头疼的问题——乱码。这个问题的根源在于字符编码的不匹配,而解决这一问题对于确保数据正确性和用户体验至关重要。 ### ASP.NET...
// 遍历每列,并添加自定义的Excel格式 foreach (TableCell cell in e.Row.Cells) { cell.Attributes.Add("style", "mso-number-format:@"); // @ 表示文本格式 } } } ``` #### 方法解释 - `mso-number-...
今天早上客户跟我说excel导出身份证的时候显示有的对有的不对,我一看原来身份证以X结尾的可以,其它都显示不正确。身份正显示如图所示: 在网上搜了一下发现,原来excel看你数字列超过12位就会显示科学计数。而...
如果是数据行,可以访问到当前行的`Cells`集合,然后设置`Text`属性的`mso-number-format`样式,确保ID列被正确地以文本格式显示。 5. **安全与兼容性**: - `VerifyRenderingInServerForm`方法的重写是为了避免在...
string style = @"<style> .text { mso-number-format:\@; } </style> "; // 清空响应内容,设置编码、文件名和类型 Response.ClearContent(); Response.ContentEncoding = System.Text.Encoding.UTF7; ...
string style = "<style>.text{mso-number-format:\"\\@\";}</style>"; Response.Write(style); Response.Write(sw.ToString()); Response.End(); } } public override void VerifyRenderingInServerForm...
它清空了HTTP响应的内容,设置响应头为“content-disposition”,指定文件名为"MyExcelFile.xls",并设置Content-Type为"application/excel",以表明数据是Excel格式。接着,创建一个StringWriter和HtmlTextWriter,...
string excelContent = oStringWriter.ToString().Replace(", "<td STYLE='mso-number-format:\\@'>"); // 清空缓存,写入Excel内容并结束响应 System.Web.HttpContext.Current.Response.Write(excelContent); ...
string style = @"<style>.text{mso-number-format:\@;}</script>"; ``` 通过内联样式调整,确保数字格式正确显示,这里使用了Excel特有的`.text`样式,以保持数字原始格式。 ### 结论 C#导出Excel至服务器端渲染...
`mso-number-format` CSS样式可以用来设置Excel单元格的数字格式,使其按照特定的样式显示。 8. **Base64编码** - 在JavaScript中,可以使用Base64编码将二进制数据转换为文本字符串,以便在URL中传递或嵌入到HTML...
sExcel.AppendFormat("<TR><TD style=\"mso-number-format:'\\@';\">{0}</TD><TD>{1}</TD><TD>{2}</TD></TR>", dr["TelNo"].ToString(), dr["SMSContent"].ToString(), dr["CreateDate"].ToString()); } sExcel....
System.Web.HttpContext.Current.Response.Write(oStringWriter.ToString().Replace(", "<td STYLE='mso-number-format:\\@'")); System.Web.HttpContext.Current.Response.Buffer = false; System.Web....
这个过程可以通过处理GridView控件的数据并将其转换为Excel格式来实现。以下是一些关键的知识点: 1. **GridView填充数据**:首先,我们需要填充GridView以展示数据。通常,这可以通过连接到数据库并使用...
在HTML表格中,可以使用`<td>`标签的`style`属性,设置`mso-number-format`为"\@",告诉Excel该单元格内容应作为文本处理,代码示例如下: ```html <td style="mso-number-format:\@\;">001 ``` 这样,即使数据是...
为了保持数据格式,尤其是数字格式,还动态添加了样式规则,比如使用mso-number-format来保留数字的前导零。 5. **样式设置**:通过编程方式,在GridView的某列添加CSS类以应用定义好的样式规则。比如通过在...
这里需要注意的是`Content-Disposition`头字段的作用是告诉浏览器该以何种方式处理接收到的数据(显示或下载),而`Content-Type`字段则指定了数据的MIME类型,对于Excel文件来说,“application/ms-excel”是最常用...