保捱科技网
您的当前位置:首页PHPExcel导入导出常用方法总结

PHPExcel导入导出常用方法总结

来源:保捱科技网
PHPExcel导⼊导出常⽤⽅法总结

最近公司后台管理系统需求,要⽤PHP导出excel表格数据,所以特整理了⼀下常⽤的⽅法供⼤家参考:PHPExcel扩展包地址:⼤致的分为⼏个部分:⼀、导出的⽅法及步骤

1.引⼊PHPExcel⽂件:require_once(\"../Classes/PHPExcel.php\");2.实例化PHPExcel:$ObjPHPExcel = new PHPExcel();3.获取当前⼯作sheet:$ObjPHPExcel->getACtiveSheet();

4.给当前⼯作表设置名称:$ObjPHPExcel->setTitle('sheet表名称');5.添加数据,赋值:$ObjPHPExcel->setCellValue('单元格坐标','值');

6.按照指定格式⽣成excel⽂件: $ObjPHPExcel->PHPExcel_IOFactory::createWriter($ObjPHPExcel,'Excal5');7.保存Excel⽂件:$ObjPHPExcel->save('保存路径及⽂件名');8.如果要将⽣成的Excel⽂件输出到浏览器: Excel5需要添加以下代码:

header(\"Content-type:application/vnd.ms-excel\");//输出Excel03⽂件 header(\"Content-Disposition:attachment;filename=test.xls'); header(\"Content-Control:max-age = 0\"); $ObjPHPExcel->save(\"php://output\"); Excel7需要添加以下代码:

header(\"Content-type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\");//输出Excel07⽂件 header(\"Content-Disposition:attachment;filename=test.xlsx');//浏览器输出⽂件名称 header(\"Content-Control:max-age = 0\");//禁⽌浏览器缓存 $ObjPHPExcel->save(\"php://output\");

⼆、Excel样式控制

1.合并单元格:$ObjPHPExcel->getActiveSheet()->mergeCells('A18:E22');2.拆分单元格:$ObjPHPExcel->getActiveSheet()->unmergeCells('A18:E22');

3.设置默认单元格⽔平⽅向居中:$ObjPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER);4.设置默认单元格垂直⽅向居中:$ObjPHPExcel->getDefaultStyle()->getAlignment()->setvertical( PHPExcel_Style_Alignment::VERTICAL_CENTER);5.设置默认字体样式:字体类型: $ObjPHPExcel->getDefaultStyle()->getFont()->setName('微软雅⿊'); 字体⼤⼩:$ObjPHPExcel->getDefaultStyle()->getFont()->setSize(14);

6.设置指定字体样式:$ObjPHPExcel->getStyle('A18:E22')->getFont()->setName('微软雅⿊'); 字体⼤⼩:$ObjPHPExcel->getStyle('A18:E22')->getFont()->setSize(14);

7.设置背景颜⾊:填充⽅式(完全填充):$ObjPHPExcel->getStyle('B2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); 填充颜⾊:$objPHPExcel->getStyle('B2')->getFill()->getStartColor()->setARGB('FFFF0000');8.设置边框:

$styleArray = array( 'borders' => array( 'outline' => array(

'style' => PHPExcel_Style_Border::BORDER_THICK, 'color' => array('argb' => 'FFFF0000'), ), ), );

$objWorksheet->getStyle('B2:G8')->applyFromArray($styleArray); 调⽤getStyle()⽅法的,参数都可以通过数组的⽅式传⼊。9.⾃动换⾏:

  开启⾃动换⾏:$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);

在需要换⾏的值中添加\\n,然后才能⾃动换⾏:$objPHPExcel->getActiveSheet()->getCell('A1')->setValue(\"hello\\nworld\");10.设置单元格格式:

  设置单元格格式为字符串(解决⾝份证活⼿机号格式为科学记数法):$objPHPExcel->getActiveSheet()->getCell('A1')->setValueExplicit('25', PHPExcel_Cell_DataType::TYPE_STRING);

三、添加图⽚、标注

1.添加图⽚:

$ObjSheet = $ObjPHPExcel->getActiveSheet();////获取当前sheet表

$ObjDrawing = new PHPExcel_WorkSheet_Drawing();//获取⼀个图⽚的操作对象 $ObjDrawing->setPath(\"图⽚路径\");//加载图⽚路径

$ObjDrawing->setCoordinates('F5');//设置图⽚插⼊左上⾓坐标 $ObjDrawing->setWidth(500);//设置图⽚宽度(等⽐缩放)

$ObjDrawing->setHeight(100);//设置图⽚⾼度(等⽐缩放)如果宽度和⾼度同时设置,图⽚会等⽐缩放两次,这⾥需要注意 $ObjDrawing->setOffsetX(20);//设置单元格内偏移量,不能超过单元格宽度,否则⽆效 $ObjDrawing->setOffsetY(20);//设置单元格内偏移量,不能超过单元格⾼度,否则⽆效 $ObjDrawing->setWorkSheet($ObjSheet);//将图⽚插⼊到sheet中2.添加丰富⽂字块(即单元格内⽂字设置不同的样式)

$ObjRichtext = new PHPExcel_RichText();//获得⼀个⽂字块操作对象 $ObjRichtext->createText('⽂字内容');//添加正常的⽂字

$ObjStyleFont = $ObjRichtext->createTextRun(\"需要修改格式的⽂字内容\");//添加需要修改样式的⽂字 $ObjStyleFont->getFont()->setSize(16)->setBold(True);//设置⽂字样式 $ObjRichtext->createText('⽂字内容');//添加正常的⽂字

$ObjSheet->getCell('A4')->setValue($ObjRichtext);//将⽂字块插⼊sheet中3.添加批注:(注:合并单元格添加注释功能Excel2007以上才⽀持)

$ObjSheet->getComment(\"F4\")->gettext()->createTextRun('批注内容');4.超链接:

$ObjSheet->setCellValue('B1','百度');

$ObjSheet->getCell('B1')->getHyperlink()->setUrl(\"https://www.baidu.com\");

四、⽣成图形报表(折线、饼状、柱状、区域等等)

这块的内容⽐较多,⽇常⽤到可能⽐较少,我就没有给⼤家总结,不过可以详见PHPExcel扩展包中Examples⽬录下的实例PHP⽂件,有很多demo,注释也很清楚。

五、Excel导⼊⽂件(全部加载)

1.引⼊PHPExcel导出⽂件:require_once(\"../Classes/PHPExcel/IOFactory.php\");

2.加载需要Excel的Excel⽂件:$ObjPHPExcel->PHPExcel_IOFactory::load($filename);3.获取excel⽂件中有多少个sheet:$sheetCount = $ObjPHPExcel->getSheetCount();4.遍历sheet,将所有sheet中的数据组成数组: for($i=0;$i<$sheetCount;$i++){

$dataArray = $ObjPHPExcel->getSheet($i)->toArray(); }

5.上边⽅法只能获取Excel中所有数据,如过需要筛选数据,⽅法如下: foreach($ObjPHPExcel->getWorksheetIterator as $sheet){ foreach($ObjPHPExcel->getRowIterator as $row ){ if($row->getRowIndex() < 3){ continue;

}//获取⾏号,只获取第三⾏之后的数据

foreach($ObjPHPExcel->getCellIterator as $cell){ $data = $cell->getValue();//获取单元格数据 } } }

六、Excel导⼊⽂件(部分加载)

1.获取excel⽂件类型(xls\\xlsx...):$file_type = PHPExcel_IOFactory::identify($filename);2.获取⽂件读取操作对象:$objReader = PHPExcel_IOFactory::createReader($file_type);3.指定需要加载sheet的名称:$sheetName = arrat('sheet1','sheet2');

4.根据sheet名称加载数据:$objReader->setLoadSheetsOnly($sheetName);

必须要注意的的是PHPExcel对内存占⽤很⼤,在不进⾏特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,⼀个单元格⼤概占⽤1KB。为了应对内存占⽤的问题:

1.可以使⽤PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存⽅式,已达到降低内存消耗的⽬的!需要注意的是:必须在new PHPExcel对象之前添加。2.将单元格数据序列化后保存在内存中

  PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 3.将单元格序列化后再进⾏Gzip压缩,然后保存在内存中

  PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 4.缓存在临时的磁盘⽂件中,速度可能会慢⼀些

  PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;5.保存在php://temp

  PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 6.保存在memcache中

  PHPExcel_CachedObjectStorageFactory::cache_to_memcache。

举两个应对内存占⽤问题的⼩例⼦:

eg1:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;//选择缓存⽅式 $cacheSettings = array('memoryCacheSize'=>'16MB');//缓存设置

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//设置缓存 $objPHPExcel = new PHPExcel();eg2:

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;//选择缓存⽅式 $cacheSettings = array(

'memcacheServer' => 'localhost', 'memcachePort' => 11211, 'cacheTime' => 600 );//memcache缓存设置

PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//设置缓存

这些基本能满⾜⽇常开发需要,如果要更复杂的需求,⼤家可以详见PHPExcel扩展包中Examples⽬录下的实例PHP⽂件,有很多demo,注释也很清楚。或者翻阅PHPExcel的官⽅⽂档。

因篇幅问题不能全部显示,请点此查看更多更全内容