Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 351|回复: 0

jsp 页面导出excel时字符串数字变成科学计数法的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-5-1 19:18:49 | 显示全部楼层 |阅读模式

    web导出excel数据格式化

    原文地址:http://www.cnblogs.com/myaspnet/archive/2011/05/06/2038490.html

     

     
    当我们把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>

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-19 04:03 , Processed in 0.122527 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表