文档章节

使用PHPExcel对Execl多个sheet读写

心驰
 心驰
发布于 2017/09/06 17:46
字数 913
阅读 4
收藏 0
点赞 0
评论 0

###前言

1
2
3
我们通常在工作中会遇到把数据库的数据导入到Execl,这时使用PHPExecl就会很方便。
在官方网站下载:http://phpexcel.codeplex.com/
下面的代码,我自己设定了模拟数据。

这是写入多个Sheet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?php
/**
 *  简单实用Execl
 */
             
set_include_path('.'.get_include_path().PATH_SEPARATOR.dirname(__FILE__).'/PHPExecl/');
/* @func 引入类 */
require 'PHPExcel.php';
             
//模拟数据
$mulit_arr = array(
    array('标题1', '标题2', '标题3'),
    array('a', 'b', 'c'),
    array('d', 'e', 'f')
);
 
/* 优化设置 */
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize'=>'16MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
/* @实例化 */
$obpe = new PHPExcel();
             
/* @func 设置文档基本属性 */
$obpe_pro = $obpe->getProperties();
$obpe_pro->setCreator('midoks')//设置创建者
         ->setLastModifiedBy('2013/2/16 15:00')//设置时间
         ->setTitle('data')//设置标题
         ->setSubject('beizhu')//设置备注
         ->setDescription('miaoshu')//设置描述
         ->setKeywords('keyword')//设置关键字 | 标记
         ->setCategory('catagory');//设置类别
             
             
/* 设置宽度 */
//$obpe->getActiveSheet()->getColumnDimension()->setAutoSize(true);
//$obpe->getActiveSheet()->getColumnDimension('B')->setWidth(10);
             
//设置当前sheet索引,用于后续的内容操作
//一般用在对个Sheet的时候才需要显示调用
//缺省情况下,PHPExcel会自动创建第一个SHEET被设置SheetIndex=0
//设置SHEET
$obpe->setactivesheetindex(0);
//写入多行数据
foreach($mulit_arr as $k=>$v){
    $k = $k+1;
    /* @func 设置列 */
    $obpe->getactivesheet()->setcellvalue('A'.$k, $v[0]);
    $obpe->getactivesheet()->setcellvalue('B'.$k, $v[1]);
    $obpe->getactivesheet()->setcellvalue('C'.$k, $v[2]);
}
             
//创建一个新的工作空间(sheet)
$obpe->createSheet();
$obpe->setactivesheetindex(1);
//写入多行数据
foreach($mulit_arr as $k=>$v){
    $k = $k+1;
    /* @func 设置列 */
    $obpe->getactivesheet()->setcellvalue('A'.$k, $v[0]);
    $obpe->getactivesheet()->setcellvalue('B'.$k, $v[1]);
    $obpe->getactivesheet()->setcellvalue('C'.$k, $v[2]);
}
             
//写入类容
$obwrite = PHPExcel_IOFactory::createWriter($obpe, 'Excel5');
//ob_end_clean();
//保存文件
$obwrite->save('mulit_sheet.xls');
             
//or 以下方式
/*******************************************
            直接在浏览器输出
*******************************************/
/**
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='mulit_sheet.xls'");
header('Content-Transfer-Encoding:binary');
$obwrite->save('php://output');
?>
*/
?>

###读取多个Sheet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
/**
 *  @读取数据
 *  1.bug对日期格式读取错误进行了改进
 *  2.多个sheets取值
 */
set_include_path('.'.get_include_path().PATH_SEPARATOR.dirname(__FILE__).'/PHPExecl/');
/* @func 引入类 */
require 'PHPExcel.php';
   
//$obpe = new PHPExcel();
//var_dump($obpe);
   
//设置使用内容大小
ini_set('memory_limit','512M');
   
/**
 *  @func 读取execl内容的数据
 *  @param $fn Execl文件
 *  @param int $sheet 第几个sheet 默认0(当前)
 */
function read_execl($fn ,$sheet=0){
    if(!file_exists($fn)){
        exit($fn.'文件不存在');
    }
       
    //实例化处理对象
    $reader = new PHPExcel_Reader_Excel5();
    if(!$reader->canRead($fn)){
        $reader = new PHPExcel_Reader_Excel5();
    }else if(!$reader->canRead($fn)){
        echo 'No Excel';
        return;
    }
    ob_end_clean();
    //加载处理的文件
    $execl = $reader->load($fn);
    $csheet = $execl->getSheet($sheet);
       
    //var_dump($csheet);
    //取得共有多少列,若不使用此静态方法,获得的$col是文件列的最大的英文大写字母
    $cols=PHPExcel_Cell::columnIndexFromString($csheet->getHighestColumn());
       
    //多少行
    $rows = $csheet->getHighestRow();
    //var_dump($rows, $cols);
       
    //读取数据
    $result = array();
    for($row=1; $row<=$rows; $row++){
        for($col=0; $col<$cols; $col++){
            $cell =$csheet->getCellByColumnAndRow($col, $row);
            $cellstyleformat = $cell->getStyle($cell->getCoordinate())->getNumberFormat();//1.7.8可用
            //$cellstyleformat = $cell->getStyle($cell->getCoordinate())->getNumberFormat();//1.7.9可用
            //日期格式的判断
            $value = $cell->getValue();//获取值
            //var_dump($value);
            //return $value;
            $formatcode=$cellstyleformat->getFormatCode();
            //var_dump(PHPExcel_Shared_Date::ExcelToPHP($value));
            if (preg_match('/^(\[\$[A-Z]*-[0-9A-F]*\])*[hmsdy]/i', $formatcode)){
                //var_dump(PHPExcel_Shared_Date::ExcelToPHP($value));   
                $value = gmdate("Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($value));
            }else{  
                $value = PHPExcel_Style_NumberFormat::toFormattedString($value, $formatcode); 
                //var_dump('test:'.$value);
            }
            $result[$row][$col] = $value;
        }
    }
    //var_dump($result);
    //exit;
    return $result;
}
   
echo '<pre>';
$fn = 'mulit_sheet.xls';
$data = read_execl($fn, 1);
var_dump($data);
?>

本文转载自:http://midoks.cachecha.com/2013/08/25/php-execl.html

共有 人打赏支持
心驰
粉丝 0
博文 20
码字总数 910
作品 0
海淀
程序员
ThinkPHP用phpexcel导出excel

public function haha($list){ Vendor('PHPExcel.PHPExcel'); $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator("ctos") ->setLastModifiedBy("ctos") ->setTitle......

freedonn
2014/03/09
0
0
phpExcel导出大量数据出现内存溢出错误的解决方法

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

蜗牛奔跑
2015/07/17
0
0
PHPExcel常用方法汇总(转载)

PHPExcel常用方法汇总(转载) 博客分类: 脚本语言 ExcelOfficePHP单元测试Cache PHPExcel常用方法汇总 Posted by zeal on 2008-02-27 11:29 , 6027 characters | + 2 - 1 English 转载请保留...

niceguy_php
2014/02/24
0
0
php excel类 ,phpExcel使用方法介绍

新开发的项目中,财务系统的数据报表需要导出EXCEL 并且需要在excel里加一些格式,所以就研究了一下phpExcel类,在这里记录一下PHPEXCEL类的使用方法,以便已后查看: phpExcel,操作excel很...

刘赤龙
2010/06/08
0
0
phpExcel常用方法详解【附有php导出excel加超级链接】

http://www.codeplex.com/PHPExcel http://www.phpexcel.net 开发包Tests目录有详细使用实例 支持中文,注意文件编码,文件保存为utf-8 写excel //Include class requireonce(‘Classes/PHPEx...

PHP007
2012/07/20
0
0
PHP 操作 Excel PHPExcel 详解 --转

header header("Content-Type:application/vnd.ms-excel");header("Content-Disposition:attachment;filename=sample.xls");header("Pragma:no-cache");header("Expires:0"); 2.PHPExcel htt......

最深的夜
2015/02/03
0
0
完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

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

mickelfeng
2013/05/08
0
0
thinkphp之Excel的导出

thinkphp之Excel的导出 Excel的导出步骤: 1.下载phpexcel包,置于以下thinkphp框架路径。 内部还有一个文件夹和一个php文件 2.创建excel对象并设置excel对象的属性(ExportALLAction.class....

蜗牛奔跑
2015/08/07
0
0
PHPExcel内存泄漏问题

使用 PHPExcel 来生成 excel 文档是比较消耗内存的,有时候可能会需要通过一个循环来把大数据切分成若干个小的 excel 文档保存来避免内存耗尽。 然 而 PHPExcel 存在 circular references 的...

jqj
2009/05/15
0
0
PHPExcel读取excel文件

建议web只做上传功能,读取、处理还是放后台吧。PHPExcel还是比较耗费时间、内存的。 实例代码:error_reporting(0); requireonce 'PHPExcel1.8.0/Classes/PHPExcel.php'; //修改为自己的目录...

魏邪乎
2015/08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

【面试题】盲人坐飞机

有100位乘客乘坐飞机,其中有一位是盲人,每位乘客都按自己的座位号就坐。由于盲人看不见自己的座位号,所以他可能会坐错位置,而自己的座位被占的乘客会随便找个座位就坐。问所有乘客都坐对...

garkey
46分钟前
0
0
谈谈神秘的ES6——(二)ES6的变量

谈谈神秘的ES6——(二)ES6的变量 我们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,我们先来回顾一下。 首先,在ES5中,我们所有的变量都是通过关键字var来定义的。...

JandenMa
今天
1
0
arts-week1

Algorithm 594. Longest Harmonious Subsequence - LeetCode 274. H-Index - LeetCode 219. Contains Duplicate II - LeetCode 217. Contains Duplicate - LeetCode 438. Find All Anagrams ......

yysue
今天
0
0
NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
今天
1
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
1
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
2
0
编程学习笔记之python深入之装饰器案例及说明文档[图]

编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰...

原创小博客
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部