PHPexcel的使用

 

多工作空间,浏览器直接下载样例:

include_once API_SOURCE_ROOT.'lib/PHPExcel.php';
$obpe = new PHPExcel();
$name = "抓拍信息.xls";
$time = date('Y/m/d h:m:sa',time());
$obpe->getProperties()->setCreator("admin")
    ->setLastModifiedBy($time)
    ->setTitle("Office 2007 XLSX Document")
    ->setSubject("EVENT LIST")
    ->setDescription("EVENT LIST")
    ->setKeywords("EVENT LIST")
    ->setCategory("catagory");

$data = array(...);
//设置SHEET
$obpe->setactivesheetindex(0);
//标题
$letter = array('A','B','C','D');
$title = array('设备号','设备名称','Face ID','抓拍时间');
foreach ($title as $tk => $tv) {
    $obpe->getactivesheet()->setCellValue("$letter[$tk]1",$title[$tk]);
    //加粗
    $obpe->getactivesheet()->getStyle("$letter[$tk]1")->getFont()->setBold(true);
    # code...
}
//写入多行数据
foreach($data as $k=>$v){
    $i = $k+2;
    /* @func 设置列 */
    $obpe->getactivesheet()->setcellvalue('A'.$i, $v['deviceid']);
    $obpe->getactivesheet()->setcellvalue('B'.$i, $v['desc']);
    $obpe->getactivesheet()->setcellvalue('C'.$i, $v['face']['face_id']);
    $obpe->getactivesheet()->setcellvalue('D'.$i, $v['time']);
}
$obpe->getActiveSheet()->setTitle('具体抓拍信息');

//创建一个新的工作空间(sheet)
$obpe->createSheet();
$obpe->setactivesheetindex(1);
$result = array(...);
$c=1;
foreach($result as $ck=>$cv){
    /* @func 设置列 */
    $obpe->getactivesheet()->setcellvalue('A'.$c, "设备号:".$ck);
    //合并单元格
    $obpe->getActiveSheet()->mergeCells( 'A'. $c .':' .'C'.$c);
    $c++;
    $obpe->getactivesheet()->setcellvalue('A'.$c, "今日到店人次");
    $obpe->getactivesheet()->setcellvalue('B'.$c, "今日到店人数");
    $obpe->getactivesheet()->setcellvalue('C'.$c, "今日新增人数");
    $c++;
    $obpe->getactivesheet()->setcellvalue('A'.$c, $count_result['renci']["$ck"]);
    $obpe->getactivesheet()->setcellvalue('B'.$c, $count_result['renshu_count']["$ck"]);
    $obpe->getactivesheet()->setcellvalue('C'.$c, $count_result['xinzeng']["$ck"]);
    $c++;
}
$obpe->getActiveSheet()->setTitle('总数据统计');

//居中展示
$obpe->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$obpe->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

header('Cache-Control: max-age=0');
header('Cache-Control: max-age=1');
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
//直接在浏览器输出
$obwrite = PHPExcel_IOFactory::createWriter($obpe, 'Excel5');
header('Pragma: public');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Content-Type:application/force-download');
header('Content-Type:application/vnd.ms-execl');
header('Content-Type:application/octet-stream');
header('Content-Type:application/download');
header('Content-Disposition: attachment;filename="'.$name.'"');
header('Content-Transfer-Encoding:binary');
$obwrite->save('php://output');
exit;

插入图片:(单元格其实不支持插入图片,图片只是悬浮于设置的单元格位置)

$img_path = '/data/phpexcel/1.jpg';
if (!file_exists($img_path))
    return false;
// 图片生成
$objDrawing[$i] = new \PHPExcel_Worksheet_Drawing();
$objDrawing[$i]->setPath($img_path);
// 设置宽度高度
$objDrawing[$i]->setHeight(80);//照片高度
$objDrawing[$i]->setWidth(80); //照片宽度
/*设置图片要插入的单元格*/
$objDrawing[$i]->setCoordinates('A'.$i);
// 图片偏移距离
$objDrawing[$i]->setOffsetX(12);
$objDrawing[$i]->setOffsetY(12);
$objDrawing[$i]->setWorksheet($obpe->getActiveSheet());

常用用法:

(1)PHPExcel:工作簿对象

    getProperties():获得当前活动状态工作表的属性对象,返回属性对象
    getActiveSheet():获得当前活动状态的工作表,返回工作表对象
    getActiveSheetIndex():获得当前活动状态工作表的索引值,返回int
    setActiveSheetIndex():设置当前活动状态工作表的索引,返回工作表对象
    getSheetByName():通过工作表名称得到当前工作表对象,返回工作表对象
    getDefaultStyle():获得excel文档默认的样式(所有工作表的样式),返回样式对象
    createSheet():在当前活动工作表后创建一个新的工作表
    getSheetCount():获得excel文档中工作表的数量,返回int
    getSheetNames():获得excel文档中所有工作表名称组成的数组

2)PHPExcel_Worksheet:工作表对象
    toArray():把工作表中的数据转换成数组
    fromArray():从数组中获取数据填充到工作表,返回工作表对象
    getCell():获得单元格对象
    getCellByColumnAndRow():通过列索引和行索引获得指定单元格,返回单元格对象
    getDefaultStyle():获得工作表默认的样式,返回样式对象
    getHighestColumn():获得工作表的最大列,返回列的名称
    getColumnDimension():获得当前列
    getStyle():获得指定单元格的样式,返回样式对象
    getParent():获得父类对象,返回excel文档对象
    getTitle():获得工作表的标题或名称,返回字符串类型
    setCellValue():设置单元格的值,返回工作表对象或单元格对象,完全取决于参数的值
    setCellValueByColumnAndRow():通过列索引和行索引设置单元格的值,返回类型同上
    setCellValueExplicit():设置单元格的值,并显示指定数据类型,返回工作表对象
    setCellValueExplicitByColumnAndRow():通过列和行索引设置单元格值
    setTitle():设置工作表标题

(3)PHPExcel_Cell:单元格对象
  a. PHPExcel_Style:样式对象
    getActiveCell():获得当前活动的单元格的名称,返回string;如,A1
    getActiveSheet():获得当前活动的工作表,返回工作表对象
    getAlignment():获得对齐方式对象,返回对齐方式对象
    getBorders():获得边框对象,返回边框对象
    getFill():获得填充对象
    getFont():获得字体对象
    setFont():设置字体,返回样式对象
b. PHPExcel_Style_Alignment:对齐方式对象
    getHorizontal():获得水平居中方式
    getVertical():获得垂直居中方式
    setHorizontal():设置水平居中方式,返回对齐方式对象
    setVertical():设置垂直居中方式,返回对齐方式对象
    居中方式:
        HORIZONTAL_CENTER 
        HORIZONTAL_CENTER_CONTINUOUS
        HORIZONTAL_GENERAL 
        HORIZONTAL_JUSTIFY 
        HORIZONTAL_LEFT 
        HORIZONTAL_RIGHT 
        VERTICAL_BOTTOM 
        VERTICAL_CENTER 
        VERTICAL_JUSTIFY 
        VERTICAL_TOP 
c. PHPExcel_Style_Font:字体对象
    setBold():设置字体加粗
    setColor():设置字体颜色
    setItalic():设置字体倾斜
    setName():设置字体名
    setSize():设置字体大小
    setUnderline():设置字体下划线

//设置文档基本属性  
$objProps = $objExcel->getProperties();  //得到PHPExcel_document文档对象
$objProps->setCreator("Swain");       //设置作者
$objProps->setLastModifiedBy("Swain"); //设置最后修改时间
$objProps->setTitle("Office XLS Test Document"); //设置标题
$objProps->setSubject("Office XLS Test Document, Demo");//设置主题
$objProps->setDescription("Test document, generated by PHPExcel.");//描 
$objProps->setKeywords("office excel PHPExcel"); //关键字
$objProps->setCategory("Test"); //分类

//合并单元格  
$objActSheet->mergeCells('B1:C22'); 

//设置列的宽度  
$objActSheet->getColumnDimension('B')->setAutoSize(true);
$objActSheet->getColumnDimension('A')->setWidth(30);

/设置行的高度
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(11.5);

//设置单元格的字体
$objFontA5 = $objStyleA5->getFont(); //获得字体
$objFontA5->setName('宋体');//设置字体名称 
$objFontA5->setSize(10);  //设置字体大小
$objFontA5->setBold(true);//设置字体加粗
$objFontA5->getColor()->setARGB('FF999999');//设置字体颜色

//设置单元格的对齐方式  
$objAlignA5 = $objStyleA5->getAlignment();//获得对齐方式
$objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//水平居右 
$objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);//垂直居中

//设置单元格的边框  
$objBorderA5 = $objStyleA5->getBorders();//获取边框 
$objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//边框样式
$objBorderA5->getTop()->getColor()->setARGB('FFFF0000');//顶部边框的颜色 
$objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN); 
$objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//左样式
$objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);//右样式

//设置单元格的填充色
$objFillA5 = $objStyleA5->getFill();//填充 
$objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);//填充类型 
$objFillA5->getStartColor()->setARGB('FFEEEEEE');

//计算单元格的值
$objPHPExcel->getActiveSheet()->setCellValue('B7', '=SUM(B5:C5)');
$objPHPExcel->getActiveSheet()->getCell('B7')->getCalculatedValue();
//如果要获取单元格的一个值,首先需要通过工作表的getCell方法获取到一个单元格对象,然后再通过单元格对象的getValue方法得到单元格的值,如果单元格的值是通过计算得到的,则需要使用getCalculatedValue方法获取单元格的值,设置单元格的值,我们只需要通过工作表的setCellValue方法来设置即可

//$dateTimeNow=time();
$objPHPExcel->getActiveSheet()->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));//41105.75

$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);//18:00:54,只是换了一种显示方式,并不会改变原来值的类型

//添加一个新的worksheet  
$objExcel->createSheet();//创建一个新的工作表
$objExcel->getSheet(1)->setTitle('测试2');//设置当前工作表的标题

//保护单元格  
$objExcel->getSheet(1)->getProtection()->setSheet(true); 
$objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');  

//输出内容到excel文件,并将文件保存在服务器上
$objWriter->save("test.xls");

//强制输出内容到浏览器下载  
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
header('Content-Disposition:inline;filename="'.$outputFileName.'"'); 
header("Content-Transfer-Encoding: binary"); 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Pragma: no-cache");  
$objWriter->save('php://output');//参数-表示直接输出到浏览器,供客户端下载

//合并单元格
$objPHPExcel->getActiveSheet()->mergeCells('A1:C3');

//excel读取对象
$PHPReader = new PHPExcel_Reader_Excel5();//创建一个excel文件的读取对象
$PHPExcel = $PHPReader->load($filePath);//读取一张excel表,返回excel文件对象
$currentSheet = $PHPExcel->getSheet(0);//读取excel文件中的第一张工作表
$allColumn = $currentSheet->getHighestColumn();//取得当前工作表最大的列号,如,E
$allRow = $currentSheet->getHighestRow();//取得当前工作表一共有多少行

 

phpexcel解决导出大量数据内存溢出的办法(ERR_INVALID_RESPONSE)

在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过

PHPExcel_Settings::setCacheStorageMethod()

来设置不同的缓存方式,已达到降低内存消耗的目的!

1、将单元格数据序列化后保存在内存中

PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 

2、将单元格序列化后再进行Gzip压缩,然后保存在内存中

PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 

3、缓存在临时的磁盘文件中,速度可能会慢一些

PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;

4、保存在php://temp

PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 

5、保存在memcache中

PHPExcel_CachedObjectStorageFactory::cache_to_memcache

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;  
$cacheSettings = array( 'memcacheServer'  => 'localhost',  
                        'memcachePort'    => 11211,  
                        'cacheTime'       => 600  
                      );  
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

注意是加在new PHPExcel() 前面:如下

require_once APPPATH .'third_party/PHPExcel/PHPExcel.php';
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize'=>'20MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$objPHPExcel = new PHPExcel();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值