文档章节

使用PHPExcel对Execl多个sheet读写

心驰
 心驰
发布于 2017/09/06 17:46
字数 913
阅读 4
收藏 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

共有 人打赏支持
上一篇: solr环境搭建
下一篇: 搭建svn服务器
心驰
粉丝 0
博文 21
码字总数 1050
作品 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
php excel类 ,phpExcel使用方法介绍

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

刘赤龙
2010/06/08
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
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

没有更多内容

加载失败,请刷新页面

加载更多

爬虫教程」Python做一个简单爬虫,小白也能看懂的教程

俗话说“巧妇难为无米之炊”,除了传统的数据源,如历史年鉴,实验数据等,很难有更为简便快捷的方式获得数据,在目前互联网的飞速发展写,大量的数据可以通过网页直接采集,“网络爬虫”应运...

糖宝lsh
今天
1
0
KEIL MDK工程中的宏定义:字符,值,字符串

下图中定义了2个宏: 等效于文件中: #define MCU_FLASH_LESSTHAN_64K #define VERSION_INFO_hw 'a' // MDK :VERSION_INFO_hw="'a'" 即MDK中的VERSION_INFO_hw="'a'" 和 #define VERS......

SamXIAO
今天
0
0
集合的最优子集划分

问题描述:如何将一个个数为n的集合N划分为为若干个子集N1…Nk,其中1≤k≤n,计算出每个子集的最优结果R1…Rk,使得F(R1…Rk)为最优的结果。 这个问题可以分成3步解决: 求出集合所有子集 ...

laolin23
今天
0
0
JavaScript实现在线Markdown编辑器、转换HTML工具-toolfk程序员工具网

本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果。T...

toolfk
今天
3
0
Source Tree 在git 密码更新后,无法拉取代码的解决办法

背景: git 密码总是需要修改。在修改代码后,拉去代码, source tree 总提示access denied. 解决方法:重新修改git 仓库对应的密码。 for mac:应用程序 -》 钥匙串 -》 搜索 source tre...

Carlyle_Lee
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部