上传excel文件,读取里面的数据,拼接成数组,而且不保存至服务器,降低存储压力

这里用的是thinkphp框架,phpoffice/phpspreadsheet

thinkphp的安装就不说了,官方文档说的很详细

phpoffice/phpspreadsheet也只需要通过composer安装即可

composer require phpoffice/phpspreadsheet

前端代码

大致是这样的

<form action="上传地址" enctype="multipart/form-data" method="post">
  <input type="file" name="image" /> <br> 
  <input type="submit" value="上传" /> 
</form> 

后端代码

  • 判断是否有excel_file文件
  • 使用tp的验证器验证文件类型,体积等
  • 使用iofactiory::load读取上传的文件,返回spreadsheet
  • spreadsheet->getactivesheet 获取选中的sheet页,返回worksheet
  • worksheet->getrowiterator 获取行集合


<?php
public function handleExcel(){
        if(Request::file('excel_file')){
            $file = Request::file('excel_file');
            $validate = Validate::rule('excel_file|excel文件', 'require|fileExt:xlsx,xls|fileSize:2097152');
            $validateRes = $validate->check(['excel_file'=>$file]);
            if(!$validateRes){
                $this->errorMsg = $validate->getError();
                return false;
            }
            // 读取上传的文件内容
            $spreadsheet = IOFactory::load($file);
            $worksheet = $spreadsheet->getActiveSheet();

            // 获取数据
            foreach ($worksheet->getRowIterator() as $row) {
                $cellIterator = $row->getCellIterator();
                $cellIterator->setIterateOnlyExistingCells(false); // 遍历所有单元格,包括空单元格
                $linData = [];
                $rowData = [];
                foreach ($cellIterator as $cell) {
                    echo $cell->getColumn().":".$cell->getFormattedValue()."|";
                }
                echo PHP_EOL;
            }
            
        }
    }

写的比较简陋,这里只是为了自己记录一下