PHPOffice出品的PHPExcel是PHP读取和生成Excel的极佳工具。本文参考官方文档,对PHPExcel进行简要总结,希望对使用PHPExcel操作Excel的同行有帮助。

PHPExcel介绍

PHPExcel是用PHP实现的电子表格文档读写类库,其支持的文档类型包括:Excel(.xls)后缀,Excel 2007(.xlsx后缀),CSV(.csv后缀),LibreOffice Calc(.ods后缀),PDF和HTML等格式(某些格式只能读)。PHPExcel运行环境为PHP 5.2+,需要开启php_zip、php_xml和php_gd2拓展。

细心的读者可能看到PHPOffice有另外一款作品:PHPSpreadsheet。PHPSpreadsheet也是一个Excel读写类库,与PHPExcel主要区别是:

PHPSpreadsheet是PHPExcel的重构版,基于PHP的新特性进行了重写。PHPSpreadsheet要求PHP 5.6+,使用了名字空间、PSR2编码规范、最新的PHP语言新特性;

对PHP版本的要求加强。官方的PHP版本支持结束后,PHPSpreadsheet对该版本至多额外支持6个月(意味肯定不支持PHP 5.5及以下版本,PHP5.6的支持也即将终止)。对比之下,PHPExcel依然支持PHP 5.2.0;

开发组已将所有资源转移到PHPSpreadsheet,PHPExcel的维护已经停止。

PHPSpreadsheet已经放出1.0.0稳定版,官方不再建议使用PHPExcel。本文内容主要讲解PHPExcel,掌握透彻后再转换到PHPSpreadsheet也是很容易的。

PHPExcel架构

理解PHPExcel的架构,可以先从理解Excel文件的结构开始。一个Excel文件包含多个表单,每个表单包含多个单元;文件、表单和单元都可以单独设置属性。这些概念对应到PHPExcel中的类,关系如下:

PHPExcel类 < -> Excel文件

PHPExcel_Worksheet类 < -> 表单

PHPExcel_Cell < -> 单元

PHPExcel_DocumentProperties < -> 文件属性

PHPExcel_Style_* < -> 格式设置类

下面开始介绍PHPExcel的常用操作。

使用PHPExcel

根据上面介绍的关系,分excel文件、表单、单元、格式设置四个部分分别介绍PHPExcel的使用方法。

excel文件

一个PHPExcel类的实例代表一个excel文件。新生成的PHPExcel对象,经常需要保存为文件;反之excel文件常需要导入为PHPExcel实例。保存和导入的行为分别由writer和reader负责。为了正确导入和保存数据,reader和writer需要知道具体的文件格式。PHPExcel提供了工厂类PHPExcel_IOFactory简化reader和writer的创建。读写文件的示例代码如下:

// 读取文件,自动探测文件格式

$excel = PHPExcel_IOFactory::load("./foo.xlsx");

// 新建excel文件,保存为Excel 2007格式

$excel2 = new PHPExcel();

$writer = PHPExcel_IOFactory::createWriter($excel2, "Excel2007");

$writer->save("./foo2.xlsx");

如果知道具体格式,可以使用具体的类操作:

// 读文件

$reader = PHPExcel_Reader_Excel2007();

$excel = $reader->load("./foo1.xlsx");

// 写文件

$writer = PHPExcel_Writer_Excel2007($excel);

$writer->save("./foo2.xlsx");

可用的reader和writer类可以参考下图:

建议使用工厂方法读取文件,它能自动探测文件格式并加载。这在读取用户上传不同格式的文件时很有用,避免了格式与后缀名不符可能导致的错误。

注意不要混淆PHPExcel和writer/reader对象:PHPExcel持有数据,writer和reader是对其进行序列化和反序列化的辅助类。

表单操作

一个excel文件可以包含多个表单,常用操作包括读取、新建、复制和删除表单。表单从属于excel文件,一般需要挂载到具体的PHPExcel对象上。

获取表单的方式有多种,如获取当前表单、获取指定顺序表单、根据名字获取表单。以下是示例代码:

$sheet = $excel->getActiveSheet();

// 获取第二个表单,编号从0开始

$sheet = $excel->getSheet(1);

$sheet = $excel->getSheetByName("Worksheet 1");

创建表单分为直接excel文件对象直接创建,也可以先创建表单实例,后续再关联。对应方法为:

$excel->createSheet();

$sheet = new PHPExcel_Worksheet($excel, "sheet 1");

// 一些其他操作

// 作为第二个表单插入到文档中

$excel->addSheet($sheet, 1);

PHPExcel也支持复制表单(包括复制其他PHPExcel对象中的表单):

// 复制表单

$sheet = clone $excel->getSheet(0);

$sheet->setTitle("new sheet");

$excel->addSheet($sheet, 1);

// $excel->addExternalSheet可以添加其他文件的表单

删除表单的API比较简单,只提供了`removeSheetByIndex`一个方法:

// 删除最后一个表单

$index = $excel->getSheetCount() - 1;

$excel->removeSheetByIndex($index);

// 删除当前表单

$index = $excel->getIndex($excel->getActiveSheet());

$excel->removeSheetByIndex($index);

单元操作

单元是承载内容的主体,其上操作比较复杂,大部分的类和API都与单元相关。单元隶属于具体的表单,使用上和表单类互动最多。

常用操作的包括定位、取值/赋值、格式化等。下面是一些代码示例:

// 获取单元对象

$cell = $sheet->getCell("B1");

$cell = $sheet->getCellByColumnAndRow(1, 1);

// 取值

$value = $cell->getValue();

$value = $cell->getCalculatedValue(); // 获取计算后的值

$style = $cell->getStyle(); // 获取格式化对象

$isMerged = $cell->isMergeRangeValueCell(); //是否是合并单元的主单元(合并单元的左上角单元)

// 设置值

$sheet->setCellValue("B1", "TEST");

$sheet->setCellValueByColumnAndRow(1, 1, "TEST");

// 批量赋值

$data = [

[2009, 2010, 2011, 2012],

['Q1', 12, 15, 21],

['Q2', 56, 73, 86],

['Q3', 52, 61, 69],

['Q4', 30, 32, 0],

];

$sheet->fromArray($data);

$cell->setValue("foo");

// 显示赋值

$cell->setValueExplicit("123456788900", PHPExcel_Cell_DataType::TYPE_STRING);

// 合并单元

$sheet->mergeCells('A18:E22');

// 设置格式

// 设置字体为红色

$cell->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);

// 设置边框

$cell->getStyle()->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);

文件属性

设置excel文件的属性,包括常见的作者、标题、创建时间、描述等。该功能由PHPExcel中类型为DocumentProperties的成员变量负责:

$property = $excel->getProperties();

$property->setCreator("tlanyan");

$property->setTitle("demo workbook");

$property->setKeywords("tlanyan, PHPExcel");

其他

上述介绍了常见的概念和操作,实际中可能会用到的概念还包括:

缓存和性能

图像、图表、超链接等富文本

日期、货币等格式化和本地化

公式设置

打印属性设置

内容对其、边距设置等

文件密码安全设置

这些冷门或高级功能可以参照API文档。

PHPExcel官方文档可能稍有繁杂,网络上的二手资料在深入方面常有欠缺。要用好PHPExcel,一个基本功是搞清楚操作的对象,以及和其他类/对象的关系(这也是面向对象编程的基本功)。本文中提到的PHPExcel->PHPExcel_WorkSheet->PHPExcel_Cell继承体系,是使用过程中操作最为频繁的对象,希望以上说明和示例能加深读者对PHPExcel类库的理解。

参考

php写excel文件_使用PHPExcel读写excel相关推荐

  1. php写excel文件_利用PHPExcel实现Excel文件的写入和读取

    作为一个原本的Java党,用过PHP才知道,原来对于Excel文件的写入和读取原来可以这么简单! 利用PHP实现对于Excel的读取,主要借助于PHPExcel插件来完成. PHPExcel下载地址: ...

  2. 用python处理excel文件_用python 读写excel文件(附资料下载)

    对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等工具包.利用这些工具,可以方便的对excel 进行操作. 1. 下载 xlutils ...

  3. 原声php 读取excel乱码_使用PHPExcel读取Excel文件时会读出乱码

    这是我读取文件的代码: require_once dirname(__FILE__) . "/PHPExcel/Classes/PHPExcel.php";$PHPReader = ...

  4. java读写excel文件poi_Java利用POI读写Excel文件工具类

    本文实例为大家分享了Java读写Excel文件工具类的具体代码,供大家参考,具体内容如下 package com.test.app.utils; import java.io.File; import ...

  5. python用excel文件_使用Python进行Excel文件处理

    本章节选自本人著<python Basic Tutorial>第十五章 15. Excel文件处理 15.1 引言 数据处理是python的一大应用场景,正如我在本书之前所反复强调的,基于 ...

  6. php原生读取excel文件夹,原生php实现excel文件读写的方法分析php技巧

    这篇文章主要介绍了原生php实现excel文件读写的方法,结合实例形式分析了采用原生php针对Excel进行读写操作的相关实现方法与操作注意事项,需要的朋友可以参考下 本文实例分析了原生php实现ex ...

  7. VBA小程序--针对所有已经打开的Excel文件_格式调整_针对所有工作表_冻结首行_无视所在位置

    VBA小程序--针对所有已经打开的Excel文件_格式调整_针对所有工作表_冻结首行_无视所在位置 Function 格式调整_针对所有工作表_冻结首行_无视所在位置()Dim sht As Work ...

  8. Java操作Excel之POI:java读写excel文件以及打印设置

    Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0 ...

  9. python处理excel的优势-用Python读写Excel文件的方式比较

    前段时间做一个项目,却不得不使用Python直接生成Excel文件,后来随着需求的变化,还要对已有的Excel文件进行读取.在这个过程中,研究并尝试了一些工具,也走了一些弯路.记录下来,下次再有类似需 ...

最新文章

  1. 实在不好意思,最近写个项目,一直没时间来灌水
  2. 第五章 文本编辑器 vi 命令-centos7.5知识
  3. 事件绑定on与hover事件
  4. cmake windows linux,在Windows中像Linux里一样使用CMake和make
  5. 多线程调用生成主键流水号存储过程产生主键冲突问题解决方案
  6. 1694 件 AI 事件大盘点,哪些事让你记忆深刻?
  7. 【CS229】向量化
  8. Fiddler抓包工具 学习笔记
  9. python聚类分析实例_Biopython - 聚类分析
  10. 深圳云计算培训:专科生学习云计算就业前景如何?
  11. Flutter sksl 着色器预热
  12. 小米手机如何更换铃声和微信提示音
  13. Can‘t connect to MySQL server on ‘localhost‘ (10061)
  14. python 日期API
  15. html css 3D 立体相册
  16. Java项目:ssm流浪猫狗救助管理系统
  17. 基于数据挖掘的H公园客流量分析预测
  18. 如何在JavaScript中实现国际化(i18n)
  19. 建设工程暂估价项目的定价及招标流程
  20. 3GPP 24.008 Cause汇总

热门文章

  1. 本次操作因为计算机的限制而取消,本次操作由于这台计算机的限制而被取消,小编教你怎么解决本次操作由于这台计算机的限制而被取消...
  2. P4970 全村最好的嘤嘤刀(树状数组与线段树的梦幻联动)
  3. 数量性状基因座QTL及其作图
  4. 视频cdn加速1分钟解决视频播放卡顿问题,开启视频秒播时代!
  5. RT-Thread Studio入门(4)— 使用邮箱发送按键状态
  6. RadioButton 单选
  7. cpu飚高的排查思路
  8. Awstats安装配置
  9. Java开发前的准备工作
  10. 应届毕业生应该如何写简历?