多工作空间,浏览器直接下载样例:
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();