PHP如何读取xlsx Excel 文件,PhpSpreadsheet、PHPExcel、simplexlsx哪个更好?
微wx笑
2022-04-21【编程语言】
115
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或更高的版本。
安装
1 | composer require phpoffice/phpspreadsheet |
官方文档:https://phpspreadsheet.readthedocs.io/en/latest/
使用
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 | <?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版本要求我还没有亲自测试。
安装
1 | composer require phpoffice/phpexcel |
使用
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 | $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?
这将安装最新的支持版本:
1 | $ composer require shuchkin/simplexlsx |
注:composer是按项目管理依赖的工具,它不会添加全局的依赖,使用的时候需要切换目录到你的网站根目录下再执行上面的命令。文件会被安装在“/vendor/shuchkin/simplexlsx”目录下
或在此处下载 PHP 5.5+ 类
使用方法:
1 2 3 4 5 6 7 | use Shuchkin\SimpleXLSX;if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) { print_r( $xlsx->rows() );} else { echo SimpleXLSX::parseError();} |
Github上有很多例子,看一看,相信你很快就能学会。
下面是我自己的一个使用例子,此文件在网站的一级目录下:
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 55 56 57 58 59 | <?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



