千家信息网

PHP怎么实现读取Excel文件的记录

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍"PHP怎么实现读取Excel文件的记录"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"PHP怎么实现读取Excel文件的记录"文章能帮助大家解
千家信息网最后更新 2024年11月11日PHP怎么实现读取Excel文件的记录

这篇文章主要介绍"PHP怎么实现读取Excel文件的记录"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"PHP怎么实现读取Excel文件的记录"文章能帮助大家解决问题。

首先安装Composer。

composer require phpoffice/phpspreadsheet,后面可加版本号也可以不加。

可能是因为我们上外网代理的缘故,始终安装不上,好不容易安装上了,使用Composer始终安装不上PHPOffice/PHPExcel,各种莫名其妙的错误提示。

接下来我下载了JetBrains PhpStorm,在它里面进行安装,错误提示变了一些,可是还不行,打开OPENSSL和下载证书也还是不行。

为这个耗费了3个小时,真心快崩溃了,想一想为什么别人可以呢?

为什么一定要Composer安装?其实安装不过是将PHPOffice的信息写到配置文件,方便程序员在编程环境下进行代码提示、错误检测还有后期的运行提示,不安装又怎样?

在网上下载一个付费的PHPOFFICE,解包到一个目录,引用一下,按照网上的方式读取,结果几十行的错误提示:

Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Shared\String.php on line 526
......
Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Reader\Excel5.php on line 1928
......
Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Calculation.php on line 2551
......
Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Worksheet\AutoFilter.php on line 720
......
Deprecated: Array and string offset access syntax with curly braces is deprecated in G:\PHP2021\HTAPP\phpexcel\Classes\PHPExcel\Cell.php on line 812

这个意思是:不推荐使用:不推荐使用带大括号的数组和字符串偏移量访问语法,这个显示有几十行,让人沮丧,因为类库是别人写的,本来打算放弃的,将网页拉到最后,竟然有数据记录读出来,真是让人惊喜,意味着只要解决这个错误就可以了。

逐个打开有错误提示的文件,将数组的"{}"访问方式改成"[]",错误太多了改了半个小时,问题解决了。

setReadDataOnly(true);        $spreadSheet=$reader->load($excelFilename);        $workSheet=$spreadSheet->getActiveSheet();        foreach($workSheet->getRowIterator() as $key=>$row){                $cellIterator=$row->getCellIterator();                $cellIterator->setIterateOnlyExistingCells(false);                foreach($cellIterator as $k=>$cell){                        $dataSheet[$key][$k]=$cell->getValue();                }        }}elseif($ext=='.xls'){        //以Excel5(Excel97-2003工作簿)的格式读取        $reader = PHPExcel_IOFactory::createReader('Excel5');        //加载excel文件        $PHPExcel = $reader->load("WPS安装记录.xls");        //读取第一个工作表        $sheet = $PHPExcel->getSheet(0);        //获取总行数        $highestRow = $sheet->getHighestRow();        //获取总列数        $highestColumm = $sheet->getHighestColumn();         //读取单元格的数据(从第一行,A列开始先行后列)        for ($row = 1; $row <= $highestRow; $row++){                for ($column = 'A'; $column <= $highestColumm; $column++) {                        $dataSheet[] = $sheet->getCell($column.$row)->getValue();                }        }}else{        exit("不能识别{$excelFilename}.\n");} print_r($dataSheet); ?>

搞定!文件记录全部显示出来,既可以读取后缀为xls的文件也可以读取xlsx的文件。

后面就是写入数据库了。

这个方法还是有点麻烦,后面找其他的方法,至少ODBC应该是可以的。

补充

PHP其实不仅能读取Excel文件的记录,还可以生成Excel文件

下面这代码中函数arrayToExcel的功能是把一个二维数组的数据生成一个excel文件,并且保存在服务器上。

require_once 'Classes/PHPExcel/Reader/Excel2007.php';require_once 'Classes/PHPExcel/Reader/Excel5.php';include 'Classes/PHPExcel/IOFactory.php';function arrayToExcel($data){$objPHPExcel = new PHPExcel();$objPHPExcel->setActiveSheetIndex(0);$objPHPExcel->getActiveSheet()->setTitle('firstsheet');$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);//add data$i = 2;foreach ($data as $line){$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $line['From']);$objPHPExcel->getActiveSheet()->getCell('A'.$i)->setDataType('n');$objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $line['To']);$objPHPExcel->getActiveSheet()->getCell('B'.$i)->setDataType('n');$i++;}$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');$file = 'excel.xls';$objWriter->save($file);}

如果你不希望保存在服务器上,希望生成以后直接下载到客户端,可以在输出文件的时候加入下面的代码,而不使用 $objWriter->save($file);

代码如下:

header("Pragma: public");header("Expires: 0");header("Cache-Control:must-revalidate, post-check=0, pre-check=0");header("Content-Type:application/force-download");header("Content-Type:application/vnd.ms-execl");header("Content-Type:application/octet-stream");header("Content-Type:application/download");header('Content-Disposition:attachment;filename="excel.xls"');header("Content-Transfer-Encoding:binary");$objWriter->save('php://output');

关于"PHP怎么实现读取Excel文件的记录"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0