当我们把web页面上的数据导成excel形式时,有时候我们的数据需要以特定的格式呈现出来,这时候我们就需要给cell添加一些样式规格信息。 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本:vnd.ms-excel.numberformat:@ 2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd 3) 数字:vnd.ms-excel.numberformat:#,##0.00 4) 货币:vnd.ms-excel.numberformat:¥#,##0.00 5) 百分比:vnd.ms-excel.numberformat: #0.00% 这些格式你也可以自定义,比如年月你可以定义为:yy-mm等等。那么知道了这些格式,怎么去把这些格式添加到cell中呢?很简单,我们只需要把样式添加到对应的标签对(即闭合标签)即可。如<td></td>,给标签对<td></td>添加样式,如下: <td style="vnd.ms-excel.numberformat:@">410522198402161833</td> <td style="vnd.ms-excel.numberformat:@">410522198402161833</td> 同样,我们也可以给<div></div>添加样式,也可以给<tr></tr>,<table></table>添加样式,这样就会引入一个问题,你注意到了吗?先看如下的代码: <table style='vnd.ms-excel.numberformat:#,##0.00'> <tr> <td>542</td> <td style='vnd.ms-excel.numberformat: #0.00%'>0.25</td> </tr> </table> <table style='vnd.ms-excel.numberformat:#,##0.00'> <tr> <td>542</td> <td style='vnd.ms-excel.numberformat: #0.00%'>0.25</td> </tr> </table> 对,当我们在父标签对和子标签对都添加样式时,数据会以哪一个样式呈现呢?经过测试,会以离数据最近的样式呈现,这也是符合我们的意愿的(好像也符合一句俗话:县官不如现管)。这样我们就可以通过改变样式而改变数据在excel中呈现的方式(这些样式规格你可以在前台页面上添加也可以在后台代码里给相应的控件如:DataGrid等添加这些样式)。如果你的应用比较简单,那么这已经足够满足你的需求。但如果你的应用比较复杂,那么你也可以采取一种方式来达到不同的数据呈现效果。下面,我就举一个稍微复杂一点的应用。 例如:你的数据要呈现给不同国家和地区的用户查看,这样数据的呈现的格式就会不一样,那么我们怎么解决这个问题呢?当然了,你可以手工把这些数据处理好,但这毕竟不是最好的方法,因为如果我们每增加一个其他国家或地区的用户,那么我们就需要把所有的数据以客户要求的格式处理一遍,当数据量很大时,这无疑是一件很沉重且无聊的工作。那么我们究竟应该怎样解决类似这样的问题呢?下面我说一下,我自己的看法:把这些格式化的信息抽取到一个xml文件中,程序运行时根据不同的客户读取不同的格式化信息,然后把这些格式化信息动态的添加到我们的数据上,这样,当我们每增加一个其他国家或地区的用户时,我们只需要多增加一个xml文件,把对应的格式化信息写入这个xml文件,然后当这个国家或地区的用户查看时,就把对应的格式化信息读取出来应用到数据上即可。 以上这个例子是我突然想到的,相信跨国企业的公司会遇到类似的问题,解决方法只是提供给大家一个思路,希望可以起到抛砖引玉的效果 excel常用的一些格式 2010-11-17 13:13 1) 文本:vnd.ms-excel.numberformat:@ 2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd 3) 数字:vnd.ms-excel.numberformat:#,##0.00 4) 货币:vnd.ms-excel.numberformat:¥#,##0.00 5) 百分比:vnd.ms-excel.numberformat: #0.00% Excel导出及数据格式化处理(摘) public void ToExcel(System.Web.UI.Control ctl, string FileName) { HttpContext.Current.Response.Charset = "UTF-8"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Default; HttpContext.Current.Response.ContentType = "application/ms-excel"; HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + "" + FileName + ".xls"); ctl.Page.EnableViewState = false; System.IO.StringWriter tw = new System.IO.StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); ctl.RenderControl(hw); HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.End(); } public override void VerifyRenderingInServerForm(Control control) { //base.VerifyRenderingInServerForm(control); } protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { //e.Row.Cells[0].Attributes.Add("style", "vnd.ms-excel.numberformat:@");//这里是将要导出到execl里的第一列格式化为字符类型。 //e.Row.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00");//这里是格式化为货币类型。 e.Row.Cells[4].Attributes.Add("style", "vnd.ms-excel.numberformat:@"); //1) 文本:vnd.ms-excel.numberformat:@ //2)日期:vnd.ms-excel.numberformat:yyyy/mm/dd //3)数字:vnd.ms-excel.numberformat:#,##0.00 //4)货币:vnd.ms-excel.numberformat:¥#,##0.00 //5)百分比:vnd.ms-excel.numberformat: #0.00% } } js 将table内容导入Excel <%@ page c %> <html> <head> <script language="javascript" type="text/javascript"> function MakeExcel() { var i, j, n; try { var xls = new ActiveXObject("Excel.Application"); } catch(e) { alert( "要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。请点击【帮助】了解浏览器设置方法!"); return ""; } xls.visible =true; // 设置excel为可见 var xlBook = xls.Workbooks.Add; var xlsheet = xlBook.Worksheets(1); <!--合并--> xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).mergecells=true; xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,7)).value="发卡记录"; xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,3)).Interior.ColorIndex=5; // 设置底色为蓝色 // xlsheet.Range(xlsheet.Cells(1,1),xlsheet.Cells(1,6)).Font.ColorIndex=4; // 设置字体色 // xlsheet.Rows(1). Interior .ColorIndex = 5 ;//设置底色为蓝色 设置背景色 Rows(1).Font.ColorIndex=4 <!--设置行高--> xlsheet.Rows(1).RowHeight = 25; <!--设置字体 ws.Range(ws.Cells(i0+1,j0), ws.Cells(i0+1,j1)).Font.Size = 13 --> xlsheet.Rows(1).Font.Size=14; <!--设置字体 设置选定区的字体 xlsheet.Range(xlsheet.Cells(i0,j0), ws.Cells(i0,j0)).Font.Name = "黑体" --> xlsheet.Rows(1).Font.Name="黑体"; <!--设置列宽 xlsheet.Columns(2)=14;--> xlsheet.Columns("A:D").ColumnWidth =18; <!--设置显示字符而不是数字--> xlsheet.Columns(2).NumberFormatLocal="@"; xlsheet.Columns(7).NumberFormatLocal="@"; //设置单元格内容自动换行 range.WrapText = true ; //设置单元格内容水平对齐方式 range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//设置单元格内容竖直堆砌方式 //range.VerticalAlignment=Excel.XlVAlign.xlVAlignCenter //range.WrapText = true; xlsheet.Rows(3).WrapText=true 自动换行 //设置标题栏 //xlsheet.Cells(2, 1).Value = "卡号"; //xlsheet.Cells(2, 2).Value = "密码"; //xlsheet.Cells(2, 3).Value = "计费方式"; //xlsheet.Cells(2, 4).Value = "有效天数"; //xlsheet.Cells(2, 5).Value = "金额"; //xlsheet.Cells(2, 6).Value = "所属服务项目"; //xlsheet.Cells(2, 7).Value = "发卡时间"; var oTable = document.all['fors:data']; var rowNum = oTable.rows.length; for(i = 1; i <= rowNum; i++) { for (j = 1; j <= 7; j++) { //html table类容写到excel xlsheet.Cells(i + 1, j).Value = oTable.rows(i - 1).cells(j - 1).innerHTML; } } <!-- xlsheet.Range(xls.Cells(i+4,2),xls.Cells(rowNum,4)).Merge; --> // xlsheet.Range(xlsheet.Cells(i, 4), xlsheet.Cells(i-1, 6)).BorderAround , 4 // for(mn=1,mn<=6;mn++) . xlsheet.Range(xlsheet.Cells(1, mn), xlsheet.Cells(i1, j)).Columns.AutoFit; xlsheet.Columns.AutoFit; xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(rowNum+1,7)).HorizontalAlignment =-4108;//居中 xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(1,7)).VerticalAlignment =-4108; xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Font.Size=10; xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(3).Weight = 2; //设置左边距 xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(4).Weight = 2;//设置右边距 xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(1).Weight = 2;//设置顶边距 xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,7)).Borders(2).Weight = 2;//设置底边距 xls.UserControl = true; //很重要,不能省略,不然会出问题 意思是excel交由用户控制 xls=null; xlBook=null; xlsheet=null; } </script> </head> <body> <input type="button" name="fors:_id7" value="生成excel文件" onclick=MakeExcel() /> <table id="fors:data" border="1" cellpadding="0" cellspacing="1" width="100%"> <tr> <td>卡号</td> <td>密码</td> <td>计费方式</td> <td>有效天数</td> <td>金额</td> <td>所属服务项目</td> <td>发卡时间</td> </tr> <tr> <td>h000010010</td> <td>543860</td> <td>计点</td> <td>1 </td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010011</td> <td>683352</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010012</td> <td>433215</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010013</td> <td>393899</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010014</td> <td>031736</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010015</td> <td>188600</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010016</td> <td>363407</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010017</td> <td>175315</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010018</td> <td>354437</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> <tr> <td>h000010019</td> <td>234750</td> <td>计点</td> <td>1</td> <td>2.0</td> <td>测试项目</td> <td>2006-06-23 10:14:40.843</td> </tr> </table> </body> </html>