PHP如何读取xlsx Excel 文件,PhpSpreadsheet、PHPExcel、simplexlsx哪个更好?
微wx笑
2022-04-21【编程语言】
101
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