日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Yii框架 phpexcel 导出

發布時間:2023/12/13 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的Yii框架 phpexcel 导出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。