前两天用到了将excel文件导入至数据库中,果不其然,很快就用到了将数据库内数据导出成excel文件,在网上浏览学习了很多网站之后终于完成了,今天就分享一个小实例。
一:上干货
1.老样子,数据库!!(数据库代码参考:https://blog.youkuaiyun.com/qq_42751377/article/details/81141104)
2.PHPExcel插件置于Vendor目录下。
3.创建demo项目
4.IndexController.class.php
<?php
/**
*
* 导入Excel文件数据到MySQL数据库
*/
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
/**
* 显示上传表单html页面
*/
public function index() {
$this->display();
}
public function exportExcel($expTitle,$expCellName,$expTableData){
$xlsTitle = iconv('utf-8', 'gb2312', $expTitle);//文件名称
$fileName = $_SESSION['account'].date('_YmdHis');//or $xlsTitle 文件名称可根据自己情况设定
$cellNum = count($expCellName);
$dataNum = count($expTableData);
// dump($expTableData);
// dump($expCellName[0][0]);
// dump($expTableData[0][$expCellName[0][0]]);die;
vendor("PHPExcel.PHPExcel");
$objPHPExcel = new \PHPExcel();
$cellName = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK','AL','AM','AN','AO','AP','AQ','AR','AS','AT','AU','AV','AW','AX','AY','AZ');
$objPHPExcel->getActiveSheet(0)->mergeCells('A1:'.$cellName[$cellNum-1].'1');//合并单元格
// $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A1', $expTitle.' Export time:'.date('Y-m-d H:i:s'));
for($i=0;$i<$cellNum;$i++){
$objPHPExcel->setActiveSheetIndex(0)->setCellValue($cellName[$i].'2', $expCellName[$i][1]);
}
// Miscellaneous glyphs, UTF-8
for($i=0;$i<$dataNum;$i++){
for($j=0;$j<$cellNum;$j++){
$objPHPExcel->getActiveSheet(0)->setCellValue($cellName[$j].($i+3), $expTableData[$i][$expCellName[$j][0]]);
}
}
header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="'.$xlsTitle.'.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls");//attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
exit;
}
/**
*
* 导出Excel
*/
function expUser(){//导出Excel
$xlsName = "User";
$xlsCell = array(
array('pid','序列'),
array('pname','名字'),
array('pprice','价格'),
array('pcount','个数')
);
$xlsModel = M('Info');
$xlsData = $xlsModel->Field('pid,pname,pprice,pcount')->select();
// dump($xlsData);
$this->exportExcel($xlsName,$xlsCell,$xlsData);
}
}
?>
5.index.html(小例子,一个a标签即可)
<a href="{:U('Index/expUser')}" >导出数据并生成excel</a>
6.测试
二:总结
文章说明:因学习时浏览网站较多且参考网站较多,如有参考内容转载绝非有意,若有侵犯,还请告知。
问题总结:找不到 PHPExcel() 类,尝试使用 new \PHPExcel(); \PHPExcel_IOFactory
可以下载excel,但内容缺少数据,最后发现在 expUser() 方法中 array数组内字段名要用小写。
还是那样,很多小问题都可以通过尝试使用 dump();die; 来测试,保证代码走得通的同时还可以检查变量的值的准确性。
文章若有错误或问题,欢迎指出。