PHPExcel上一版本1.8.1于2015年发布。该项目已不再维护,可以使用,但是不建议再使用。所有用户都应该迁移到其直接后继者PhpSpreadsheet或其他替代方案。PhpSpreadsheet打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等)。

文档地址:https://phpspreadsheet.readthedocs.io/en/develop/

GitHub下载:https://github.com/PHPOffice/PhpSpreadsheet

composer安装:composer require phpoffice/phpspreadsheet

简单入门

<?php
require './vendor/autoload.php';use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;// $spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$spreadsheet = new Spreadsheet();
try {$sheet = $spreadsheet->getActiveSheet();
} catch (\PhpOffice\PhpSpreadsheet\Exception $e) {echo "==PhpSpreadsheet异常==";var_dump($e);die;
}
// 按照单元格写入
$sheet->setCellValue('A1','Hello World');
// 按照行列写入,注意行和列都是从1开始的
$sheet->setCellValueByColumnAndRow(1,2,'2行1列');$writer = new Xlsx($spreadsheet);
try {$writer->save('hello.xlsx');
} catch (\PhpOffice\PhpSpreadsheet\Writer\Exception $e) {echo "==Writer异常==";var_dump($e);die;
}

生成的hello.xlsx如下

从内存中清除工作簿

$spreadsheet->disconnectWorksheets(); //如果没有这句,直接运行下面那句会报“内存泄漏”错误
unset($spreadsheet);

PhpSpreadsheet类无法读取和写入持久存储,但是提供了\PhpOffice\PhpSpreadsheet\Reader\IReader和\PhpOffice\PhpSpreadsheet\Writer\IWriter实现了读和写

有两种方法可以将文件读入PhpSpreadsheet

1 自动文件类型解析模式

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("05featuredemo.xlsx");

 如果您需要在阅读器上设置一些属性(例如,只读取数据)

$reader = \PhpOffice\PhpSpreadshee\IOFactory::createReaderForFile("05featuredemo.xlsx");
$reader->setReadDataOnly(true);
$reader->load("05featuredemo.xlsx");

2 显式模式

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load("hello.xlsx");

自动类型解析模式比显式模式稍慢。

阅读电子表格(.xlsx文件)

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load("05featuredemo.xlsx");

设置单元格的数据

1 按照单元格写入

$sheet->setCellValue('A1','Hello World');

2 按照行列写入,注意行和列都是从1开始的

$sheet->setCellValueByColumnAndRow(1,2,'2行1列');

获取单元格的数据

1 按照单元格读取

$sheet->getCell('A1')->getValue()

2 按照行列写入,注意行和列都是从1开始的

$sheet->getCellByColumnAndRow($column,$row)->getValue()

例子:有一个students.xlsx,内容如下

<?php
require './vendor/autoload.php';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load('students.xlsx');$sheet = $spreadsheet->getActiveSheet();
$highestRow = $sheet->getHighestRow();  // 最大行数
$highestColumn = $sheet->getHighestColumn(); // 最大列数
$highestColumn = "AB";
// 把下标变成数字,如A-Z分别对应1-26,AA对应27,AB对应28,以此类推
$highestColumnIndex = PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn);
if($highestRow <= 2){ // 因为students.xlsx表格数据是从第三行开始的exit('Excel没有任何数据');
}
$data = array();
for($row = 3;$row <= $highestRow;$row++){$tempData['name'] = $sheet->getCellByColumnAndRow(1,$row)->getValue();$tempData['chinese'] = $sheet->getCellByColumnAndRow(2,$row)->getValue();$tempData['math'] = $sheet->getCellByColumnAndRow(3,$row)->getValue();$tempData['English'] = $sheet->getCellByColumnAndRow(4,$row)->getValue();$data[] = $tempData;
}
var_dump($data);

结果如下

如果要在students.xlsx添加一行,李四 80 85 90,怎么处理?这也就要引入下面的概念

从模板生成Excel文件(读取,修改,写入)

<?php
require './vendor/autoload.php';$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('students.xlsx');$sheet = $spreadsheet->getActiveSheet();//李四 80 85 90$sheet->getCell('A7')->setValue('李四');
$sheet->getCell('B7')->setValue(80);
$sheet->getCell('C7')->setValue(85);
$sheet->getCell('D7')->setValue(90);$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('new_students.xlsx');

生成 new_students.xlsx 内容如下

文件下载

$file_name = date('YmdHis').mt_rand(1000,9999).".xlsx"; // 文件名,07Excel文件后缀xlsx,Excel03版本文件xls
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');// 告诉浏览器输出07Excel文件
// header('Content-Type: application/vnd.ms-excel'); // 告诉浏览器将要输出Excel03版本文件
header('Content-Disposition: attachment;filename=' . $file_name ); // 告诉浏览器输出文件名称
header('Cache-Control: max-age=0'); // 禁止缓存
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet,'Xlsx'); //Excel07版本:Xlsx,Excel03版本:Xls
// 个人理解,等同于下面那句
// $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet); // Excel07版本:Xlsx,Excel03版本:Xls
$writer->save('php://output');

PHPExcel替代方案PhpSpreadsheet相关推荐

  1. PHP导出基类(PHPExcel,PhpSpreadsheet)

    PHP导出常用的导出类(PHPExcel,PhpSpreadsheet -->通过composer自行拉取到对应的项目下) 1:PHPExcel基类 <?php namespace LYJ ...

  2. Phpspreadsheet 中文文档(五)节约内存+PHPExcel迁移

    节省内存 PhpSpreadsheet在工作表中平均每个单元格使用约1k,因此大型工作簿可以迅速用尽可用内存.单元缓存提供了一种机制,使PhpSpreadsheet可以将单元对象维护在较小的内存或非内 ...

  3. php7能用phpexcel吗,PHPExcel 在 PHP7.0 以上版本报错

    低版本 PHPExcel中 在PHP7.0以下时运行不会报错,当切换PHP版本为PHP7.0以上时将会报错 'break' not in the 'loop' or 'switch' context ...

  4. xlswriter - excel导出

    xlswriter是一个 ,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本.数字.公式.日期.图表.图片和超链接. 为什么使用 xlswriterxlswrite ...

  5. php连接excel表格数据类型,PHP 高性能 Excel 扩展 1.2.8 发布,文件读取数据类型可控!...

    为什么使用 xlswriter xlswriter 是一个 PHP C 扩展,可用于在 Excel 2007+ XLSX 文件中读取数据,插入多个工作表,写入文本.数字.公式.日期.图表.图片和超链接 ...

  6. PHPExcel对于Excel中日期和时间类型的处理

    PHPExcel是一款优秀的处理Excel文件读写的开源PHP Library,能够给我们提供强大的Excel读写能力,本文针对Excel处理过程中关于日期和时间类型的处理进行深入的讨论.PHPExc ...

  7. PHP7.2环境中PHPExcel无法导出Excel

    问题 这几天接到一个bug,说的是有某一个后台的列表页有一个excel导出功能,最近不能使用了,我立即登陆系统发现确实如此,但是这个上线项目已经运行长达2年,中间并没有出现问题,于是我拉出源码进行分析 ...

  8. php导出excel数据代码,phpspreadsheet导出数据到Excel的方法介绍(代码示例)

    本篇文章给大家带来的内容是关于phpspreadsheet导出数据到Excel的方法介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 之前我们使用PHP导出Excel数 ...

  9. yii2框架中整合PHPOffice的PhpSpreadsheet开源库

    为什么80%的码农都做不了架构师?>>>    在所有的php office库(http://www.21doc.net/php/awesomephp#Office),以前用得最多的 ...

最新文章

  1. Unet项目解析(1): run_training.py
  2. Yii的GridView
  3. Shell--cut用法
  4. 完成MSP430的IAP升级程序(总结)
  5. 《剑指offer》题目说明
  6. 旷视科技Face++进军机器人业务
  7. v-pre让Vue直接显示{{}}不编译
  8. php7和PHP5对比的新特性和性能优化
  9. postman 接口测试用例设计
  10. 2022年自考专业(工商企业管理)电子商务概论练习题
  11. HttpServletRequest--request.getParameter /getParameterValues/getParameterNames()/getParameterValues
  12. IDO已经OUT ?3分钟了解NFT的新玩法INO
  13. 7.awd不死马权限维持及变种
  14. 暑期集训1期11暑期集训一期12阶段性测验
  15. Windows10下安装VS2015和Caffe
  16. 算法基础复盘笔记Day12【贪心算法】—— 区间问题、Huffman树、排序不等式、绝对值不等式、推公式
  17. 操作系统读写者问题实验报告_什么是操作系统?
  18. java mht 转换 html_Word单网页mht文件,汉字被html转义解决办法
  19. loadrunner之Run-time-Setting设置
  20. 线性回归的直觉与实现

热门文章

  1. 织梦模板建站教程:织梦根目录下文件是什么意思?
  2. Android 监听Home键按键事件
  3. 抖音电商主播运营带货话术脚本策划方案流程计划表格
  4. input输入框去除历史记录
  5. 产业分析:短视频及直播营销报告
  6. 为什么linux虚拟机文件78g,linux 磁盘空间被占满但找不到目标文件的问题处理 lsof命令...
  7. vue工作日历考勤记录表
  8. 妊娠对静息状态大脑活动、白质微结构、神经代谢物浓度和灰质结构的影响
  9. 如何正确构思治具夹具的结构
  10. html 93c,对93c46编程