tp5导入excel到数据库

7 篇文章 0 订阅

1.前提准备(本地环境)

准备好本地php站点环境,可以用phpstudy(小皮面板)或者wamp。数据库可视化工具建议navica。这里用的tp版本是thinkphp5.0.24的。就tp版本而言,我觉得影响是不大的。

将excel表格数据导入数据库可以走navica手动导入,但是我们走的是tp框架。所以流程是:

前端客户端上传excel文件到服务器上,然后导入数据库。

这里用到了phpExcle依赖。github下载地址:https://github.com/PHPOffice/PHPExcel

下载完之后将Classes目录复制到本地tp5框架的vendor目录下,并改名:PHPExcel

2.使用PHPExcel

这是模块控制器下的方法,将文件上传到这个接口方法即可。

//获取文件后缀名
	public function getExt1($filename)
	{
		$arr = explode('.',$filename);
	    return array_pop($arr);
	
	}
	public function save(){
		header("Access-Control-Allow-Origin: *");
		header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
		header("Access-Control-Allow-Headers: Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");  
		header("Content-Type: text/html; charset=utf-8");
	    $loginstatus = $this->checkToken();
		if($loginstatus){
		   if(request() -> isPost())
	       {
	           vendor("PHPExcel.PHPExcel"); 
	           $objPHPExcel =new \PHPExcel();
	
	           //var_dump($objPHPExcel);die;
	           //获取表单上传文件
	           $file = request()->file('file');
	           //print_r($file);die;
	           $info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH . 'uploads/file');  //上传验证后缀名,以及上传之后移动的地址  
	
	           if($info)
	           {
	
	               $exclePath = $info->getSaveName();  //获取文件名
	               $file_name = ROOT_PATH . 'uploads/file/' . DS . $exclePath;//上传文件的地址
				   $name =  $this->getExt1($file);
				    if($name =='xlsx' ){
				            $objReader =\PHPExcel_IOFactory::createReader('Excel2007');
				    }else {
				            $objReader =\PHPExcel_IOFactory::createReader('Excel5');
				    }
	               //$objReader =\PHPExcel_IOFactory::createReader("Excel2007");
	               $obj_PHPExcel =$objReader->load($file_name, $encode = 'utf-8');  //加载文件内容,编码utf-8
	               $excel_array=$obj_PHPExcel->getSheet(0)->toArray();   //转换为数组格式
	
	               //print_r($excel_array);die;
	               array_shift($excel_array);  //删除第一个数组(标题);
	               $city = [];
	               $i=0;
	               foreach($excel_array as $k=>$v) {
	
	               	   //$click_time  = strtotime($v[2]);//点击时间转为时间戳
	                   $city[$k]['product']   = isset($v[0])?$v[0]:"无";
	                   $city[$k]['supplier']  = isset($v[1])?$v[1]:"无";
	                   $city[$k]['model']     = isset($v[2])?$v[2]:"无";
	                   $city[$k]['phone']     = $v[3];
	                   $city[$k]['describe']  = $v[4];
	                   $city[$k]['type']      = $v[5];
					   $city[$k]['contacts']  = $v[6];
					   $city[$k]['Goodsservices'] = $v[7];
					   $city[$k]['stock']     = $v[8];
					   $city[$k]['time']      = $v[9];
	
	                   $i++;
	               }
	
	              // print_r($city);die;
	               $count=Db::table("qy_business")->insertAll($city);
				   $array=array('code'=>'0','msg'=>'success','data'=>array('count'=>$count));
				   echo json_encode($array);
	           }else
	           {
	               echo $file->getError();
	           }
	       }
		}
	   }

本地请求示例结果如下:

 3.数据库表和excel文件数据对应

这两张表对比一下,然后再看上面的代码就更容易理解了。这里的字段id作为主键是自动递增的。

其他的数据都是一一对应的。

 

 

码字不易,转载请注明出处!有问题可以留言或私信,看到会回复。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!对于TP6(ThinkPHP 6)框架,您可以使用PHPExcel或PhpSpreadsheet库来导入Excel文件。以下是一个简单的示例代码: 首先,您需要安装PHPExcel或PhpSpreadsheet库。您可以通过Composer进行安装: ``` composer require phpoffice/phpspreadsheet ``` 然后,您可以创建一个控制器方法来处理Excel文件导入: ```php use PhpOffice\PhpSpreadsheet\IOFactory; class ExcelController extends \think\Controller { public function import() { // 获取上传的Excel文件 $file = $this->request->file('excel_file'); // 读取Excel文件 $spreadsheet = IOFactory::load($file->getRealPath()); // 获取第一个工作表 $worksheet = $spreadsheet->getActiveSheet(); // 循环读取数据 foreach ($worksheet->getRowIterator() as $row) { $rowData = []; foreach ($row->getCellIterator() as $cell) { $rowData[] = $cell->getValue(); } // 在这里可以对每一行的数据进行处理,比如保存到数据库等操作 // $rowData 包含了一行的数据,可以根据需要进行处理 } // 导入成功后的操作... return '导入成功!'; } } ``` 在上面的代码中,我们首先使用`IOFactory::load()`方法加载Excel文件,然后获取第一个工作表,并循环读取每一行的数据。您可以根据需要对每一行的数据进行处理,如保存到数据库等操作。 请注意,上述代码仅是一个简单的示例,您可能需要根据实际需求进行适当的修改。同时,还需要添加文件上传表单以及相应的路由配置。 希望这可以帮助到您!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值