PHP实现读取Excel文件的记录(一)

PHP实现读取Excel文件的记录(一)

因为工作需要将Excel的文件记录读出再写入数据库中,之前使用的是VBS,可是那也不是正规的应用程序,使用PowerBuilder也可以,但是PowerBuilder毕竟只是临时使用,C#好长时间不用了,就打算使用最近学习的PHP来操作。

下班后就开始干,折腾了将近4个小时,终于搞定了,遇到了好多的坑,快崩溃了,想一想为这些肤浅的代码所累,程序员的日子不好过!

要使用PHP读取Excel的文件记录,查了资料都是使用PHPExcel这个文件包,并且全部都要使用Composer来安装,结果遇到了第一个坑:Composer始终安装不上PHPOffice/PHPExcel。

首先安装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

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

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

<?php error_reporting(E_ALL);//报告所有错误 date_default_timezone_set('PRC'); //设置时区为中国 /** PHPExcel_IOFactory */ require_once './Classes/PHPExcel/IOFactory.php'; $excelFilename="安装记录111.xlsx"; $ext=substr($excelFilename,strripos($excelFilename,'.')); $dataSheet=[]; if($ext=='.xlsx'){ //按Excel2007文件格式读取 $reader = PHPExcel_IOFactory::createReader('Excel2007'); $reader->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文件的记录(一)的文章就介绍到这了,更多相关PHP读取Excel记录内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    php脚本电脑关机|电脑关机的脚本

    php脚本电脑关机|电脑关机的脚本,,1. 电脑关机的脚本推荐 AutoIt 自动化脚本 其他 按键精灵、……、AutoHotKey、vbs …… 2. 电脑关机

    PHP什么意思

    PHP什么意思,语言,是一种,PHP什么意思PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP 是一种 HTM

    创业做网站选择用node好还是php

    创业做网站选择用node好还是php,语言,页面,如果你所开发的是一个PHP网站的前端页面或模板,PHP和Python语言都相对比较简单,所以虽然PHP语

    如何进行phpmyadmin配置 phpmyadmin快速配置方法【详细介绍】

    如何进行phpmyadmin配置 phpmyadmin快速配置方法【详细介绍】,配置,文件,密码,快速,安装配置,方法,    phpmyadmin 配置怎么配置?今天提一下

    php是什么文件格式 php文件打开方法

    php是什么文件格式 php文件打开方法,文件,语言,点击,打开方式,选择,执行,  php文件是一种不能轻易打开的文件,许多人都遇到过点击了php文件后

    PHP文件怎么打开

    PHP文件怎么打开,文件,下载,脚本,怎么打开,语言,选择,PHP文件怎么打开PHP文件一般用Notepad Plus软件打开。PHP文件怎么打开?其实大家并非是需

    php是什么意思

    php是什么意思,执行,语法,语言,特性,文档,脚本语言,php是什么意思很多行外人看到php这三个英文会毫无头绪,完全不知道php是什么意思,本文为大家详

    php 删除数组重复的值

    php 删除数组重复的值,数组,函数,本文目录php 删除数组重复的值如何正确实现PHP删除数组重复元素PHP二维数组如何实现去除重复项php数组怎

    php是前台还是后端语言

    php是前台还是后端语言,语言,支持,语法,性能,版本,提升,php是后端语言,后端是管理、运营、数据挖掘等非面向访问者的东西;php就是在服务器端执行

    PHP中的Yii框架指南

    PHP中的Yii框架指南,框架,安装,配置,应用程序,支持,验证,PHP语言是一门广泛应用的开源脚本语言,它凭借其灵活、高效、安全和易用的特性,成为了网

    聊聊php滑动验证码的实现原理

    聊聊php滑动验证码的实现原理,验证码,滑块,验证,实现原理,图形,拖动,随着互联网的迅速发展,验证码成为了互联网安全保障的重要手段。其中,滑动验

    php的注释有几种

    php的注释有几种,注释,单行注释,作用,多行注释,执行,这是,php的注释有三种,分别是:1、单行注释【//】;2、单行注释【#】;3、多行注释【/** */】。ph

    bcadd php是函数还是扩展

    bcadd php是函数还是扩展,函数,精度,数字,设置,字符串,操作数,bcadd是php中的一个函数,作用是计算两个任意精度数字的加法,该函数的使用语法如“b

    php如何把一个数组倒序输出

    php如何把一个数组倒序输出,输出,数组,倒序,方法,循环,函数,PHP是一种流行的服务器端脚本语言,常用于Web开发。在PHP中,数组是一种非常常见的数据