PHP导出格式化的EXCEL

本文介绍了一种使用PHP导出格式化EXCEL文件的方法,解决了以0开头的数字和长数字串显示问题。通过调整数据类型输出方式,确保了导出数据的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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_ASSOCMYSQL_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值