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.pswp.cn/news/258398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258398.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

慎用stl中的erase的返回值

在windows下的VC編譯或者Mac OX的XCode下編譯也許不會出問題。但是在linux下可能就會掛掉。 比如我上一篇里的poj4093出現了編譯錯誤 2007120.8890/Main.cc: In function ‘int main()’: 2007120.8890/Main.cc:50:44: error: no match for ‘operator’ in ‘itr1 a.std::set…

AD20學習筆記3---PCB封裝庫的創建方法及現有封裝調用

前言&#xff1a; 本文學習視頻是B站點擊率第一的凡億教育《Altium Designer 20 19&#xff08;入門到精通全38集&#xff09;四層板智能車PCB設計視頻教程》&#xff0c;視頻地址&#xff1a;Altium Designer 20 19&#xff08;入門到精通全38集&#xff09;四層板智能車PCB設…

php的兩種復合數據類型是什么意思_2.4PHP復合數據類型:數組和對象

Posted by 撒得一地 on 2015年9月29日 in PHP入門教程國外穩定加速器推薦vypr |NordPHP中復合數據類型包括兩種&#xff0c;即數組和對象。array(數組)&#xff1a;一組數據的集合。object(對象)&#xff1a;對象是類型的實例&#xff0c;使用new命令來創建。數組(array)數組是…

Python守護進程和腳本單例運行

2019獨角獸企業重金招聘Python工程師標準>>> 一、簡介 守護進程最重要的特性是后臺運行&#xff1b;它必須與其運行前的環境隔離開來&#xff0c;這些環境包括未關閉的文件描述符、控制終端、會話和進程組、工作目錄以及文件創建掩碼等&#xff1b;它可以在系統啟動…

分析access.log

cat access.log | awk {print $4,$1,$9} | awk -F/ {print $3}| awk -F: {print $2 ":" $3,$4} | awk {print $1,$3,$4} | uniq -c | sort -n轉載于:https://www.cnblogs.com/olderblue/p/4778339.html

AD20學習筆記4---網表導入及模塊化布局設計

前言&#xff1a; 本文學習視頻是B站點擊率第一的凡億教育《Altium Designer 20 19&#xff08;入門到精通全38集&#xff09;四層板智能車PCB設計視頻教程》&#xff0c;視頻地址&#xff1a;Altium Designer 20 19&#xff08;入門到精通全38集&#xff09;四層板智能車PCB設…

Paoding-Rose學習

* HttpServletRequest.getContextPath 獲取web程序root。如果是默認位置&#xff0c;返回””空串&#xff0c;否則返回 /根路徑名 * rose是如何掃描到資源的 利用spring提供的類掃描類和jar* rose建立匹配樹的過程 傳入根節點和List&#xff0c;按照路徑建立每個節點 * Module…

楪祈機器人_饑荒 Inori楪祈人物MOD V20161211

使用說明&#xff1a;1.解壓縮2.復制所有文件到游戲目錄mods3.啟動游戲&#xff0c;點擊mods(模組)加載MOD適用游戲版本&#xff1a;理論上支持所有版本的饑荒(普通&#xff0c;巨人&#xff0c;海難&#xff0c;聯機版)MOD說明&#xff1a;饑荒 Inori楪祈人物MOD&#xff1b;由…

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;注視一個特別的初…

ComponentName的意思

ComponentName是用來打開其它應用程序中的Activity或服務的。 使用方法&#xff1a; Intent inew Intent();i.setComponent(new ComponentName(String packageName,String activityName ));startActivity(i); 轉載于:https://www.cnblogs.com/hrhguanli/p/3861243.html

nginx沒有worker進程_如何優雅地關閉worker進程?

點擊上方“武培軒”&#xff0c;選擇“設為星標”技術文章第一時間送達&#xff01;之前我們講解 Nginx 命令行的時候&#xff0c;可以看到 Nginx 停止有兩種方式&#xff0c;分別是 nginx -s quit 和 nginx -s stop&#xff0c;其中 stop 是指立即停止 Nginx&#xff0c;而 qu…

[Python3]Python面向對象的程序設計

[Python3]Python面向對象的程序設計 一、面向對象的程序設計的由來 1.第一階段&#xff1a;面向機器&#xff0c;1940年以前 最早的程序設計都是采用機器語言來編寫的,直接使用二進制碼來表示機器能夠識別和執行的指令和數據。 簡單來說,就是直接編寫 0 和 1 的序列來代表程序語…

RC電路輸出波形的時域與頻域分析

RC一階電路為例進行時域和頻域分析&#xff0c;激勵Us為方波&#xff0c;以Uc作為輸出的波形相當于積分電路的輸出曲線&#xff0c;以Ur作為輸出的波形相當于微分電路的輸出曲線。電容對輸入電壓具有平滑作用&#xff0c;平滑程度與時間常數有關&#xff0c;衰減程度與帶寬設計…

JQuery之編寫彈窗

演示地址&#xff1a;http://sandbox.runjs.cn/show/irefekbs <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>*{ margin: 0; padding: 0;}#login { z-index:9999…

[ext/iconv/iconv.lo] Error 1

辦法1&#xff1a; wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz tar -zxvf libiconv-1.13.1.tar.gz cd libiconv- 1.13.1 ./configure make make install 辦法2&#xff1a; wget http://down.wdlinux.cn/in/iconv_ins.sh sh iconv_ins.sh轉載于:https:/…

多麥克風做拾音的波束_麥克風陣列是什么 有哪些關鍵技術?

麥克風陣列是什么 有哪些關鍵技術&#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…