编程语言您现在的位置是:首页 > 博客日志 > 编程语言

PHP如何读取xlsx Excel 文件,PhpSpreadsheet、PHPExcel、simplexlsx哪个更好?

<a href='mailto:'>微wx笑</a>的头像微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/PhpSpreadsheetxcw无知

是一个纯PHP编写的组件库,它使用现代PHP写法,代码质量和性能比PHPExcel高不少,完全可以替代PHPExcel(PHPExcel已不再维护)。使用PhpSpreadsheet可以轻松读取和写入Excel文档,支持Excel的所有操作。xcw无知

需要PHP version 7.3或更高的版本。xcw无知

安装

composer require phpoffice/phpspreadsheet

官方文档:https://phpspreadsheet.readthedocs.io/en/latest/xcw无知

使用

<?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 xcw无知

PHPExcel在2015年就放弃维护了,但是不影响使用;xcw无知

按说应该是只需要把src下的代码放到项目目录下就可以使用,具体php版本要求我还没有亲自测试。xcw无知

安装

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 xcw无知

从 Excel XLSx 文件中解析和检索数据。 MS Excel 2007 工作簿 PHP 阅读器。不需要额外的扩展(内部解压缩 + 标准 SimpleXML 解析器)xcw无知

Parse and retrieve data from Excel XLSx files. MS Excel 2007 workbooks PHP reader. No addiditional extensions need (internal unzip + standart SimpleXML parser).xcw无知

See also:
SimpleXLS old format MS Excel 97 php reader.
SimpleXLSXGen xlsx php writer.xcw无知

需要PHP version 5.5或更高的版本。xcw无知

安装

安装此库的推荐方法是通过 ComposerComposerxcw无知

这将安装最新的支持版本:xcw无知

$ composer require shuchkin/simplexlsx

注:composer是按项目管理依赖的工具,它不会添加全局的依赖,使用的时候需要切换目录到你的网站根目录下再执行上面的命令。文件会被安装在“/vendor/shuchkin/simplexlsx”目录下xcw无知

或在此处下载 PHP 5.5+ 类xcw无知

使用方法:

use Shuchkin\SimpleXLSX;

if ( $xlsx = SimpleXLSX::parse('book.xlsx') ) {
    print_r( $xlsx->rows() );
} else {
    echo SimpleXLSX::parseError();
}

Github上有很多例子,看一看,相信你很快就能学会。xcw无知

下面是我自己的一个使用例子,此文件在网站的一级目录下:xcw无知

<?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();
}


xcw无知

本文由 微wx笑 创作,采用 署名-非商业性使用-相同方式共享 4.0 许可协议,转载请附上原文出处链接及本声明。
原文链接:https://www.ivu4e.cn/blog/lang/2022-04-21/1159.html

很赞哦! () 有话说 ()