title: Excel導(dǎo)出功能--結(jié)合ThinkPHP5.0框架(超詳細(xì))
tags: [Excel導(dǎo)出,TP5,導(dǎo)出,表格]
目前,很多場(chǎng)景下都在使用Excel導(dǎo)出,現(xiàn)在結(jié)合ThinkPHP5.0框架詳細(xì)說(shuō)明下excel導(dǎo)出功能的實(shí)現(xiàn)步驟。
原文博客:煜兒博客
一. 準(zhǔn)備工作
Excel的導(dǎo)出功能卧秘,在很多框架中都有配置磷仰,其中最廣泛的就是使用composer來(lái)下載excel的擴(kuò)展包驳遵,但是本人在使用的過(guò)程中怨喘,卻發(fā)現(xiàn)了一個(gè)問(wèn)題:TP5.0框架通過(guò)composer來(lái)下載excel擴(kuò)展包津畸,卻出現(xiàn)了錯(cuò)誤,原文是該擴(kuò)展包已經(jīng)被廢棄必怜,請(qǐng)使用別的版本肉拓。
最終,本人去github上下載了1.8版本的擴(kuò)展包梳庆。
下載地址:PHPExcel1.8版本下載
二. 詳細(xì)配置
【第一步】將下載的1.8擴(kuò)展包解壓暖途,將里面全部?jī)?nèi)容復(fù)制到extend文件夾下,并改名為PHPExcel靠益,如圖:
【第二步】找到application/common.php丧肴,在里面寫(xiě)一個(gè)公共的導(dǎo)出函數(shù),這樣胧后,其他控制器均可以使用芋浮,詳細(xì)信息請(qǐng)看代碼注釋,函數(shù)代碼如下:
請(qǐng)先在common.php文件頂部引入Loader類:use think\Loader;
function excelFileExport($data = [],$title='')
{
//文件名
$fileName = $title. '('.date("Y-m-d",time()) .'導(dǎo)出)'. ".xls";
//加載第三方類庫(kù)
Loader::import('PHPExcel.Classes.PHPExcel');
Loader::import('PHPExcel.Classes.PHPExcel.IOFactory.PHPExcel_IOFactory');
//實(shí)例化excel類
$excelObj = new \PHPExcel();
//構(gòu)建列數(shù)--根據(jù)實(shí)際需要構(gòu)建即可
$letter = array('A', 'B', 'C', 'D');
//表頭數(shù)組--需和列數(shù)一致
$tableheader = array('學(xué)號(hào)','姓名', '年齡', '性別');
//填充表頭信息
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;
//設(shè)置每一列的內(nèi)容
$excelObj->setActiveSheetIndex(0)
->setCellValue('A' . $num, $v['number'])
->setCellValue('B' . $num, $v['name'])
->setCellValue('C' . $num, $v['age'])
->setCellValue('D' . $num, $v['sex'])壳快;
//設(shè)置行高
$excelObj->getActiveSheet()->getRowDimension($k+4)->setRowHeight(30);
}
//以下是設(shè)置寬度
$excelObj->getActiveSheet()->getColumnDimension('A')->setWidth(46);
$excelObj->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$excelObj->getActiveSheet()->getColumnDimension('C')->setWidth(10);
$excelObj->getActiveSheet()->getColumnDimension('D')->setWidth(20);
//設(shè)置表頭行高
$excelObj->getActiveSheet()->getRowDimension(1)->setRowHeight(28);
$excelObj->getActiveSheet()->getRowDimension(2)->setRowHeight(28);
$excelObj->getActiveSheet()->getRowDimension(3)->setRowHeight(28);
//設(shè)置居中
$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);
//設(shè)置字體樣式
$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);
//設(shè)置自動(dòng)換行
$excelObj->getActiveSheet()->getStyle('A1:D1'.($k+2))->getAlignment()->setWrapText(true);
// 重命名表
$fileName = iconv("utf-8", "gb2312", $fileName);
// 設(shè)置下載打開(kāi)為第一個(gè)表
$excelObj->setActiveSheetIndex(0);
//設(shè)置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();
}
【第三步】新建一個(gè)控制器:Student.php纸巷,Student控制器中新建一個(gè)方法export(),在該方法中調(diào)用common.php中的excelFileExport()方法眶痰,如下:
public function export()
{
//該處應(yīng)為從數(shù)據(jù)庫(kù)中查出數(shù)據(jù)瘤旨,這里僅作演示:
$data = Db::name('student')->select();
//因不同需求,文件名不同竖伯,需要自己構(gòu)建
$fileName = '學(xué)生信息表';
//調(diào)用公共方法
excelFileExport($data,$fileName);
}
【第四步】在html中寫(xiě)一個(gè)<a href='YourRoute'>
標(biāo)簽存哲,點(diǎn)擊請(qǐng)求Student控制器中的export()方法,即可完成下載七婴。
==總結(jié)==
此例祟偷,大致分為三個(gè)大步驟:
1.將下載的 1.8版本擴(kuò)展包融合到TP5.0框架中;
2.在common.php寫(xiě)一個(gè)導(dǎo)出的公共函數(shù)打厘;
3.在控制器中調(diào)用該公共函數(shù)
【注意】公共函數(shù)中的列數(shù)根據(jù)實(shí)際需要更改即可 修肠,盡量在控制器中查出的數(shù)據(jù)字段數(shù)和列數(shù)保持相同
至此,TP5.0的excel導(dǎo)出功能已經(jīng)基本完成户盯,如需其他配置嵌施,請(qǐng)參考phpExcel開(kāi)發(fā)文檔。
======== 本文原創(chuàng)莽鸭,如需轉(zhuǎn)發(fā)吗伤,請(qǐng)注明出處 ========