应用中经常会遇到要从系统或数据库中导出数据平面文件,一般是导出到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;
}
分享到:
相关推荐
HTML导出word密封线页眉 @page WordSection1 { /* size: 841.9pt 595.3pt; */ size: 1190.55pt 841.89pt; mso-page-orientation: landscape; margin: 90.0pt 81.0pt 90.0pt 81.0pt; mso-...
POI导入导出excel文件 --- 个人珍藏笔记,一看就会用
excel导入导出------第一天
.net导出标准格式的EXCEL的方法,使用VS2005测试通过。
nodejs导出excel插件excel-export 具体参加http://tommyhu.cn/nodejs-export-excel
jQuery插件将HTML表格导出为Excel格式文件 - tableexport.js插件,jQuery插件将HTML表格导出为Excel格式文件 - tableexport.js插件(html)
Java导出Excel文件(97--2003) 含jar包,注释全,可直接运行。
在原先可以导出控件中的内容及网页内容的基础上增加接收DataTable数据导出Excel
亲测 vue el-table前端使用file-saver组件,导出excel ,可导出分页数据,里面有详细步骤
excel导入导出---第二天
java实现导出excel表 - Java - Web 开发.mhtjava实现导出excel表 - Java - Web 开发.mht
Grid导出到Excel例子(源码+注释)可直接导入myeclipse中学习。
vb 将数据导出到EXCEL,EXCEL名称路径可自行确定
Unity3D如何导出为webGL--教程.zip
该插件是基于NOPI在Unity平台上进行Excel操作,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作,该插件已包含Dll文件并且已经封装,可以直接修改方法来实现对Excel的不同操作
springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式Excel模板,完整项目,导出即用。springboot+poi导出指定格式...
js导出excel文件,导出html页面中表格内容。
Nodejs导出Excel带图片,Nodejs后台导出带图片Excel 本资源内有说明及使用安装等详细步骤,以及引入插件 由于nodejs导出Excel带图片的资源比较少,我也是找了许久才知道怎么写的,这里发布个收费的,望各位见谅!
magic-api 官方 example 之入手跑起来 适用于小白级别的。
xlsx.full.min.js-导入导出获取数据excel-----demo