首页后端开发其他后端知识PHP实现读取Excel文件的方法是什么?

PHP实现读取Excel文件的方法是什么?

时间2024-03-25 14:26:04发布访客分类其他后端知识浏览400
导读:今天这篇给大家分享的知识是“PHP实现读取Excel文件的方法是什么?”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,因此分享发大家做个参考,下文的讲解详细,步骤过程清晰,希望这篇“PHP实现读取Excel文件的方法是什么?”文章能...
今天这篇给大家分享的知识是“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文件的方法是什么?的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP实现读取Excel文件的方法是什么?
本文地址: https://pptw.com/jishu/652838.html
在react中map方法用于什么,使用有什么要注意的 PHP文件上传用到的函数有哪些?

游客 回复需填写必要信息