php处理Excel步骤介绍

php处理Excel步骤介绍

遇到问题

平时在工作中,时常会出现将数据库表导出为Excel或者将Excel导入数据库表的需求。这一需求早早就已经实现过了,为了方便导入导出,兄弟连www.lampbrother.net将其分装成了两个方法作为记录。

代码实现

phpexcel类库的引用

phpexcel拥有强大的Excel处理能力,在packagist上已经拥有数百万次的下载量,不过实话实说,excel的处理速度仍然是非常慢,数据量较大时慎重使用。在packagist上下载或者直接用composerrequirephpoffice/phpexcel之后,便可以使用phpexcel了。

导出成为Excel

在绝大多数情况下,导出excel其实就是将二位数组转化为表格。

usenamespacePHPExcel;

/**

*@param$namestring要保存的Excel的名字

*@param$ret_data转换为表格的二维数组

*@throwsPHPExcel_Exception

*@throwsPHPExcel_Reader_Exception

*/

functionexportExcel($name,$ret_data){

$objPHPExcel=newPHPExcel();

//设置表格

$objPHPExcel->getProperties()->setCreator($name)

->setLastModifiedBy($name)

->setTitle("Office2007XLSXTestDocument")

->setSubject("Office2007XLSXTestDocument")

->setDescription("TestdocumentforOffice2007XLSX,generatedusingPHPclasses.")

->setKeywords("office2007openxmlphp")

->setCategory("Testresultfile");

//填充数据

foreach($ret_dataas$key=>$row){

$num=$key+1;

//$row=array_values($row);

$i=0;

foreach($rowas$key2=>$value2){

$objPHPExcel->setActiveSheetIndex(0)->setCellValue(Cell::stringFromColumnIndex($i).($num),$value2);

$i++;

}

}

//设置表格并输出

$objPHPExcel->getActiveSheet()->setTitle($name);

header('Content-Type:application/vnd.ms-excel');

header("Content-Disposition:attachment;filename={$name}.xls");

header('Cache-Control:max-age=0');

header('Cache-Control:max-age=1');

header('Last-Modified:'.gmdate('D,dMYH:i:s').'GMT');

header('Cache-Control:cache,must-revalidate');

header('Pragma:public');//HTTP/1.0

$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');

$objWriter->save('php://output');

exit;

}

导入Excel

同理,导入Excel其实就是将Excel的数据转化成为二维数组,这就要求Excel必须符合格式。

functiongetRows($inputFileName)

{

if(!file_exists($inputFileName)){

thrownewException("Filenotexisted");

}

$inputFileType=PHPExcel_IOFactory::identify($inputFileName);

$objReader=PHPExcel_IOFactory::createReader($inputFileType);

$objPHPExcel=$objReader->load($inputFileName);

$objWorksheet=$objPHPExcel->getActiveSheet();

$highestRow=$objWorksheet->getHighestRow();

$highestColumn=$objWorksheet->getHighestColumn();

$highestColumnIndex=PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数

$row=1;

$curr=array();

while($row<=$highestRow){

for($col=0;$col<$highestColumnIndex;$col++){

$value=str_replace(array("\n","\n\r","\r"),"",$objWorksheet->getCellByColumnAndRow($col,$row)->getValue());

$curr[$row][]=$value;

}

$row++;

}

array_shift($curr);//第一行一般是字段名(Excel中列的标题),导入时要移除

return$curr;

}

其他

导出时保存的格式是xlsx,想要改成其他格式需要传入不同的参数。

导入时如果有多个sheet时需要在上次打开时在要导入的sheet页(以保证当前sheet为activeSheet)关闭,或者根据sheet名在程序中选择sheet。

相关推荐