thinkphp5中的excel表的导入导出

首先需要下载PHPExcel

PHPExcel下载地址:https://pan.baidu.com/s/1GjbcSXxHwbLeBw8NzzIBYA

提取码:zbqq

使用composer 命令(本人使用的方法,具体怎么下载,看你心情咯~~)

cmd命令进入项目的根目录->composer require phpoffice/phpexcel

一、导出excel

控制器中引入类文件

vendor ( 'PHPExcel' );
vendor ( 'PHPExcel.PHPExcel_IOFactory' );
vendor ( 'PHPExcel.PHPExcel_Cell' );

控制器php代码
    public function index()//EXCL表格的导出
{
$data = Db::table('score')->select();
$name = 'test';
$excel = new \PHPExcel(); //引用phpexcel
iconv('UTF-8', 'gb2312', $name); //针对中文名转码
$header = ['ID', 'sid', '语文', '数学', '英语', '政治', '学期']; //表头,名称可自定义
$excel->setActiveSheetIndex(0);
$excel->getActiveSheet()->setTitle($name); //设置表名
$excel->getActiveSheet()->getDefaultRowDimension()->setRowHeight(18);
$excel->getActiveSheet()->getColumnDimension('B')->setWidth(80);
$letter = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];//列坐标
//生成表头
for ($i = 0; $i < count($header); $i++) {
//设置表头值
$excel->getActiveSheet()->setCellValue("$letter[$i]1", $header[$i]);
//设置表头字体样式
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setName('宋体');
//设置表头字体大小
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setSize(14);
//设置表头字体是否加粗
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->setBold(true);
//设置表头文字水平居中
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//设置文字上下居中
$excel->getActiveSheet()->getStyle($letter[$i])->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
//设置单元格背景色
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->getStartColor()->setARGB('FFFFFFFF');
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFill()->getStartColor()->setARGB('FF6DBA43');
//设置字体颜色
$excel->getActiveSheet()->getStyle("$letter[$i]1")->getFont()->getColor()->setARGB('FFFFFFFF');
}

//写入数据
foreach ($data as $k => $v) {
//从第二行开始写入数据(第一行为表头)
$excel->getActiveSheet()->setCellValue('A' . ($k + 2), $v['id']);
$excel->getActiveSheet()->setCellValue('B' . ($k + 2), $v['sid']);
$excel->getActiveSheet()->setCellValue('C' . ($k + 2), $v['chinese']);
$excel->getActiveSheet()->setCellValue('D' . ($k + 2), $v['math']);
$excel->getActiveSheet()->setCellValue('E' . ($k + 2), $v['english']);
$excel->getActiveSheet()->setCellValue('F' . ($k + 2), $v['politics']);
$excel->getActiveSheet()->setCellValue('G' . ($k + 2), $v['xqid']);
}

//设置单元格边框
$excel->getActiveSheet()->getStyle("A1:E" . (count($data) + 1))->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN);

//清理缓冲区,避免中文乱码
ob_end_clean();
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $name . '.xls"');
header('Cache-Control: max-age=0');

//导出数据
$res_excel = \PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$res_excel->save('php://output');
}


到此,已经可以导出excel了。

二、excel导入

首先还是引入相关的类文件

vendor('PHPExcel.Writer.IWriter');
vendor('PHPExcel.Writer.Abstract');
vendor('PHPExcel.Writer.Excel5');
vendor('PHPExcel.Writer.Excel2007');
vendor('PHPExcel.IOFactory');

前端excel上传页面

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form enctype="multipart/form-data" method="post" action="index3">
<input type="file" name="excel" /> <br>
<input type="submit" value="上传" />
</form>
</body>
</html>


//请忽略前端页面的样式,重点是功能,嘻嘻^_^
将文件上传到index3控制器中
index3的php代码

public function index3()
{
// 获取表单上传文件
$file = request()->file('excel');
// 移动到框架应用根目录/public/uploads/ 目录下
if ($file) {
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if ($info) {
$path = ROOT_PATH . 'public' . DS . 'uploads' . DS;
$filename = $info->getSaveName();
$file_path = $path . $filename;
$objPHPExcel = \PHPExcel_IOFactory::load($file_path);//读取上传的文件
$arr = $objPHPExcel->getSheet(0)->toArray();//获取其中的数据
$end=[];
array_shift($arr);//将从excel表中获取到的数组中的标题删除,只留下数据
foreach ($arr as $k=>$v){//将获取到的索引数组改为关联数组,方便操作
$len=count($arr);
for($i=0;$i<$len;$i++){
switch ($i){
case 0:
$end[$k]['id']=$v[$i];//将key改为自己数据库中存储的字段的名称
break;
case 1:
$end[$k]['name']=$v[$i];
break;
case 2:
$end[$k]['sex']=$v[$i];
break;
case 3:
$end[$k]['age']=$v[$i];
break;
}
}
}

echo "<pre>";
print_r($end);
exit;
//excel中的数据已经得到了,剩余将数据插入数据库。请自行书写^_^..
} else {
echo $file->getError();
}
}
}

以上代码本人亲测,导入。导出均可以实现。
各位大佬对此有疑问的或者有更好的方法,感谢告知!!
一起努力,共同进步。
 
 

 

 
 

 

 
 

 

转载于:https://www.cnblogs.com/cds98/p/10113310.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值