文档章节

phpexcel导入导出excel文件常用操作

binzone
 binzone
发布于 2014/04/20 22:17
字数 1121
阅读 1879
收藏 4

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);//当前活动sheet
header('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 needed
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header ('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();

© 著作权归作者所有

binzone
粉丝 1
博文 8
码字总数 4671
作品 0
广州
程序员
私信 提问
基于PHPExcel库的EXCEL导入导出

PHPExcel类是php一个excel表格处理插件,最近由于工作需要用到了这个插件,完成了一个excel导入导入的功能。现在将主要逻辑整理一下和大家分享,有需要的可以参考一下。 下面的事例只是完成了...

r-ricky
2015/06/19
241
0
使用phpExcel实现Excel数据的导入导出(完全步骤)

很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入...

daniel-john
2014/03/23
1K
0
phpExcel导出大量数据出现内存溢出错误的解决方法

我们经常会使用phpExcel导入或导入xls文件,但是如果一次导出数据比较大就会出现内存溢出错误,下面我来总结解决办法 phpExcel将读取的单元格信息保存在内存中,我们可以通过 复制代码代码如下...

蜗牛奔跑
2015/07/17
467
0
Codeigniter利用PHPExcel导出Excel文件

在php中我们如果要导入excel文件我们会直接使用php输出csv文件或者使用phpexcel直接生成excel文件,下面我再来介绍Codeigniter利用PHPExcel导出Excel文件具体实现方法,有需要学习的朋友可参...

mickelfeng
2013/05/05
3K
1
完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

准备工作: 1.下载phpexcel1.7.6类包; 2.解压至TP框架的ThinkPHPVendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图; 编写代码(以一个订单汇总数据为例): 1. 创建数据库及表; 2...

mickelfeng
2013/05/08
334
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部