在项目环境下
composer require phpoffice/phpspreadsheet
在项目中引用
use PhpOffice\PhpSpreadsheet\IOFactory;

下面是 上传xlsx导入数据库方法

    public function getExcel(){
$user_id = input('user_id',1);
//ajax 文件跨域 验证
$request_method = $_SERVER['REQUEST_METHOD'];
if ($request_method === 'OPTIONS') {
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Credentials:true');
header('Access-Control-Allow-Methods:GET, POST, OPTIONS');
header('Access-Control-Max-Age:1728000');
header('Content-Type:text/plain charset=UTF-8');
header('Content-Length: 0',true);
header('status: 204');
header('HTTP/1.0 204 No Content');
} $file = request()->file('file');
if(!$file){
return json(['errcode'=>-1,'errmsg'=>'请上传文件']);
} $info = $file->validate(['size'=>5*1024*1024,'ext'=>'xlsx,xls'])->move('uploads/excel/'.$user_id);
if(!$info){
return json(['errcode'=>-1,'errmsg'=>'请返回xlsx,xls格式表格','fileerr'=>$file->getError()]);
}
//判断文件类型
$suffix = $info->getExtension(); if($suffix=="xlsx"){
$objReader = IOFactory::createReader('Xlsx');
}else{
$objReader = IOFactory::createReader('Xls');
} $objPHPExcel = $objReader->load(Env::get('root_path').'public/uploads/excel/'.$user_id.'/'.$info->getSaveName());
$extension = strtolower( pathinfo($info->getSaveName(), PATHINFO_EXTENSION) ); //读取默认工作表
$worksheet = $objPHPExcel->getSheet(0);
//取得一共有多少行
$allRow = $worksheet->getHighestRow();
$data = []; if($allRow > 101){
return json(['errcode'=>-1,'errmsg'=>'最多一百条']);
} for ($i = 2; $i <= $allRow; $i++)
{
$data = array();
$goods_data = array();
$data['order_sn_third'] = $objPHPExcel->getActiveSheet()->getCell('A'.$i)->getValue();
$goods_data['goods_name'] = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getValue();
$goods_data['goods_sn'] = $objPHPExcel->getActiveSheet()->getCell('C'.$i)->getValue();
$goods_data['goods_num'] = $objPHPExcel->getActiveSheet()->getCell('D'.$i)->getValue(); $data['consignee'] = $objPHPExcel->getActiveSheet()->getCell('E'.$i)->getValue();
$data['mobile'] = $objPHPExcel->getActiveSheet()->getCell('F'.$i)->getValue();
$data['province'] = $objPHPExcel->getActiveSheet()->getCell('G'.$i)->getValue();
$data['city'] = $objPHPExcel->getActiveSheet()->getCell('H'.$i)->getValue();
$data['district'] = $objPHPExcel->getActiveSheet()->getCell('I'.$i)->getValue();
$data['address'] = $objPHPExcel->getActiveSheet()->getCell('J'.$i)->getValue();
$data['user_note'] = $objPHPExcel->getActiveSheet()->getCell('K'.$i)->getValue(); //防止出现空白Excel导致mysql报错,对数据做下判断
if(empty($data['order_sn_third']) && empty($data['goods_sn'])){
//跳出循环
break;
}
$data['create_time'] = time();
$data['status'] = 1;
$data['user_id'] = $user_id;
$data['order_sn'] = date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8); //插入数据库
$order_id = db('order_info')->insertGetId($data);
$goods_data['order_id'] = $order_id;
$res = db('order_goods')->insert($goods_data);
} return json(['errcode'=>0,'errmsg'=>'导入完成']); }

随机推荐

  1. css3小总结

    一.边框 1.border-radius:x,y,模糊半径,color(x为负数时左移动,y为负数是上移动) 2.box-radius:x,y,模糊半径,阴影半径,color 3.border-ima ...

  2. 关于ajax的同步和异步

    今天在开发中遇到个ajax访问Action 返回json 拼接Html,有时候能显示,有时候显示不出来. 考虑后一定是页面元素加载的问题. 所以把jq ajax设置为同步. 同步意为当访问后台代码时, ...

  3. 第三讲:WCF介绍(3)

    代码 https://yunpan.cn/cPns5DkGnRGNs   密码:3913   前面我们通过一个小的例子,大概了解的WCF. 这里我们补充下  EndPoint 配置  A,B,C  中 ...

  4. phpweb /version.php Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link:2. 漏洞触发条件3. 漏洞影响范围4. 漏 ...

  5. WebService的发布及客户端的调用

    一.目录 1.JAX-WS发布WebService 1.1 创建一个简单的WS 1.2 打包部署和发布 2.CXF+Spring发布WebService 3.客户端的调用方式 二.正文 1. JAX- ...

  6. 托管到GitHub

    如何把项目托管到GitHub iOS开发拓展篇——如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 ...

  7. python3中的编码与解码(超好理解)

    编码和解码是针对数据而言的,数据能干什么呢?无非就是用来显示,储存和传输的: 储存和传输数据当然是希望数据越小越好,所以发明了utf-8这种数据编码显示:它智能将英文用一个字节表示,欧洲的字符用两个字 ...

  8. 001.Open-Falcon简介

    一 Open-Falcon简介 监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题.监控系统作为一个成熟的运维产品,相对成熟的解决方案 ...

  9. A Method for the Construction of Minimum-Redundancy Codes

    A Method for the Construction of Minimum-Redundancy Codes http://compression.ru/download/articles/hu ...

  10. ES6中的元编程-Proxy &amp; Reflect

    前言 ES6已经出来好久了,但是工作中比较常用的只有let const声明,通过箭头函数改this指向,使用promise + async 解决异步编程,还有些数据类型方法...所以单独写一篇文章学习 ...