最近看了excel 发现好多时候excel 这个表格处理软件,还是挺不错的!于是就想用php 来操作一下Excel! 说来也没什么的,就是借用了一个开源的phpexcel 的类!

但是,也是经过本人测试,所以记录了下!

首先是php 链接Access ,这个是比较简单的!

 
  
<? php
ini_set (max_execution_time , 3000 );
ini_set (memory_limit , " 1024M " );


function microtime_float()
{
list ( $usec , $sec ) = explode ( " " , microtime ());
return (( float ) $usec + ( float ) $sec );
}

$start_time = microtime_float();
error_reporting ( E_ERROR );
date_default_timezone_set(
' Asia/Shanghai ' );

/* * PHP Excel* */
require_once ' classes/PHPExcel.php ' ;

// Create new PHPExcel object
$objexcel = new PHPExcel();

// Set properties
$objexcel -> getProperties() -> setCreator( " Neve Zhang " ) -> setCategory( " Poem " );

// AddSome data
$conn = @ new com( " ADODB.Connection " ) or die ( ' ADO connnection failed ' );
if ( ! $conn ) {
echo " <h5>链接失败</h5> " ;
}
define ( ' filepath ' , dirname ( __FILE__ ));
define ( ' DB_HOST ' , filepath . " /data/data.mdb " );
$connstr = " driver={microsoft access driver (*.mdb)}; dbq= " . str_replace ( " / " , " \\ " , DB_HOST) . " ;uid='';pwd=''; " ;

$conn -> open( $connstr );
if ( $conn -> state == 0 ) {
$conn -> open( $connstr );
}
$sql = " select top 1000 * from poem " ;
$rs = @ new com( " adodb.recordset " );
$rs = $conn -> execute( $sql );
$fld = array ();
$i = 0 ;
$count = $rs -> fields -> count ();

while ( ! $rs -> eof) {
for ( $j = 0 ; $j < $rs -> fields -> count (); $j ++ ) {

$fld [ $i ][ $j ] = $rs -> fields[ $j ] -> value;
}



$rs -> Movenext();
$i = $i + 1 ;
}
$e_col = 2 ;

$objexcel -> setActiveSheetIndex( 0 )
-> setCellValue( " A1 " , " 序号 " )
-> setCellValue( " B1 " , " 标题 " )
-> setCellValue( " C1 " , " n_id " )
-> setCellValue( " D1 " , " z_id " )
-> setCellValue( " E1 " , " 内容 " )
-> setCellValue( " F1 " , " 注释 " )
-> setCellValue( " G1 " , " upsize_ts " );

foreach ( $fld as $rows ) {

// print_r($rows);
$e_row = ' A ' ;
// $num=intval($e_col/500);
foreach ( $rows as $cloums ) {

// echo $e_row.$e_col."=".$cloums;


$objexcel -> setActiveSheetIndex( 0 ) -> setCellValue( " $e_row " . " $e_col " , iconv ( ' GBK ' , ' utf-8 ' , $cloums ));
$e_row ++ ;
}
$e_col ++ ;
}
$objexcel -> getActiveSheet() -> setTitle( ' Poem Test ' );
$objWriter = PHPExcel_IOFactory :: createWriter( $objexcel , ' Excel2007 ' );
// $objWriter->save("5000poem.xlsx");

//$objWriter_2=new PHPExcel_Writer_Excel2007($objWriter);

/*
*header("Content-Type:text/xml; charset=UTF-8");
header("Progma:Public");
header("Expires:0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition:attachment;filename=resume.xlsx");
header("Content-Transfer-Encoding:binary");
* *
*/


header ( ' Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ' );
header ( ' Content-Disposition: attachment;filename="01simple.xlsx" ' );
header ( ' Cache-Control: max-age=0 ' );
$objWriter_2 =
$objWriter -> save( " php://output " );

/* *
$end_time=microtime_float();

echo $start_time."<br />";
echo $end_time;
$time=$end_time-$start_time;
echo "<br /><b>". sprintf( "%01.5f ", $time)."</b>";
*
*/

?>

其中一开始设置了php 的最大运行时间和最大运行内存,因为,是测试嘛!所以读了50000条的数据,内存一开始尽然512M 都显示耗尽!没办法,于是乎直接调整到1024M,这次是够了,最后统计了下时间, 发现竟然用了300多秒,差不多五分钟!

还好数据库字段不错,还能勉强运算完毕! 还好,excel2007 据说可以支持1,000,000 行的数据,于是那肯定是问题了!

对了,其实php 连接access 的步骤也是先建立一个connection,然后再创建一个记录集!然后,用movernext 来下移动指针,我也直接用了一个二维数组来转换recordset 记录集!可能有更好的办法!

其中其中有一点,就是recordset 转换来的二维数组,用var_dump() 这个函数总是输不出结果来,最后只有用print_f() 来查看数据!

上面的代码就是操作phpexcel 了,其中代码有点乱,许多都被我注释掉了!

其中有几个乱码的问题,在其中也是需要注意的,还有就是输出到客户端,其中也有细节要注意下! 不然的话,也会报excel的错误! 首先是版本不好弄错了,然后就是输出到客户端浏览器的页面不要再有任何的输出了! 尤其是其中被我注释掉的地方!

比如" echo" 之类!

转载于:https://www.cnblogs.com/neve/archive/2011/03/22/1991129.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐