html页面表格导出excel出现科学计数法问题的解决
用
IE
的用户,如果一个
html
页面有
table
的话,可以把
table
导出到
excle
文件里面,但是经常遇到会把身份证等数字比较长的数据改成科学计数法来显
示。很是头疼。
有说加个单引号可以解决,
但是我这里测试,
显示和导出的结果都有单引号。
效
果不好。
同事找到一个解决方案比较好。在
html
页面里面加上一段
css
然后在出现问题的字段应用这种
style
就可以了。
测试通过。神奇
<
styletype
="
text
/
css
">
<!--
td
{
background-color:
#FFFFFF
;
}
.txt
{
padding-top:
1
px
;
padding-right:
1
px
;
padding-left:
1
px
;
mso-ignore:
padding;
color:
black
;
font-size:
11.0
pt
;
font-weight:
400
;
font-style:
normal
;
text-decoration:
none
;
font-family:
宋体
;
mso-generic-font-family:
auto
;
mso-font-charset:
134
;
mso-number-format:
"\@";
text-align:
general;
vertical-align:
middle
;
mso-background-source:
auto
;
mso-pattern:
auto
;
white-space:
nowrap
;
}
-->
</
style
>
我试了发现上面的不管用,搜索发现网上还有一种说法:
-----------------------------------------------------
查了大半天终于查到了一点有用的资料,现在摘抄如下:
“首先,
我们了解一下
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>
同
样,我们也可以给
<div></div>
添加样式,也可以给
<tr>< /tr>
,
<table></table>
添加样式
;
当我们在父标签对和子标签对都添加样式时,
数据会
以哪一个样式呈现
呢?经过测试,会以离数据最近的样式呈现
.
”
于是按照他说的方法设置了导出数据时对应的身份证列的
<td>
的样式:
echo "<td style='vnd.ms-excel.numberformat:@'>".$printable."</td>\n";
果然成功了,没有枉费了查半天的资料。
-----------------------------------------------------
我测试正确的:
结果测试时发现,在前面加个
'
就可以了。只不过在页面上显示时要隐藏掉
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<style>
.txt{
display:none;
}
</style>
<SCRIPT LANGUAGE="JavaScript">
function ExpExcel(){
// Start Excel and get Application object.
var oXL = new ActiveXObject("Excel.Application");
// Get a new workbook.
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
//var table = document.all.data;
var table=document.getElementById("dataTab");
var hang = table.rows.length;
var lie = table.rows(0).cells.length;
// Add table headers going cell by cell.
for (i=0;i<hang;i++){
for (j=0;j<lie;j++){
oSheet.Cells(i+1,j+1).Value = table.rows(i).cells(j).innerText;
}
}
oXL.Visible = true;
oXL.UserControl = true;
}
</script>
</HEAD>
<BODY>
<input type="button" value="
导出
EXCEL" οnclick="ExpExcel()"/>
<table border="1" id="dataTab">
<tr>
<th>Month</th>
<th>Savings</th>
<th>mobile</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
<td><font class="txt">'</font>13633936220</td>
</tr>
<tr>
<td>January</td>
<td>$100</td>
<td><font class="txt">'</font>13633936220</td>
</tr>
<tr>
<td>January</td>
<td>$100</td>
<td><font class="txt">'</font>13633936220</td>
</tr>
</table>
</BODY>
</HTML>
利用
Excel
的
mso-number-format
语法,指定成
CSS
格式即可:
<style type="text/css">
<!--
td {
mso-number-format:"\@";
}
-->
</style>
mso-nubber-format
的格式用法如下:
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