tp5 導出execl 并且解決亂碼問題

title: Excel導出功能--結合ThinkPHP5.0框架(超詳細)

tags: [Excel導出,TP5,導出,表格]

目前,很多場景下都在使用Excel導出稻据,現(xiàn)在結合ThinkPHP5.0框架詳細說明下excel導出功能的實現(xiàn)步驟。

原文博客:煜兒博客

一.? 準備工作

Excel的導出功能买喧,在很多框架中都有配置捻悯,其中最廣泛的就是使用composer來下載excel的擴展包,但是本人在使用的過程中淤毛,卻發(fā)現(xiàn)了一個問題:TP5.0框架通過composer來下載excel擴展包今缚,卻出現(xiàn)了錯誤,原文是該擴展包已經被廢棄低淡,請使用別的版本姓言。

最終,本人去github上下載了1.8版本的擴展包查牌。

下載地址:PHPExcel1.8版本下載

二.? 詳細配置

【第一步】將下載的1.8擴展包解壓事期,將里面全部內容復制到extend文件夾下,并改名為PHPExcel纸颜,如圖:

復制并改名

【第二步】找到application/common.php兽泣,在里面寫一個公共的導出函數(shù),這樣胁孙,其他控制器均可以使用唠倦,詳細信息請看代碼注釋,函數(shù)代碼如下:

請先在common.php文件頂部引入Loader類:use think\Loader;

function excelFileExport($data = [],$title='')

{

? ? //文件名

? ? $fileName = $title.".xls";

? ? //加載第三方類庫

? ? Loader::import('PHPExcel.Classes.PHPExcel');

? ? Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');

? ? //實例化excel類

? ? $excelObj = new \PHPExcel();

? ? //構建列數(shù)--根據(jù)實際需要構建即可

? ? $letter = array('A', 'B', 'C', 'D');

? ? //表頭數(shù)組--需和列數(shù)一致

? ? $tableheader = array('學號','姓名', '年齡', '性別');

? ? //填充表頭信息

? ? for ($i = 0; $i < count($tableheader); $i++) {

? ? ? ? $excelObj->getActiveSheet()->setCellValue("$letter[$i]1", "$tableheader[$i]");

? ? }

? ? //循環(huán)填充數(shù)據(jù)

? ? foreach ($data as $k => $v) {

? ? ? ? $num = $k + 1 + 1;

? ? ? ? //設置每一列的內容

? ? ? ? $excelObj->setActiveSheetIndex(0)

? ? ? ? ? ? ->setCellValue('A' . $num, $v['number'])

? ? ? ? ? ? ->setCellValue('B' . $num, $v['name'])

? ? ? ? ? ? ->setCellValue('C' . $num, $v['age'])

? ? ? ? ? ? ->setCellValue('D' . $num, $v['sex']);

? ? ? ? ? ? //設置行高

? ? ? ? ? ? $excelObj->getActiveSheet()->getRowDimension($k+4)->setRowHeight(30);

? ? }

? ? //以下是設置寬度

? ? $excelObj->getActiveSheet()->getColumnDimension('A')->setWidth(46);

? ? $excelObj->getActiveSheet()->getColumnDimension('B')->setWidth(20);

? ? $excelObj->getActiveSheet()->getColumnDimension('C')->setWidth(10);

? ? $excelObj->getActiveSheet()->getColumnDimension('D')->setWidth(20);

? ? //設置表頭行高

? ? $excelObj->getActiveSheet()->getRowDimension(1)->setRowHeight(28);

? ? $excelObj->getActiveSheet()->getRowDimension(2)->setRowHeight(28);

? ? $excelObj->getActiveSheet()->getRowDimension(3)->setRowHeight(28);

? ? //設置居中

? ? $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

? ? //所有垂直居中

? ? $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

? ? //設置字體樣式

? ? $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('黑體');

? ? $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(20);

? ? $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);

? ? $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);

? ? $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setName('宋體');

? ? $excelObj->getActiveSheet()->getStyle('A1:D1')->getFont()->setSize(16);

? ? $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getFont()->setSize(10);

? ? //設置自動換行

? ? $excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setWrapText(true);

? ? // 重命名表

? ? $fileName = iconv("utf-8", "gb2312", $fileName);

? ? // 設置下載打開為第一個表

? ? $excelObj->setActiveSheetIndex(0);

? ? ob_end_clean();

? ? //設置header頭信息

? ? header('Content-Type: application/vnd.ms-excel;charset=UTF-8');

? ? header("Content-Disposition: attachment;filename='{$fileName}'");

? ? header('Cache-Control: max-age=0');

? ? $writer = \PHPExcel_IOFactory::createWriter($excelObj, 'Excel5');

? ? $writer->save('php://output');

? ? exit();

}

【第三步】新建一個控制器:Student.php涮较,Student控制器中新建一個方法export()稠鼻,在該方法中調用common.php中的excelFileExport()方法,如下:

publicfunctionexport(){//該處應為從數(shù)據(jù)庫中查出數(shù)據(jù)狂票,這

里僅作演示:$data=Db::name('student')->select();//因不同需求候齿,文件名不同,需要自己構建$fileName='學生信息表';//調用公共方法excelFileExport($data,$fileName);}

【第四步】在html中寫一個<a href='YourRoute'>標簽闺属,點擊請求Student控制器中的export()方法慌盯,即可完成下載。

==總結==

此例掂器,大致分為三個大步驟:

1.將下載的 1.8版本擴展包融合到TP5.0框架中亚皂;

2.在common.php寫一個導出的公共函數(shù);

3.在控制器中調用該公共函數(shù)

【注意】公共函數(shù)中的列數(shù)根據(jù)實際需要更改即可 国瓮,盡量在控制器中查出的數(shù)據(jù)字段數(shù)和列數(shù)保持相同

至此灭必,TP5.0的excel導出功能已經基本完成狞谱,如需其他配置,請參考phpExcel開發(fā)文檔禁漓。

========? 本文原創(chuàng)跟衅,如需轉發(fā),請注明出處? ========

作者:ityuer

鏈接:http://www.reibang.com/p/0c1121d92d14

來源:簡書

著作權歸作者所有璃饱。商業(yè)轉載請聯(lián)系作者獲得授權与斤,非商業(yè)轉載請注明出處。

$objPHPExcel->getActiveSheet()->setTitle('Simple');13$objPHPExcel->setActiveSheetIndex(0);

14 ob_end_clean();//解決亂碼核心 就在此處添加此函數(shù)

header('Content-Type: application/vnd.ms-excel');16header('Content-Disposition: attachment;filename="test_list.xls"');17header('Cache-Control: max-age=0');18header('Cache-Control: max-age=1');19header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');20header('Last-Modified: ' .gmdate('D, d M Y H:i:s') . ' GMT');21header('Cache-Control: cache, must-revalidate');22header('Pragma: public');


phpexecl類庫下載?

https://www.php.cn/xiazai/leiku/1491

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末荚恶,一起剝皮案震驚了整個濱河市撩穿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谒撼,老刑警劉巖食寡,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異廓潜,居然都是意外死亡抵皱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門辩蛋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呻畸,“玉大人,你說我怎么就攤上這事悼院∩宋” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵据途,是天一觀的道長绞愚。 經常有香客問我,道長颖医,這世上最難降的妖魔是什么位衩? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮熔萧,結果婚禮上糖驴,老公的妹妹穿的比我還像新娘。我一直安慰自己佛致,他們只是感情好遂赠,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晌杰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪筷弦。 梳的紋絲不亂的頭發(fā)上肋演,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天抑诸,我揣著相機與錄音,去河邊找鬼爹殊。 笑死蜕乡,一個胖子當著我的面吹牛,可吹牛的內容都是我干的梗夸。 我是一名探鬼主播层玲,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼反症!你這毒婦竟也來了辛块?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤铅碍,失蹤者是張志新(化名)和其女友劉穎润绵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胞谈,經...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡尘盼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了烦绳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卿捎。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖径密,靈堂內的尸體忽然破棺而出午阵,到底是詐尸還是另有隱情,我是刑警寧澤睹晒,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布趟庄,位于F島的核電站,受9級特大地震影響伪很,放射性物質發(fā)生泄漏戚啥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一锉试、第九天 我趴在偏房一處隱蔽的房頂上張望猫十。 院中可真熱鬧,春花似錦呆盖、人聲如沸拖云。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宙项。三九已至,卻和暖如春株扛,著一層夾襖步出監(jiān)牢的瞬間尤筐,已是汗流浹背汇荐。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盆繁,地道東北人掀淘。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像油昂,于是被迫代替她去往敵國和親革娄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內容