Actualmente, la exportación de Excel se utiliza en muchos escenarios. Ahora, los pasos de implementación de la función de exportación de Excel se explican en detalle junto con el marco ThinkPHP5.0.
1-Preparativos preliminares:
- Descargue el paquete PHPExcel
- Proporcione la dirección de descarga: https://github.com/helloworldmy007/PHPExcel
- Ponlo en la carpeta del proveedor de nuestro tp.
2- Realización de funciones de importación
Visualización del código de front-end:
<form action="{:url('daoru')}" enctype="multipart/form-data" method="post">
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
<button type="button" class="layui-btn" id="test9">开始导入到数据库</button>
</div>
</form>
Necesidad de introducir el
código js del plugin layui
<script>
layui.use('upload', function(){
var $ = layui.jquery
,upload = layui.upload;
//选完文件后不自动上传
upload.render({
elem: '#test8'
,exts: 'xlsx|xls' //只允许上传压缩文件
,url: '/index.php/index/index/daoru'
,auto: false
//,multiple: true
,bindAction: '#test9'
,done: function(res){
console.log(res)
if(res.code == 1) {
layer.msg(res.msg, {'icon': 1});
setTimeout(function () {
parent.window.location.reload();
}, 1000);
} else {
layer.msg(res.msg);
}
}
});
});
</script>
3- código de fondo
public function daoru(){
if($this->request->isPost()){
$file = $this->request->file('file');
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' .DS.'upload'. DS . 'excel');
if($info){
//获取文件所在目录名
$path=ROOT_PATH . 'public' . DS.'upload'.DS .'excel/'.$info->getSaveName();
//加载PHPExcel类
vendor('PHPExcel.PHPExcel');
//实例化PHPExcel类(注意:实例化的时候前面需要加'\')
$extension = $info->getExtension();
if($extension =='xlsx')
{
$objReader = new \PHPExcel_Reader_Excel2007();
}else
{
$objReader = new \PHPExcel_Reader_Excel5();
}
$objPHPExcel = $objReader->load($path,$encode='utf-8');//获取excel文件
$sheet = $objPHPExcel->getSheet(0); //激活当前的表
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$a=0;
//将表格里面的数据循环到数组中
for($i=2;$i<=$highestRow;$i++)
{
//*为什么$i=2? (因为Excel表格第一行是标题,从第二行开始,才是我们要的数据。)
$data[$a]['id'] = $objPHPExcel->getActiveSheet()->getCell("A".$i)->getValue();//id
$data[$a]['adminname'] = $objPHPExcel->getActiveSheet()->getCell("B".$i)->getValue();
$data[$a]['status'] = $objPHPExcel->getActiveSheet()->getCell("C".$i)->getValue();
$data[$a]['icon'] = $objPHPExcel->getActiveSheet()->getCell("D".$i)->getValue();
$data[$a]['password'] = $objPHPExcel->getActiveSheet()->getCell("E".$i)->getValue();
$data[$a]['up_time'] = $objPHPExcel->getActiveSheet()->getCell("F".$i)->getValue();
$data[$a]['addtime'] = $objPHPExcel->getActiveSheet()->getCell("G".$i)->getValue();
$data[$a]['delete'] = $objPHPExcel->getActiveSheet()->getCell("H".$i)->getValue();
// 这里的数据根据自己表格里面有多少个字段自行决定
$a++;
}
//往数据库添加数据
//dump($data);
$aa = Db('admins')->insertAll($data);
if($aa){
$res['code']=1;
$res['msg'] = '导入成功!';
}else{
$res['code']=0;
$res['msg'] = '导入失败!';
}
return $res;
}
}
return $this->fetch();
}
4- función de exportación
Visualización del código de front-end:
<form class="layui-form layui-col-md12 x-so" action="{:url('/index.php/index/index/daochu')}" method="get">
<input type="text" name="fw_pici" value="{$fw_pici ? $fw_pici : '';}" placeholder="请输入印刷批次" class="layui-input">
<button class="layui-btn"><i class="layui-icon">导出</i></button>
</form>
5- código de fondo
//导出xls
public function daochu(){
//1.获取输入的批次,从数据库中取出数据
$where =input('param.fw_pici');
//halt($where);
$list = Db('fangwei')->where('fw_pici','=',$where)->order('fw_id ASC')->select();
//2.加载PHPExcle类库
vendor('PHPExcel.PHPExcel');
//3.实例化PHPExcel类
$objPHPExcel = new \PHPExcel();
//4.激活当前的sheet表
$objPHPExcel->setActiveSheetIndex(0);
//5.设置表格头(即excel表格的第一行)
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'ID')
->setCellValue('B1', '防伪码')
->setCellValue('C1', '标签码');
//设置A列水平居中
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()
->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//设置单元格宽度
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(30);
$objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(30);
//6.循环刚取出来的数组,将数据逐一添加到excel表格。
for($i=0;$i<count($list);$i++){
$objPHPExcel->getActiveSheet()->setCellValue('A'.($i+2),$list[$i]['fw_id']);//ID
$objPHPExcel->getActiveSheet()->setCellValue('C'.($i+2),$list[$i]['fw_biaoqianma']);//标签码
$objPHPExcel->getActiveSheet()->setCellValue('B'.($i+2),$list[$i]['fw_fangweima']);//防伪码
}
//7.设置保存的Excel表格名称
$filename = '印刷防伪码'.date('ymd',time()).'.xls';
//8.设置当前激活的sheet表格名称;
$objPHPExcel->getActiveSheet()->setTitle('防伪码');
//9.设置浏览器窗口下载表格
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$filename.'"');
//生成excel文件
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//下载文件在浏览器窗口
$objWriter->save('php://output');
exit;
}