php导出excel长数字显示成科学计数法格式的解决方案php
首先,咱们了解一下excel从web页面上导出的原理。当咱们把这些数据发送到客户端时,咱们想让客户端程序(浏览器)以excel的格式读取它,因此把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每一个cell的格式呈现数据,若是cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给咱们提供了自定义数据格式的空间,固然咱们必须使用excel支持的格式。下面就列出经常使用的一些格式:html
1) 文本:vnd.ms-excel.numberformat:@mysql
2) 日期:vnd.ms-excel.numberformat:yyyy/mm/ddweb
3) 数字:vnd.ms-excel.numberformat:#,##0.00sql
4) 货币:vnd.ms-excel.numberformat:¥#,##0.00浏览器
5) 百分比:vnd.ms-excel.numberformat: #0.00%app
这些格式你也能够自定义,好比年月你能够定义为:yy-mm等等。那么知道了这些格式,怎么去把这些格式添加到cell中呢?很简单,咱们只须要把样式添加到对应的标签对(即闭合标签)便可。如<td></td>,给标签对<td></td>添加样式,以下:ide
<tdstyle="vnd.ms-excel.numberformat:@">410522198402161833</td>测试
一样,咱们也能够给<div></div>添加样式,也能够给<tr></tr>,<table></table>添加样式,这样就会引入一个问题,你注意到了吗?先看以下的代码:fetch
<tablestyle=’vnd.ms-excel.numberformat:#,##0.00’>
<tr>
<td>542</td>
<tdstyle=’vnd.ms-excel.numberformat: #0.00%’>0.25</td>
</tr>
</table>
当咱们在父标签对和子标签对都添加样式时,数据会以哪个样式呈现呢?通过测试,会以离数据最近的样式呈现,这也是符合咱们的意愿的(好像也符合一句俗话:县官不如现管)。这样咱们就能够经过改变样式而改变数据在excel中呈现的方式(这些样式规格你能够在前台页面上添加也能够在后台代码里给相应的控件如:DataGrid等添加这些样式)。若是你的应用比较简单,那么这已经足够知足你的需求。但若是你的应用比较复杂,那么你也能够采起一种方式来达到不一样的数据呈现效果。下面,我就举一个稍微复杂一点的应用。
例如:你的数据要呈现给不一样国家和地区的用户查看,这样数据的呈现的格式就会不同,那么咱们怎么解决这个问题呢?固然了,你能够手工把这些数据处理好,但这毕竟不是最好的方法,由于若是咱们每增长一个其余国家或地区的用户,那么咱们就须要把全部的数据以客户要求的格式处理一遍,当数据量很大时,这无疑是一件很沉重且无聊的工做。那么咱们究竟应该怎样解决相似这样的问题呢?下面我说一下,我本身的见解:把这些格式化的信息抽取到一个xml文件中,程序运行时根据不一样的客户读取不一样的格式化信息,而后把这些格式化信息动态的添加到咱们的数据上,这样,当咱们每增长一个其余国家或地区的用户时,咱们只须要多增长一个xml文件,把对应的格式化信息写入这个xml文件,而后当这个国家或地区的用户查看时,就把对应的格式化信息读取出来应用到数据上便可。
php导出excel实例以下:
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<?php
header('Content-Type:application/vnd.ms-excel;charset=gbk');
header("Content-Disposition:p_w_upload;filename=coupon_all.xls");
$tx='<span style="font-weight:bold;color:#ff0000;font-size:15px;">列表</span>';
echo$tx."\n\n";
echo"<table border=1 width=1002 style='text-align:center'>";
echo"\n";
echo"<tr>";
echo"<td></td>"."\t";
echo"</tr>";
echo"\n";
echo"<tr style='background:#DDECE9;font-weight:bold;'>";
echo"<td>序号</td>"."\t";
echo"<td>帐号</td>"."\t";
echo"<td>真实姓名</td>"."\t";
echo"<td>单位</td>"."\t";
echo"<td>×××号</td>"."\t";
echo"<td>省份</td>"."\t";
echo"<td>城市</td>"."\t";
echo"<td>手机</td>"."\t";
echo"<td>QQ</td>"."\t";
echo"<td>申请时间</td>"."\t";
echo"<td>备注</td>"."\t";
echo"\n";
echo"</tr>";
include('../conn.php');
$sql="select * from `chit` order by `createtime` desc;";
$query=mysql_query($sql,$conn);
$i=1;
while($row=mysql_fetch_array($query)){
echo"\n";
if($row['is_verify']=='-1'){
echo"<tr style='background:#FF8080'>";
}
elseif($row['is_verify']=='1'){
echo"<tr style='background:#D0E8FF'>";
}
else{
echo"<tr>";
}
echo"<td>".$i++."</td>"."\t";
echo"<td>".$row['username']."</td>"."\t";
echo"<td>".$row['realname']."</td>"."\t";
echo"<td>".$row['danweiname']."</td>"."\t";
echo"<td style='vnd.ms-excel.numberformat:@'>".$row['idcard']."</td>"."\t";
echo"<td>".$row['province']."</td>"."\t";
echo"<td>".$row['city']."</td>"."\t";
echo"<td>".$row['phone']."</td>"."\t";
echo"<td>".$row['qq']."</td>"."\t";
echo"<td>".date("Y-m-d H:i:s",$row['createtime'])."</td>"."\t";
echo"<td>".$row['verify_content']."</td>"."\t";
echo"</tr>";
echo"\n";
}
echo"</table>";
?>