正在加载

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参数一起使用的效果是一样的。

http://cn.php.net/mysql_fetch_array

http://cn.php.net/manual/en/function.mysql-fetch-assoc.php

评论(1条评论)

  1. 叶子 on 03月 1st, 2009 2:15 pm

    指点一下php吧 463499929 谢谢

    [Reply]

发表评论