当前位置: 美高梅集团手机版 > 美高梅集团 > 正文

CSV和Excel都是常用的报表格式,这也是PHP至今最通

时间:2020-02-29 23:20来源:美高梅集团
今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下。 在

今天接到了一个从Excel内读取图片的需求,在网上查找了一些资料,基本实现了自己的需求,不过由于查到的一些代码比较久远,不能直接移植到自己的项目里,需要稍加改动一下。

在网站中经常会生成表格,CSV和Excel都是常用的报表格式,CSV相对来说比较简单,如果大家有疑问我会相继发布一些CSV的实例,这里主要介绍用PHP来生成和读取Excel文件。

前言

这里介绍一下分别使用phpspreadsheet和PHPExcel扩展库来实现读取Excel内图片的功能:

要执行下面的函数,首先要引入一个类库:PHPExcel,PHPExcel是一个强大的PHP类库,用来读写不同的文件格式,比如说Excel 2007,PDF格式,HTML格式等等,这个类库是建立在Microsoft's OpenXML和PHP 的基础上的,对Excel提供的强大的支持,比如设置工作薄,字体样式,图片以及边框等等,下面来看看它是如何读写Excel文件的:

本文主要给大家介绍的是关于利用PHP_XLSXWriter代替PHPExcel的方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:

PHPSpreadsheet

首先来看如果生成Excel文件:

二者有何区别?

首先安装phpspreadsheet,由于线上服务器PHP版本是PHP5.6,所以需要安装兼容PHP5.6的版本,这里安装1.8.2版本

下面这代码中函数arrayToExcel的功能是把一个二维数组的数据生成一个excel文件,并且保存在服务器上。

PHPExcel 是一个处理Excel,CVS文件的开源框架,它基于微软的OpenXML标准和PHP语言。可以使用它来读取、写入不同格式的电子表格,这也是PHP至今最通用的Excel处理工具,但是它有一个非常致命的缺点: 特别占内存,对大批量的表格数据几乎会让人累觉不爱,处理速度非常慢,但是它功能非常丰富,API非常多,所以在导出复杂格式的Excel表格时,你往往不得不使用它,真是让人又爱又恨。

composer require phpoffice/phpspreadsheet=1.8.2
require_once 'Classes/PHPExcel/Reader/Excel2007.php';require_once 'Classes/PHPExcel/Reader/Excel5.php';include 'Classes/PHPExcel/IOFactory.php';function arrayToExcel{$objPHPExcel = new PHPExcel();$objPHPExcel->setActiveSheetIndex;$objPHPExcel->getActiveSheet()->setTitle;$objPHPExcel->getDefaultStyle->setName;$objPHPExcel->getDefaultStyle->setSize;//add data$i = 2;foreach {$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $line['From']);$objPHPExcel->getActiveSheet->setDataType;$objPHPExcel->getActiveSheet()->setCellValue;$objPHPExcel->getActiveSheet->setDataType;$i++;}$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');$file = 'excel.xls';$objWriter->save;}

不幸的是,PHPExcel官方已不再维护了这个项目了,官方团队在github上又起了一个新项目,叫PhpSpreadsheet,新项目使用了大量的php新特性,比如命名空间,PSR标准,性能也比PHPExcel高了不少,不过该项目至今还是开发状态,最小稳定版还没出来,估计bug会比较多,所以并不建议使用,下图是项目迁移说明:

然后就可以在项目里使用了

如果你不希望保存在服务器上,希望生成以后直接下载到客户端,可以在输出文件的时候加入下面的代码,而不使用 $objWriter->save;

相比于PHPExcel,PHP_XLSXWriter是一个小而强悍的Excel读写插件,它并没有PHPExcel功能丰富,很多高级操作比如冻结表头,并不具备,但是它导出速度非常快,非常适合于数据量特别大,报表格式不是很复杂的导出需求,下图是官方的速度和内存测试:

use PhpOfficePhpSpreadsheetCellCoordinate;use PhpOfficePhpSpreadsheetIOFactory;$imageFilePath = './uploads/imgs/'; //图片本地存储的路径if (!file_exists { //如果目录不存在则递归创建 mkdir($imageFilePath, 0777, true);}try { $inputFileName = './files/1.xlsx'; //包含图片的Excel文件 $objRead = IOFactory::createReader; $objSpreadsheet = $objRead->load; $objWorksheet = $objSpreadsheet->getSheet; $data = $objWorksheet->toArray(); foreach ($objWorksheet->getDrawingCollection { list($startColumn, $startRow) = Coordinate::coordinateFromString($drawing->getCoordinates; $imageFileName = $drawing->getCoordinates() . mt_rand; switch ($drawing->getExtension { case 'jpg': case 'jpeg': $imageFileName .= '.jpg'; $source = imagecreatefromjpeg; imagejpeg($source, $imageFilePath . $imageFileName); break; case 'gif': $imageFileName .= '.gif'; $source = imagecreatefromgif; imagegif($source, $imageFilePath . $imageFileName); break; case 'png': $imageFileName .= '.png'; $source = imagecreatefrompng; imagepng($source, $imageFilePath, $imageFileName); break; } $startColumn = ABC2decimal; $data[$startRow-1][$startColumn] = $imageFilePath . $imageFileName; } dump;} catch  { throw $e;}public function ABC2decimal{ $ten = 0; $len = strlen; for{ $char = substr;//反向获取单个字符 $int = ord; $ten += ; } return $ten;}
header;header;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="excel.xls"');header("Content-Transfer-Encoding:binary");$objWriter->save;

PHP_XLSXWriter 如何使用?

可以看到,图片被读取并存到了本地服务器中

接下来看一个读取Excel文件内容的实例:

下载

PHPExcel

下面这代码中函数excelToArray的功能是把一个excel里的内容重新整理放到一个数组了。

这是PHP_XLSXWriter的github地址,当然大家也可以通过本地下载,你可以点击下载把它下载下来。解压之后你可以看到,它的核心文件只有一个: xlswriter.class.php,examples目录为代码样例目录,里面有很多例子你可以参考。

编辑:美高梅集团 本文来源:CSV和Excel都是常用的报表格式,这也是PHP至今最通

关键词: