PHPExcel之生成xlsx并下载(一)
PHPExcel提供了一个强大的操作表格的php类库,之前都是copy使用,简单的使用,对于复杂的表格的处理还是难以上手。
一,针对PHPExcel是封闭好的类开,一般有一个基本的类需要包含或者导入到当前的业务代码中,这个类就是PHPExcel.php,针对这个类,大家只需要关注构造函数那堆初始化各种操作对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public function __construct() { $this ->uniqueID = uniqid(); $this ->calculationEngine = new PHPExcel_Calculation( $this ); //sheet操作类 $this ->workSheetCollection = array (); $this ->workSheetCollection[] = new PHPExcel_Worksheet( $this ); $this ->activeSheetIndex = 0; //表格属性操作类 $this ->properties = new PHPExcel_DocumentProperties(); // Create document security $this ->security = new PHPExcel_DocumentSecurity(); // Set named ranges $this ->namedRanges = array (); // Create the cellXf supervisor $this ->cellXfSupervisor = new PHPExcel_Style(true); $this ->cellXfSupervisor->bindParent( $this ); // Create the default style $this ->addCellXf( new PHPExcel_Style); $this ->addCellStyleXf( new PHPExcel_Style); } |
常用的的基本就是上面2个,一个属性设置类,一堆的set,相对应的一堆的get方法。一个是sheet操作类,这个是主要的内容操作处理类。
二,下面一个简单的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?php /** * PHPExcel应用之一 写xlxs文件 并提供下载 **/ require_once dirname( __FILE__ ) . '/PHPExcel/Classes/PHPExcel.php' ; $objExcel = new PHPExcel(); //xlsx相关属性操作方法 关联类 PHPExcel/Classes/PHPExcel/DocumnentProperties.php $objExcel ->getProperties()->setCreator( "author" ) //设置作者 ->setLastModifiedBy( "last save author" ) //最后一次保存者 ->setTitle( "title" ) //标题 ->setSubject( "subject" ) //主题 ->setDescription( "remark" ) //备注 ->setKeywords( "mark" ) //标记 ->setCategory( "category" ); //类别 //对sheet cell进行操作 $objExcel ->setActiveSheetIndex(0) //会返回worksheet对象 关联类 PHPExcel/Classes/PHPExcel/Worksheet.php ->setCellValue( 'A1' , 'A1' ) ->setCellValue( 'B1' , 'B1' ) ->setCellValue( 'C1' , 'C1' ) ->setCellValue( 'D1' , 'D1' ); $objExcel ->setActiveSheetIndex(0) //会返回worksheet对象 关联类 PHPExcel/Classes/PHPExcel/Worksheet.php ->setCellValue( 'A2' , 'A2' ) ->setCellValue( 'B2' , 'B2' ) ->setCellValue( 'C2' , 'C2' ) ->setCellValue( 'D2' , 'D2' ); //设置sheet标题 $objExcel ->getActiveSheet()->setTitle( 'the first sheet' ); //设置为第一个sheet为活动状态 $objExcel ->setActiveSheetIndex(0); //保存 $filename = "test.xlsx" ; $objWriter = PHPExcel_IOFactory::createWriter( $objExcel , 'Excel2007' ); $objWriter ->save( $filename ); //如果生成并提供下载 header( 'Content-Type: application/vnd.ms-excel' ); header( 'Content-Disposition: attachment;filename="' . $filename ); header( 'Cache-Control: max-age=0' ); header( 'Cache-Control: max-age=1' ); 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: cache, must-revalidate' ); header( 'Pragma: public' ); $objWriter = PHPExcel_IOFactory::createWriter( $objExcel , 'Excel2007' ); $objWriter ->save( 'php://output' ); |
针对表格的各种属性,大家可以在生成的xlsx上右键属性,详情里看到
三,业务中一般是从DB或者其它为数据类源,例子如下 只用数据那一块即可
1 //数据类源为业务DB select id,name,age,address from info 2 //模拟数据 3 $data = array( 4 array("id"=>1,"name"=>"张一","age"=>1,"address"=>"广东1"), 5 array("id"=>2,"name"=>"张二","age"=>2,"address"=>"广东2"), 6 array("id"=>3,"name"=>"张三","age"=>3,"address"=>"广东3"), 7 array("id"=>4,"name"=>"张四","age"=>4,"address"=>"广东4"), 8 array("id"=>5,"name"=>"张五","age"=>5,"address"=>"广东5"), 9 ); 10 11 //设置标题行 12 $objExcel->setActiveSheetIndex(0) 13 ->setCellValue('A1','ID') 14 ->setCellValue('B1','姓名') 15 ->setCellValue('C1','年龄') 16 ->setCellValue('D1','住址'); 17 18 //内容循环操作即可 从第二行开始 19 $j = 2; 20 foreach($data as $key=>$value){ 21 $objExcel->setActiveSheetIndex(0) 22 ->setCellValue('A'.$j, $value['id']) 23 ->setCellValue('B'.$j, $value['name']) 24 ->setCellValue('C'.$j, $value['age']) 25 ->setCellValue('D'.$j, $value['address']); 26 27 $j++; 28 }
生生成的效果图如下:
四,假设要对写入的某一列加一些效果,可以用PHPExcel的富文本类PHPExcel_RichText.php 可以对cell时行加粗,倾斜,颜色的处理
1 foreach($data as $key=>$value){ 2 //设置某列为富文本 加粗 倾斜 颜色 3 $objRichText = new PHPExcel_RichText(); 4 $objPayable = $objRichText->createTextRun($value['address']); 5 $objPayable->getFont()->setBold(true); 6 $objPayable->getFont()->setItalic(true); 7 $objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) ); 8 9 $objExcel->setActiveSheetIndex(0) 10 ->setCellValue('A'.$j, $value['id']) 11 ->setCellValue('B'.$j, $value['name']) 12 ->setCellValue('C'.$j, $value['age']) 13 ->setCellValue('D'.$j, $objRichText); 14 15 $j++; 16 }
效果如下:
PHP中常见的问题点,知识点,及盲点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异