hello,大家好,好长时间没有更新文章了。最近一直在忙着做项目。所以断更了。
那么好,各位老铁是否想要实现导入导出的功能 请关注我,解密如何实现导入导出,
那么今天先来讲一下用thinkphp5.0 如何实现Excel表格导入数据到数据库
1.前提准备:
正常的流程是前端客户端上传excel文件到服务器上,然后通过代码解析解码然后存入到数据库里。
这里我们用到一个依赖叫phpExcle依赖。github下载地址:https://github.com/PHPOffice/PHPExcel
下载之后我们讲Classes目录解压出来放到我们tp5框架里面的vendor目录下,并改名为:PHPExcel
2.使用PHPExcel
在你使用的这个方法下或者是你可以封装一下,放到model里
/**
* 获取excel文件后缀名
*/
public function get_excel_name($filename){
$arr = explode('.',$filename);
return array_pop($arr);
}
/** excel导入数据*/
public function import_excel_data(){
vendor("PHPExcel.PHPExcel");
$objPHPExcel =new \PHPExcel();
$file = $this->request->file('file');
$info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'public/uploads/excel'); //上传验证后缀名,以及上传之后移动的地址
if($info)
{
$exclePath = $info->getSaveName(); //获取文件名
$file_name = ROOT_PATH . 'public/uploads/excel/' . DS . $exclePath;//上传文件的地址
$name = $this->get_excel_name($file_name);
if($name ==='xlsx' ){
$objReader =\PHPExcel_IOFactory::createReader('Excel2007');
}else {
$objReader =\PHPExcel_IOFactory::createReader('Excel5');
}
$obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8'); //加载文件内容,编码utf-8
$excel_array=$obj_PHPExcel->getSheet(0)->toArray(); //转换为数组格式
array_shift($excel_array); //删除第一个数组(标题);
$city = [];
$i=0;
foreach($excel_array as $k=>$v) {
$city[$k]['keyword'] = isset($v[0])?$v[0]:"无";
$i++;
}
$count=db('auto_keyword')->insertAll($city);
$data = [
'count'=>$count
];
$this->success('ok',$data);
}else
{
$this->error($file->getError());
}
}
在这里我们需要改几个文件:
PHPExcel/PHPExcel/Shared/String.php下面的“utf16_decode”方法,把{0}、{1}改成[0]、[1]
PHPExcel/PHPExcel/ReferenceHelper.php下面的“updateSingleCellReference”方法,把{0}、{1}改成[0]、[1]
PHPExcel/PHPExcel/Cell.php下面的“columnIndexFromString”方法,把{0}、{1}改成[0]、[1]
3.本地请求结果如下:
4.数据库和excel文件数据对比一下
这两张表对比一下,然后再看上面的代码就更好操作了。这里的数据库的主键是自动递增的。其他的数据一一对应就OK了。
1>.这是excel表里的数据
2>.这是数据库里的数据
好了。导入就讲到这里了。有用的小伙伴记得收藏关注我。这段代码亲测有效哦!