PHP导出格式化的EXCEL
在WEB中进行数据的导入导出可真麻烦,导入还好一些,一般原始文件你都是用EXCEL保存的,而CSV格式却是以逗号最为分隔符的,所以我们只需要打开EXCEL文件,再另存为CSV格式即可用PHP来进行读取操作了。
相反,导出数据为EXCEL格式就麻烦多了,比如:某一个值是以0开头、数据库中是一个很长的数字串,那么简单的导出就会出现问题了,0开头的EXCEL全把开头的0忽略了,而长串在EXCEL中又是以指数形式保存,所以并不能简单的导出。
网上也有很多高手已经写好的类,比如PHPExcel、spreadsheet等等,PHPExcel试了下,没搞明白,解决不了前面提到的两个问题,而网上虽然有关于这个问题的说明,可拿来就是没用,大家也是普片转载,千篇一律,只好放弃。OK,去论坛,在PHP China论坛中终于有人指引了我,不过他给的方法可以解决第一个问题,当然,第二个问题只需要简单修改就行了。
原文地址:http://www.phplamp.org/2008/06/php-to-excel-clas
我的简单修改:
<?php foreach ($array as $k => $v): if(is_numeric($v)) {
if(substr($v, 0, 1) == 0) {
$cells .= "<Cell><Data ss:Type=/"String/">".$v."</Data></Cell>/n"; } else { if(strlen($v)>=12){
$cells .= "<Cell><Data ss:Type=/"String/">".$v."</Data></Cell>/n"; }else{ $cells .= "<Cell><Data ss:Type=/"Number/">".$v."</Data></Cell>/n"; } } } else { $cells .= "<Cell><Data ss:Type=/"String/">" . $v . "</Data></Cell>/n"; } endforeach; ?>
使用方法:
<?php require_once('excel.php'); mysql_connect($dbhost,$dbuser,$dbpass); $sql="select * from table"; $exe=mysql_query($sql); for ($k = 0; $k < mysql_num_fields($exe); $k++) $doc[0][$k]=mysql_field_name($exe,$k); $i=1; while($row=mysql_fetch_assoc($exe))
//这里不要用mysql_fetch_array()
{
$doc[$i]=$row;
$i++;
}
$xls = new Excel();
$xls->addArray ( $doc );
$xls->generateXML ("mytest");
//mytest即保存EXCEL文件时的名字,自定义
?>
点击下载excel.php文件
mysql_fetch_array()与mysql_fetch_assoc()区别:
mysql_fetch_array默认是包含关联和数字索引的,使用时是还有一个可选参数int$result_type,取值范围:MYSQL_ASSOC, MYSQL_NUM,MYSQL_BOTH,但我们一般在用的时候很少设置这个参数,所以默认是MYSQL_BOTH,这样当我们要取得返回值的时候可以直接用数字下标比如$row[0],也可以用列名作为下标比如$row[name],而mysql_fetch_assoc()只返回关联数组,跟mysql_fetch_array()加上MYSQL_ASSOC参数一起使用的效果是一样的。