PHP如何读取xlsx Excel 文件,PhpSpreadsheet、PHPExcel、simplexlsx哪个更好?
微wx笑 2022-04-21【编程语言】 5 0关键字: php xlsx Excel PhpSpreadsheet PHPExcel simplexlsx
php操作Excel文件有几种方案,PhpSpreadsheet应该是最好的,开源项目一直在更新,但是对php版本有要求;PHPExcel在2015年就放弃维护了,但是不影响使用;simplexlsx是一个更轻量级的解决方案,安装使用都很简单。
PhpSpreadsheet
Github地址:https://github.com/PHPOffice/PhpSpreadsheet
是一个纯PHP编写的组件库,它使用现代PHP写法,代码质量和性能比PHPExcel高不少,完全可以替代PHPExcel(PHPExcel已不再维护)。使用PhpSpreadsheet可以轻松读取和写入Excel文档,支持Excel的所有操作。
需要PHP version 7.3或更高的版本。
安装
composer require phpoffice/phpspreadsheet
官方文档:https://phpspreadsheet.readthedocs.io/en/latest/
使用
<?php /*读取excel文件,并进行相应处理*/ $fileName = "url.xls"; if (!file_exists($fileName)) { exit("文件".$fileName."不存在"); } $startTime = time(); //返回当前时间的Unix 时间戳 require_once './PHPExcel/IOFactory.php'; $objPHPExcel = PHPExcel_IOFactory::load($fileName); //获取sheet表格数目 $sheetCount = $objPHPExcel->getSheetCount(); //默认选中sheet0表 $sheetSelected = 0;$objPHPExcel->setActiveSheetIndex($sheetSelected); //获取表格行数 $rowCount = $objPHPExcel->getActiveSheet()->getHighestRow(); //获取表格列数 $columnCount = $objPHPExcel->getActiveSheet()->getHighestColumn(); echo "<div>Sheet Count : ".$sheetCount." 行数: ".$rowCount." 列数:".$columnCount."</div>"; $dataArr = array(); /* 循环读取每个单元格的数据 */ //行数循环 for ($row = 1; $row <= $rowCount; $row++){ //列数循环 , 列数是以A列开始 for ($column = 'A'; $column <= $columnCount; $column++) { $dataArr[] = $objPHPExcel->getActiveSheet()->getCell($column.$row)->getValue(); echo $column.$row.":".$objPHPExcel->getActiveSheet()->getCell($column.$row)->getValue()."<br />"; } echo "<br/>消耗的内存为:".(memory_get_peak_usage(true) / 1024 / 1024)."M"; $endTime = time(); echo "<div>解析完后,当前的时间为:".date("Y-m-d H:i:s")." 总共消耗的时间为:".(($endTime - $startTime))."秒</div>"; var_dump($dataArr); $dataArr = NULL;}
PHPExcel
Github地址:https://github.com/PHPOffice/PHPExcel
PHPExcel在2015年就放弃维护了,但是不影响使用;
按说应该是只需要把src下的代码放到项目目录下就可以使用,具体php版本要求我还没有亲自测试。
安装
composer require phpoffice/phpexcel
使用
$objPHPExcel = new \PHPExcel(); try { $objSheet = $objPHPExcel->getActiveSheet(); //工作表标题 $objSheet->setTitle("外呼结果"); //第一行内容,放列标题 $objSheet->setCellValue("A1", "城市"); $objSheet->setCellValue("B1", "阿姨姓名"); $objSheet->setCellValue("C1", "阿姨手机号"); $objSheet->setCellValue("D1", "渠道"); $objSheet->setCellValue("E1", "创建时间"); //设置第一行的背景颜色 $objPHPExcel->getActiveSheet() ->getStyle('A1:E1') ->getFill() ->setFillType(\PHPExcel_Style_Fill::FILL_SOLID) ->getStartColor() ->setRGB('FFFF00'); //后面行循环放内容 for($i=2;$i<10;$i++){ $objSheet->setCellValue("A".$i, "北京"); $objSheet->setCellValue("B".$i, "陶士涵"); $objSheet->setCellValue("C".$i, "18805419888\t"); $objSheet->setCellValue("D".$i, "外呼"); $objSheet->setCellValue("E".$i, "2021-08-1 19:17:36\t"); } $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $fileName=storage_path("outcall_result.xlsx"); $objWriter->save($fileName); } catch (\PHPExcel_Exception $e) { }
simplexlsx
介绍
Github地址:https://github.com/shuchkin/simplexlsx
从 Excel XLSx 文件中解析和检索数据。 MS Excel 2007 工作簿 PHP 阅读器。不需要额外的扩展(内部解压缩 + 标准 SimpleXML 解析器)
Parse and retrieve data from Excel XLSx files. MS Excel 2007 workbooks PHP reader. No addiditional extensions need (internal unzip + standart SimpleXML parser).
See also:
SimpleXLS old format MS Excel 97 php reader.
SimpleXLSXGen xlsx php writer.
需要PHP version 5.5或更高的版本。
安装
安装此库的推荐方法是通过 Composer。新Composer?
这将安装最新的支持版本:
$ composer require shuchkin/simplexlsx
注:composer是按项目管理依赖的工具,它不会添加全局的依赖,使用的时候需要切换目录到你的网站根目录下再执行上面的命令。文件会被安装在“/vendor/shuchkin/simplexlsx”目录下
或在此处下载 PHP 5.5+ 类
使用方法:
use Shuchkin\SimpleXLSX; if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) { print_r( $xlsx->rows() ); } else { echo SimpleXLSX::parseError(); }
Github上有很多例子,看一看,相信你很快就能学会。
下面是我自己的一个使用例子,此文件在网站的一级目录下:
<?php use Shuchkin\SimpleXLSX; ini_set('error_reporting', E_ALL); ini_set('display_errors', true); require_once __DIR__.'/../vendor/shuchkin/simplexlsx/src/SimpleXLSX.php'; echo '<h1>rows() and rowsEx()</h1>'; if ($xlsx = SimpleXLSX::parse('./pk/20220102.xlsx')) { $allrows = []; // ->rows() //echo '<h2>$xlsx->rows()</h2>'; echo '<pre>'; //print_r($xlsx->rows()); foreach ($xlsx->rows() as $k => $r) { if ($k === 0) { //$header_values = $r; continue; } if ($k === 1) { //$header_values = $r; continue; } $group = 1; for($i = 2; $i < 50; $i+=7){ if (!empty($r[$i]) && !empty($r[$i+1])){ $row = []; $row[0] = $r[$i]; $row[1] = $r[$i+1]; $row[2] = $r[$i+2]; $row[3] = $r[$i+3]; $row[4] = $r[$i+4]; $row[5] = $r[$i+5]; $row[6] = $r[$i+6]; $row[6] = str_ireplace(",", "-",$row[6]); $row[6] = str_ireplace(",", "-",$row[6]); $row[6] = str_ireplace("/", "-",$row[6]); $row[6] = str_ireplace(".", "-",$row[6]); if (strlen($row[6]) < 6){ $row[6] = date("Y", time()) . "-" . $row[6]; } if (stripos($row[6], "-") === false){ $row[6] = substr($row[6],0,4) . "-" . substr($row[6],5,2) . "-" . substr($row[6],7,2); } $row[7] = $group; $allrows[] = $row; } $group += 1; } //print_r($r); } print_r($allrows); echo '</pre>'; } else { echo SimpleXLSX::parseError(); }
本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/lang/2022-04-21/1159.html