Yii框架 phpexcel 导出

一、说明

      之前使用的是PHPExcelXML包实现的数据导出,由于导出的文件扩展名为“.xls” 在office2007上带不开,报如下图错误(用 WPS都能打开)

因此,此次采用了 PHPExcel包 不仅支持生成Excel(.xls)还支持Excel2007(.xlsx)以及PDF 文档。

二、资源

     PHPExcel的官方网站如下:http://phpexcel.codeplex.com/

三、目录

      当前的版本是:PHPExcel_1.8.0_odt.zip

     PHPExcel.php文件是类库的接口,外部的PHP代码通过它来实现对PHPExcel的调用,

     PHPExcel目录下是各种不同文档(如Excel、Excel2007、PDF等)的读取和生成的具体操作代码.

四、修改配置文件

      修改路径:extensions/PHPExcel/Autoloader.php文件Register方法,代码如下;

public static function Register() {//这是phpexcel导出修改的方法/* if (function_exists('__autoload')) {//    Register any existing autoloader function with SPL, so we don't get any clashesspl_autoload_register('__autoload');}//    Register ourselves with SPLreturn spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));*///这是phpexcel导出修改的方法$functions = spl_autoload_functions(); foreach ( $functions as  $function) spl_autoload_unregister($function); $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions); foreach ( $functions as $function) $x = spl_autoload_register($function); return $x; }   //    function Register()

五、Controller中使用的方法

      说明:因为我目前的代码条件,不能直接写一个phpexcel导出的方法,只能判断是否点击了“Save to excel” button 按钮通过value值来判断访问导出的代码段;

1、加载相关代码

    在YII框架中某一方法中插入如下代码;

 /*导出Excel----数据-------------------star-------2015-8-28--lcc */include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel.php');include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel/Writer/Excel2007.php'); include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel/Writer/Excel5.php'); include_once(dirname(dirname(__FILE__)).'/extensions/PHPExcel/IOFactory.php'); $objPHPExcel = new PHPExcel(); 

    说明:首先实例化对象后就要测试$objPHPExcel是否是一个对象!如果不是,那就要修改以上加载的问题,如果没有问题就往下编辑代码

2、整理数据

  (一) 遍历数组形式:

          因为我的代码是经过多层筛选的数据,放在一个二维数组里,因此,要遍历数组将数据放在一个对象里 

          说明:我有两个数组,第一个数组是  $shfes 放的是列标题;第二个数组是 $prinfo 放的是每列的数据内容,$prinfo 的格式如下图

//拼数据          $i=0;  $p=0;             while ( $i<=count($shfes)) {  //插入列标题                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue(DatabaseSearchForm::$exarr[$i].'1', $shfes[$i]['name']);                   $i++;}
$exhang=2;foreach ($prinfo as $key=>$value) { //插入每列的内容 for ($s=0; $s <count($value) ; $s++) { $objPHPExcel->setActiveSheetIndex(0)->setCellValue(DatabaseSearchForm::$exarr[$s].$exhang, $value[$s]);}$exhang++;}

    代码说明:

         1、DatabaseSearchForm::$exarr[$i] 是在Model层定义了一个静态的$exarr一维数组,存放的是excel 每列的 A、B、C~Z

         2、$exhang 是一个变量从Excel的第2行开始插入

    (二)静态拼写数组(仅供参考)

//插入列标题
$objPHPExcel
->setActiveSheetIndex(0) ->setCellValue('A1', '列标题1') ->setCellValue('B1', '列标题2') ->setCellValue('C1', '列标题3') ->setCellValue('D1', '列标题4') ->setCellValue('E1', '列标题5');
//插入每列的内容
if(!empty($model->Goods)){ $i =2; foreach ($model->Goods as $one){ $guige = ''; $guige = $one->StockSpliterValue; $objPHPExcel->setActiveSheetIndex(0) ->setCellValue("A$i", $one->gd_sn) ->setCellValue("B$i", $one->gd_name) ->setCellValue("C$i", "$guige") ->setCellValue("D$i", $one->order_num) ->setCellValue("E$i", $one->stock_num); $i++; } }

3、写入数据到excel,格式为.xls

//写入数据$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);header('Content-Type: application/vnd.ms-excel');  header('Content-Disposition: attachment;filename="SMM_'.$price[$products]['type']."_".str_replace('-', '', $sform->start).'.xls"');  header('Cache-Control: max-age=0');  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  $objWriter->save('php://output');                    Yii::app()->end();  spl_autoload_register(array('YiiBase','autoload'));                              exit();
}
/*导出Excel----数据------------------------------end---------- */

3、写入数据到excel,格式为.xlsx

 

 //写入数据$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);                    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');  header('Content-Disposition: attachment;filename="SMM_'.$price[$products]['type']."_".str_replace('-', '', $sform->start).'.xlsx"');   header('Cache-Control: max-age=0');  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');  $objWriter->save('php://output');  exit;  
}/*导出Excel----数据------------------------------end---------- */

 

 

 

说明:经过测试修改excel的扩展名是可以修改的如.xlsx 可以修改成 .xls 形式的,其他代码不变。

这样就可以咯~~效果图如下

参考博客:

http://blog.csdn.net/xiaojun1288/article/details/7349471

http://blog.csdn.net/alongken2005/article/details/6284635

http://blog.csdn.net/sadfishsc/article/details/7543291

http://www.cnblogs.com/jshen/p/4149812.html

http://www.th7.cn/Program/php/201506/489276.shtml

 

如下是PHPExcelXML导出的案例

 /*** @desc 导出所有关键字     */public function actionEchokeyword(){$columns = array(array('name' => '类型' , 'width' => '183.75'),array('name' => '所属品目' , 'width' => '57.75'),array('name' => '关键字' , 'width' => '57.75'),array('name' => '产品代码' , 'width' => '57.75'),array('name' => '链接地址' , 'width' => '57.75'),array('name' => '是否热门' , 'width' => '57.75'),array('name' => '点击次数' , 'width' => '57.75'),array('name' => '最后点击时间' , 'width' => '57.75'),);          $key = EnNewsKeywords::model()->findAll();foreach ($key as $k){$data[] = array($k->type,$k->team,         empty($k->keywordsName)?'':$k->keywordsName,empty($k->productinfo)?'':$k->productinfo,$k->link_address,empty($k->is_hotkeys)?'否':'是',$k->clicknum,$k->end_clicktime,);}        $file_name = sprintf('SMM-newKeywords-list-%s',date('Ymd',time()));Yii::import('application.extensions.phpexcel.JPhpExcel');$xls = new JPhpExcel('UTF-8', false, 'keyword List');$xls -> setColumns($columns);$xls->addArray($data);$xls->generateXML($file_name);}

 

转载于:https://www.cnblogs.com/lccjob/p/4777774.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AD20学习笔记3---PCB封装库的创建方法及现有封装调用

前言&#xff1a; 本文学习视频是B站点击率第一的凡亿教育《Altium Designer 20 19&#xff08;入门到精通全38集&#xff09;四层板智能车PCB设计视频教程》&#xff0c;视频地址&#xff1a;Altium Designer 20 19&#xff08;入门到精通全38集&#xff09;四层板智能车PCB设…

Python守护进程和脚本单例运行

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 守护进程最重要的特性是后台运行&#xff1b;它必须与其运行前的环境隔离开来&#xff0c;这些环境包括未关闭的文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等&#xff1b;它可以在系统启动…

AD20学习笔记4---网表导入及模块化布局设计

前言&#xff1a; 本文学习视频是B站点击率第一的凡亿教育《Altium Designer 20 19&#xff08;入门到精通全38集&#xff09;四层板智能车PCB设计视频教程》&#xff0c;视频地址&#xff1a;Altium Designer 20 19&#xff08;入门到精通全38集&#xff09;四层板智能车PCB设…

javascript 模块化

2019独角兽企业重金招聘Python工程师标准>>> 一直好奇像node.js,require.js的模块化是怎么做的&#xff0c;在看了《你不知道的javascript》后&#xff0c;对js的模块化有了一些简单的了解。这本书真的还不错。 书里讲述了js的模块化的原理 和 现代js实现模块化的简…

AD20学习笔记5---PCB设计规则设置及PCB手工布线

前言&#xff1a; 本文学习视频是B站点击率第一的凡亿教育《Altium Designer 20 19&#xff08;入门到精通全38集&#xff09;四层板智能车PCB设计视频教程》&#xff0c;视频地址&#xff1a;Altium Designer 20 19&#xff08;入门到精通全38集&#xff09;四层板智能车PCB设…

理论物理极础9:相空间流体和吉布斯-刘维尔定理

莱尼喜欢看河&#xff0c;尤其喜欢看漂浮物顺流而下。他猜想漂浮物如何穿过礁石&#xff0c;如何陷入漩涡。但是河流整体&#xff0c;水量&#xff0c;流切变&#xff0c;河的分流和汇聚&#xff0c;这是莱尼所看不到的。 相空间流体 在经典力学里&#xff0c;注视一个特别的初…

nginx没有worker进程_如何优雅地关闭worker进程?

点击上方“武培轩”&#xff0c;选择“设为星标”技术文章第一时间送达&#xff01;之前我们讲解 Nginx 命令行的时候&#xff0c;可以看到 Nginx 停止有两种方式&#xff0c;分别是 nginx -s quit 和 nginx -s stop&#xff0c;其中 stop 是指立即停止 Nginx&#xff0c;而 qu…

RC电路输出波形的时域与频域分析

RC一阶电路为例进行时域和频域分析&#xff0c;激励Us为方波&#xff0c;以Uc作为输出的波形相当于积分电路的输出曲线&#xff0c;以Ur作为输出的波形相当于微分电路的输出曲线。电容对输入电压具有平滑作用&#xff0c;平滑程度与时间常数有关&#xff0c;衰减程度与带宽设计…

多麦克风做拾音的波束_麦克风阵列是什么 有哪些关键技术?

麦克风阵列是什么 有哪些关键技术&#xff1f;亚马逊Echo和谷歌Home争奇斗艳&#xff0c;除了云端服务&#xff0c;他们在硬件上到底有哪些差异&#xff1f;我们先将Echo和Home两款音箱拆开来看&#xff0c;区别最大的还是麦克风阵列技术。Amazon Echo采用的是环形61麦克风阵列…

如何用AD20打开ddb文件

用AD20直接打开ddb文件会报错&#xff0c;在AD20中使用导入向导才是ddb文件的正确打开方式。 1.用AD20直接打开ddb文件的报错提示 2.使用导入向导打开ddb文件 除了以下两处关键设置的地方&#xff0c;一路next就行。

Codeforces Round #419 (Div. 2)

1.题目A&#xff1a;Karen and Morning 题意&#xff1a; 给出hh:mm格式的时间&#xff0c;问至少经过多少分钟后&#xff0c;该时刻为回文字符串&#xff1f; 思路&#xff1a; 简单模拟&#xff0c;从当前时刻开始&#xff0c;如果hh的回文rh等于mm则停止累计。否则&#xff…

Java NIO 系列教程

Java NIO&#xff08;New IO&#xff09;是从Java 1.4版本开始引入的一个新的IO API&#xff0c;可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。感谢并发编程网的翻译和投递。 &#xff08;关注ITeye官微&#xff0c;随时随地查看最新开发资讯、技术文章…

Multisim14仿真入门笔记

本文是B站北京邮电大学邓刚老师《Multisim仿真入门》的学习笔记&#xff0c;视频地址&#xff1a;【电路仿真】Multisim仿真入门&#xff08;北京邮电大学 邓刚主讲&#xff09;_哔哩哔哩_bilibili。 1.Multisim简介 Multisim14是一种专门用于电路仿真和设计的软件之一&#x…

office365在win7上使用订阅+win7在线升级win10就用它(亲测有效)

前言&#xff1a; 作为office365的重度使用用户&#xff0c;最近两天订阅到期&#xff0c;续订之后一直显示无法验证此订阅&#xff08;仅查看&#xff09;&#xff0c;office365未经授权&#xff0c;大多数功能已停用&#xff0c;狂晕&#xff01;&#xff01;&#xff01; 在…

HDU 4414 Finding crosses(搜索)

题目链接&#xff1a;HDU 4414 Finding crosses 【题目大意】 给你一张n*n的图&#xff0c;由o #这两个元素组成&#xff0c;让我们找其中有多少十字架。 十字架由#构成 十字架的纵向长度等于横向长度 &#xff0c; 且这个长度要为大于等于3的奇数。 构成十字架的#周围不能有多…

递归和分治思想及其应用

目录 递归和分治思想一些实例逆序输出字符串查找数组元祖是否存在汉诺塔问题八皇后问题更多&#xff1a;递归和分治思想 如果可以使用迭代&#xff0c;尽量别使用递归。由编译原理可以知道&#xff0c;每次自调用的时候&#xff0c;计算机都需要保存在调用&#xff0c;浪费时间…

AM+PM+FM基本调制原理及相关理论

总论&#xff1a; 调制信号&#xff1a; 模拟信号m(t)&#xff0c;可以是正弦波信号、方波信号等任意信号&#xff0c;又称基带信号 载波信号&#xff1a;一般为正弦波信号 已调信号&#xff1a; 幅度调制AM---A(t)随m(t)成比例变化----线性调制 相位调制PM---随m(t)成比…

win32 api 文件操作!

CreateFile打开文件要对文件进行读写等操作&#xff0c;首先必须获得文件句柄&#xff0c;通过该函数可以获得文件句柄&#xff0c;该函数是通向文件世界的大门。ReadFile从文件中读取字节信息。在打开文件获得了文件句柄之后&#xff0c;则可以通过该函数读取数据。WriteFile向…

小说里的lt什么意思_游戏cpdd网络用语是什么意思 王者荣耀里很常见

[闽南网]随着互联网的发展&#xff0c;越来越多的流行语横空出世&#xff0c;在网络上得到广泛使用。当一个网络语流行的时候&#xff0c;不管在微博上还是贴吧里&#xff0c;都会看见和流行语有关的句子和表情包。眼下在各种游戏里&#xff0c;总是能看到游戏玩家们说“cpdd”…

linux系统 硬链接和软链接

背景&#xff1a; 当几个用户同在一个项目里工作时。经常须要共享文件。假设一个共享文件同一时候出如今属于不同用户的不同文件夹下。工作起来就非常方便。比如B和C文件夹下有一文件D是两者都能够訪问和改动的共享文件&#xff0c;这样是非常方便&#xff0c;但也会有一些问题…