PHP导出EXCEL快速开发指南
phpexcel有专有的开发文档,详细操作请参考其开发文档,本文档只是对其在使用上作了优化整合,便于在新项目中快速开发。
phpexcel生成文件同样有两种方式,一种方式为直接输出,一种方式为生成静态文件。
直接输出:
主文件为(class目录的同目录文件):
<?php
include(\"./class/class.php\"); // 包含class的基本头文件
include(\"./class/phpexcel/PHPExcel.php\"); // 生成excel的基本类定义(注意文件名的大小写)
// 如果直接输出excel文件,则要包含此文件
include(\"./class/phpexcel/PHPExcel/IOFactory.php\");
// 创建phpexcel对象,此对象包含输出的内容及格式
$m_objPHPExcel = new PHPExcel();
// 模板文件,为了实现格式与内容分离,有关输出文件具体内容实现在模板文件中
// 模板文件将对象$m_objPHPExcel进行操作
include(\"./include/excel.php\");
// 输出文件的类型,excel或pdf
$m_exportType = \"excel\";
$m_strOutputExcelFileName = date(\'Y-m-j_H_i_s\').\".xls\"; // 输出EXCEL文件名
$m_strOutputPdfFileName = date(\'Y-m-j_H_i_s\').\".pdf\"; // 输出PDF文件名
// PHPExcel_IOFactory, 输出excel
//require_once dirname(__FILE__).\'/Classes/PHPExcel/IOFactory.php\';
// 如果需要输出EXCEL格式
if($m_exportType==\"excel\"){
$objWriter = PHPExcel_IOFactory::createWriter($m_objPHPExcel, \'Excel5\');
// 从浏览器直接输出$m_strOutputExcelFileName
header(\"Pragma: public\");
header(\"Expires: 0\");
header(\"Cache-Control:must-revalidate, post-check=0, pre-check=0\");
header(\"Content-Type:application/force-download\");
header(\"Content-Type: application/vnd.ms-excel;\");
header(\"Content-Type:application/octet-stream\");
header(\"Content-Type:application/download\");
header(\"Content-Disposition:attachment;filename=\".$m_strOutputExcelFileName);
header(\"Content-Transfer-Encoding:binary\");
$objWriter->save(\"php://output\");
}
// 如果需要输出PDF格式
if($m_exportType==\"pdf\"){
$objWriter = PHPExcel_IOFactory::createWriter($m_objPHPExcel, \'PDF\');
$objWriter->setSheetIndex(0);
header(\"Pragma: public\");
header(\"Expires: 0\");
header(\"Cache-Control:must-revalidate, post-check=0, pre-check=0\");
header(\"Content-Type:application/force-download\");
header(\"Content-Type: application/pdf\");
header(\"Content-Type:application/octet-stream\");
header(\"Content-Type:application/download\");
header(\"Content-Disposition:attachment;filename=\".$m_strOutputPdfFileName);
header(\"Content-Transfer-Encoding:binary\");
$objWriter->save(\"php://output\");
}
?>
模板文件内容(附加常用操作)
<?php
global $m_objPHPExcel; // 由外部文件定义
// 设置基本属性
$m_objPHPExcel->getProperties()->setCreator(\"Sun Star Data Center\")
->setLastModifiedBy(\"Sun Star Data Center\")
->setTitle(\"Microsoft Office Excel Document\")
->setSubject(\"Test Data Report -- From Sunstar Data Center\")
->setDescription(\"LD Test Data Report, Generate by Sunstar Data Center\")
->setKeywords(\"sunstar ld report\")
->setCategory(\"Test result file\");
// 创建多个工作薄
$sheet1 = $m_objPHPExcel->createSheet();
$sheet2 = $m_objPHPExcel->createSheet();
// 通过操作索引即可操作对应的工作薄
// 只需设置要操作的工作簿索引为当前活动工作簿,如
// $m_objPHPExcel->setActiveSheetIndex(0);
// 设置第一个工作簿为活动工作簿
$m_objPHPExcel->setActiveSheetIndex(0);
// 设置活动工作簿名称
// 如果是中文一定要使用iconv函数转换编码
$m_objPHPExcel->getActiveSheet()->setTitle(iconv(\'gbk\', \'utf-8\', \'测试工作簿\'));
// 设置默认字体和大小
$m_objPHPExcel->getDefaultStyle()->getFont()->setName(iconv(\'gbk\', \'utf-8\', \'宋体\'));
$m_objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
// 设置一列的宽度
$m_objPHPExcel->getActiveSheet()->getColumnDimension(\'A\')->setWidth(15);
// 设置一行的高度
$m_objPHPExcel->getActiveSheet()->getRowDimension(\'6\')->setRowHeight(30);
// 合并单元格
$m_objPHPExcel->getActiveSheet()->mergeCells(\'A1:P1\');
// 定义一个样式,加粗,居中
$styleArray1 = array(
\'font\' => array(
\'bold\' => true,
\'color\'=>array(
\'argb\' => \'00000000\',
),
),
\'alignment\' => array(
\'horizontal\' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
),
);
// 将样式应用于A1单元格
$m_objPHPExcel->getActiveSheet()->getStyle(\'A1\')->applyFromArray($styleArray1);
// 设置单元格样式(黑色字体)
$m_objPHPExcel->getActiveSheet()->getStyle(\'H5\')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_BLACK); // 黑色
// 设置单元格格式(背景)
$m_objPHPExcel->getActiveSheet()->getStyle(\'H5\')->getFill()->getStartColor()->setARGB(\'00ff99cc\'); // 将背景设置为浅粉色
// 设置单元格格式(数字格式)
$m_objPHPExcel->getActiveSheet()->getStyle(\'F1\')->getNumberFormat()->setFormatCode(\'0.000\');
// 给特定单元格中写入内容
$m_objPHPExcel->getActiveSheet()->setCellValue(\'A1\', \'Hello Baby\');
// 设置单元格样式(居中)
$m_objPHPExcel->getActiveSheet()->getStyle(\'H5\')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
// 给单元格中放入图片, 将数据图片放在J1单元格内
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName(\'Logo\');
$objDrawing->setDescription(\'Logo\');
$objDrawing->setPath(\"../logo.jpg\"); // 图片路径,只能是相对路径
$objDrawing->setWidth(400); // 图片宽度
$objDrawing->setHeight(123); // 图片高度
$objDrawing->setCoordinates(\'J1\');//单元格
$objDrawing->setWorksheet($m_objPHPExcel->getActiveSheet());
// 设置A5单元格内容并增加超链接
$m_objPHPExcel->getActiveSheet()->setCellValue(\'A5\', iconv(\'gbk\', \'utf-8\', \'超链接keiyi.com\'));
$m_objPHPExcel->getActiveSheet()->getCell(\'A5\')->getHyperlink()->setUrl(\'http://www.keiyi.com/\');
?>
在服务器端生成静态文件
相比直接生成,这两种方法的主要区别是生成格式的不同,模板文件完全相同,下边是一个在上例基础上更改后的样子,注意与上例的区别。
<?php
// 包含class的基本头文件
include(\"./class/class.php\");
// 生成excel的基本类定义(注意文件名的大小写)
include(\"./class/phpexcel/PHPExcel.php\");
// 包含写Excel5格式的文件,如果需要生成excel2007的文件,包含对应的Writer即可
include(\"./class/phpexcel/PHPExcel/Writer/Excel5.php\");
// 包含写PDF格式文件
include(\"./class/phpexcel/PHPExcel/Writer/PDF.php\");
// 创建phpexcel对象,此对象包含输出的内容及格式
$m_objPHPExcel = new PHPExcel();
// 模板文件,为了实现格式与内容分离,有关输出文件具体内容实现在模板文件中
// 模板文件将对象$m_objPHPExcel进行操作
include(\"./include/excel.php\");
// 输出文件的类型,excel或pdf
$m_exportType = \"pdf\";
$m_strOutputExcelFileName = date(\'Y-m-j_H_i_s\').\".xls\"; // 输出EXCEL文件名
$m_strOutputPdfFileName = date(\'Y-m-j_H_i_s\').\".pdf\"; // 输出PDF文件名
// 输出文件保存路径,此路径必须可写
$m_strOutputPath = \"./output/\";
// 如果需要输出EXCEL格式
if($m_exportType==\"excel\"){
$objWriter = new PHPExcel_Writer_Excel5($m_objPHPExcel);
$objWriter->save($m_strOutputPath.$m_strOutputExcelFileName);
}
// 如果需要输出PDF格式
if($m_exportType==\"pdf\"){
$objWriter = new PHPExcel_Writer_PDF($m_objPHPExcel);
$objWriter->save($m_strOutputPath.$m_strOutputPdfFileName);
}
?>