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



