博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
phpexcel导入导出excel文件常用操作
阅读量:6906 次
发布时间:2019-06-27

本文共 4692 字,大约阅读时间需要 15 分钟。

hot3.png

web程序开发的时候,经常有关于操作Excel的需求.PHPExcel类是我用过的比较实用的工具[当然,除了那惊人的内存占用].PHPExcel本身的tar包里面已经有非常详细的demo,在这里我记录我使用到的一些工作,作为常用的工具类收藏下来,以后如果有用到更多的功能,会不断的更新.

首先定义PHPExcel类的路径[这里根据大家实际不同的目录结构定义]

define('PATH','/var/www/class/PHPExcel/PHPExcel.php');

/** ++++++++++++++++++++++++++++

       * excel文件导出

         ++++++++++++++++++++++++++++ */

首先加载PHPExcel类并实例化,设置相关属性.

include_once PATH;$objPHPExcel = new PHPExcel();$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")            ->setLastModifiedBy("Maarten Balliauw")            ->setTitle("Office 2007 XLSX Test Document")            ->setSubject("Office 2007 XLSX Test Document")            ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")            ->setKeywords("office 2007 openxml php")            ->setCategory("Test result file");

excel导出对应值运算

//PHPExcel导出单元格设置$outputFileName='biby.xls';//输出excel文件名称//处理要输出的数据为二维数组,对应形式如下$data=array(    0=>array(//第一行        0=>'name',//第一列        1=>'sex',//第二列        2=>'age',//第三列    );    0=>array(//第二行        0=>'name',//第一列        1=>'sex',//第二列        2=>'age',//第三列    ););$objPHPExcel->setActiveSheetIndex(0)->setCellValue(A1,$value);//setActiveSheetIndex(0)设置当前sheet && setCellValue(单元格,对应值)//这里excel是以A1,A2...B1,B2....Z1,Z2的方式处理输出值对应单元格的,我们可以生成对应的数组来存储这些表示单元格的值,这样就可以用循环遍历的方式处理输出了$skeyArr = array();$k=0;for($i=0;$i<=100;$i++){ //列    for ($j=1; $j <= 100; $j++) { //行         $skeyArr[$k][] = PHPExcel_Cell::stringFromColumnIndex($i) . $j;//PHPExcel_Cell::stringFromColumnIndex将数字转换为对应字母列    }    $k++;}//最后用嵌套的循环设置每个对应单元格的值$l=0;//行foreach ($data as $key => $value) {    $count = count($value);    for ($p=0; $p < $count; $p++) { //列        $objPHPExcel->setActiveSheetIndex(0)->setCellValue($skeyArr[$p][$l],$value[$p]);    }    $l++;        }

设置头文件,告诉浏览器以下载方式处理输出

$objPHPExcel->getActiveSheet()->setTitle($outputFileName);//当前sheet名称$objPHPExcel->setActiveSheetIndex(0);//当前活动sheetheader('Content-Type: application/vnd.ms-excel');header('Content-Disposition: attachment;filename="'.$outputFileName.'"');//设置输出excel文件名称header('Cache-Control: max-age=0');header('Cache-Control: max-age=1');// If you're serving to IE over SSL, then the following may be neededheader ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the pastheader ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modifiedheader ('Cache-Control: cache, must-revalidate'); // HTTP/1.1header ('Pragma: public'); // HTTP/1.0$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//excel2003版本//$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');//excel2007版本$objWriter->save('php://output');exit;

/** ++++++++++++++++++++++++++++

       * excel文件导入

         ++++++++++++++++++++++++++++ */

excel文件导入通常是读取excel文件存放成PHP数组,然后就可以进行相应的操作了[计算,入库等]

首先同样是加载PHPExcel类并实例化

include_once PATH;$file_path = '/var/www/biby.test.xls';//要导入的excel文件$PHPExcel = new PHPExcel();$PHPReader = new PHPExcel_Reader_Excel2007();if(!$PHPReader->canRead($file_path)){    $PHPReader = new PHPExcel_Reader_Excel5();    if(!$PHPReader->canRead($file_path)){        $this->error('Excel文件处理错误!');    }}

接着加载excel文件并读取相关信息

$PHPExcel = $PHPReader->load($file_path);$currentSheet = $PHPExcel->getSheet(0);//当前活动sheet$allColumn = $currentSheet->getHighestColumn();//excel最高列值PHPExcel_Cell::columnIndexFromString($allColumn);//excel文件总列数$allRow = $currentSheet->getHighestRow();//excel总行数,这里要注意空白行的影响$inMonth = $currentSheet->getCellByColumnAndRow(0,2);//这里用数字代表行列 eg,0,2代表第二行第一列 //可以用for循环读取单元格的值,构造我们需要的数组$inMonth = PHPExcel_Style_NumberFormat::toFormattedString($inMonth->getCalculatedValue(), 'YYYY-MM');//将读取的时间值转换为我们需要的格式//eg://一般第一行是表头,我们可以用数组来存储该值$KeyArr = array('month','name','sex','age');//同时作二维数组下标值//后面的行数可以用for嵌套循环读取$i = 0;for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {//行循环 && $allRow 行数     $k = 0;    for ($j=65; $j > 32; $j--) {//列循环 65为A对应ASCII码 32是根据excel表列数,根据第一列是A[65]计算而得    	$selcolumn = ord('A') - $j;//列数    	if( isset($KeyArr[$k]) ){    		if($selcolumn==0){//第一列[月份] && 月份要转换    			$downData[$i][$KeyArr[$k]] = $currentSheet->getCellByColumnAndRow($selcolumn,$currentRow);			$downData[$i][$KeyArr[$k]] = PHPExcel_Style_NumberFormat::toFormattedString($DeferData[$i][$DeferKeyArr[$k]]->getCalculatedValue(), 'YYYY-MM');    		}else{    			$downData[$i][$KeyArr[$k]] = trim($currentSheet->getCellByColumnAndRow($selcolumn,$currentRow)->getValue());    		}    		$k++;    	}else{    		$k++;    		continue;    	}    }    $i++;}//$downData 就是我们组装后的数组,可以根据我们的业务需求进行对应操作

当然,也可以将excel读成一个简单的二维数组[如果我们不需要特定结构的数组]

$PHPExcel = $PHPReader->load($file_path);$currentSheet = $PHPExcel->getSheet(0);$currentSheet->ToArray();

转载于:https://my.oschina.net/bibyzhang/blog/224375

你可能感兴趣的文章
并发、并行、同步、异步、多线程的区别?
查看>>
GitHub 配置指南
查看>>
delegation
查看>>
linux TCP客户端指定端口号连接服务端
查看>>
CSS3设置Table奇数行和偶数行样式
查看>>
python:大量参数如何传递
查看>>
Javascript下的AJAX
查看>>
Django之路由系统
查看>>
KVM autotest
查看>>
Python语言特性之3:@staticmethod和@classmethod
查看>>
1.单一职责原则(Single Responsibility Principle)
查看>>
LeetCode--058--最后一个单词的长度
查看>>
PHP-002
查看>>
leetcode - Remove Duplicates from Sorted List II
查看>>
如何解决 Windows 实例出现身份验证错误及更正 CredSSP
查看>>
hibernate.properties和hibernate.cfg.xml
查看>>
简说宽带商的弹窗广告进化及网站应对之策(DNS劫持进化论)
查看>>
3Sum Smaller
查看>>
.NET简谈自定义事务资源管理器
查看>>
【PM&数据】如何正确地利用产品数据【上】
查看>>