本例以thinkphp5.1为例

包地址:

https://packagist.org/packages/phpoffice/phpexcel

使用:

composer require phpoffice/phpexcel

控制器引入

//引入phpoffice
use PHPExcel;
use PHPExcel_IOFactory;

导出代码:

//execl模板下载
public function template_download()
{
$objExcel = new PHPExcel();
$objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
$objActSheet = $objExcel->getActiveSheet();
$objActSheet->setTitle('会员批量导入模板'); //设置excel的标题
$objActSheet->setCellValue('A1', '用户id');
$objActSheet->setCellValue('B1', '昵称');
$objActSheet->setCellValue('C1', '手机号'); $baseRow = ; //数据从N-1行开始往下输出 这里是避免头信息被覆盖
//默认数据
$explame_data = array(
array(
'user_id' => '',
'nickname' => '小明',
'phone' => '',
),
); foreach ($explame_data as $key => $value) {
$i = $baseRow + $key;
$objExcel->getActiveSheet()->setCellValue('A' . $i, $value['user_id']);
$objExcel->getActiveSheet()->setCellValue('B' . $i, $value['nickname']);
$objExcel->getActiveSheet()->setCellValue('C' . $i, $value['phone']);
} $objExcel->setActiveSheetIndex();
//4、输出
$objExcel->setActiveSheetIndex();
header('Content-Type: applicationnd.ms-excel');
$time = date('Y-m-d');
header("Content-Disposition: attachment;filename=会员批量导入模板" . $time . ".xls");
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
}

导入代码:

    public function import_batch_send()
{
header("content-type:text/html;charset=utf-8"); //上传excel文件
$file = request()->file('file');
//将文件保存到public/uploads目录下面
$info = $file->validate(['size' => , 'ext' => 'xls,xlsx'])->move('./uploads');
if ($info) {
//获取上传到后台的文件名
$fileName = $info->getSaveName();
//获取文件路径
$filePath = Env::get('root_path') . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $fileName;
//获取文件后缀
$suffix = $info->getExtension();
//判断哪种类型
if ($suffix == "xlsx") {
$reader = \PHPExcel_IOFactory::createReader('Excel2007');
} else {
$reader = PHPExcel_IOFactory::createReader('Excel5');
}
} else {
return json(['status' => '', 'message' => '文件过大或格式不正确导致上传失败-_-!']);
}
//载入excel文件
$excel = $reader->load($filePath, $encode = 'utf-8');
//读取第一张表
$sheet = $excel->getSheet();
//获取总行数
$row_num = $sheet->getHighestRow();
//获取总列数
$col_num = $sheet->getHighestColumn(); $import_data = []; //数组形式获取表格数据
for ($i = ; $i <= $row_num; $i++) {
            $import_data[$i]['nickname']  = $sheet->getCell("B" . $i)->getValue();
$import_data[$i]['phone'] = $sheet->getCell("C" . $i)->getValue();
} if (empty($import_data)) {
return json(['status' => '', 'message' => '数据解析失败']);
} //校验手机号是否重复
$phone_array = array_column($import_data, 'phone');
$phone_ids = implode(',', $phone_array);
$result_phone = db('user')
->field('phone')
->where('phone', 'in', $phone_ids)
->select();
if (!empty($result_phone)) {
$result_phone_array = array_column($result_phone, 'phone');
$result_phone_ids = implode(',', $result_phone_array);
return json(['status' => '', 'message' => '数据重复', 'result' => $result_phone_ids]);
} //将数据保存到数据库
$res = db('user')->insertAll($import_data);
if ($res) {
return json(['status' => '', 'message' => '导入成功']);
} else {
return json(['status' => '', 'message' => '提交失败,请刷新重试']);
}
}

提示: 注意官方库给的环境要求以及需要开启的扩展

【PHP】使用phpoffice/phpexcel导入导出数据的更多相关文章

  1. 【PHP】使用phpoffice/phpspreadsheet导入导出数据

    当你在使用phpoffice/phpexcel 类库时候.composer 会给你提示一句话 Package phpoffice/phpexcel is abandoned, you should a ...

  2. 使用PHPExcel导入导出excel格式文件

    使用PHPExcel导入导出excel格式文件  作者:zccst  因为导出使用较多,以下是导出实现过程.  第一步,将PHPExcel的源码拷贝到项目的lib下  文件包含:PHPExcel.ph ...

  3. CRL快速开发框架系列教程九(导入/导出数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. mysql导入导出数据中文乱码解决方法小结

    linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqld ...

  5. Android开发笔记:SQLite导入导出数据

    SQLite是Android中最方便使用的数据库了,现在看下如何快速的在SQLite中导入导出数据. 首先由于是.NET项目转Android,原有数据库使用的是SQLSERVER,由于项目相同部分结构 ...

  6. 解决mysql导入导出数据乱码问题

    最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to ...

  7. [转]mysql导入导出数据中文乱码解决方法小结

    本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...

  8. oracle中导入导出数据备份数据库

    原文:oracle中导入导出数据备份数据库 数据库所在位置                         将数据导出到的文件名                    用户名 备份数据库 :exp c ...

  9. PLSQL导入/导出数据方法

    PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...

随机推荐

  1. 常用Windows命令、常用 Cmd命令(补充)

    常用的Windows 命令使用能够提升工作效率以及快捷处理事项. 下面为平时常用的Windows 命令/cmd 命令. 一.以下命令无需打开cmd 窗口即可操作(输入完毕 打个 回车,即可执行). 1 ...

  2. Nginx下隐藏index.php

    在用NGINX搭建web网站时遇到一个问题,那就是除了网站的首页能够正常打开,其他的子网站都打不开,显示找不到文件.但是如果你在网址后面加上index.php,子网站就又可以打开了.那么我们怎么才能不 ...

  3. Flask-Script Manager

    Flask Script扩展提供向Flask插入外部脚本的功能,包括运行一个开发用的服务器,一个定制的Python shell,设置数据库的脚本,cronjobs,及其他运行在web应用之外的命令行任 ...

  4. 目标检测论文解读5——YOLO v1

    背景 之前热门的目标检测方法都是two stage的,即分为region proposal和classification两个阶段,本文是对one stage方法的初次探索. 方法 首先看一下模型的网络 ...

  5. 一个兼容IE7\IE8,H5的多功能视频播放器,H5视频播放器兼容Flash视频播放器

    这里记录一个视频播放器,免费可适当修改:名称:ckplayer视频播放器(免费) 官网地址:http://www.ckplayer.com/ 下载地址:http://www.ckplayer.com/ ...

  6. OpenCV 学习笔记(0)两幅图像标定配准

    参考教程 依赖opencv扩展库,使用sifi匹配 保存配准信息 "./config/calibratedPara.yaml" #include <iostream> ...

  7. 如何查看WinDbg扩展有哪些命令

    如果您想查看任何windbg扩展所支持的命令,可以采用各种方法. 你可以用!<ext_name>.help命令查看该扩展支持的所有命令.用扩展模块名替换<ext_name>.( ...

  8. ES6 let 和const

    一.var 的缺陷:var 只有全局作用域和函数作用域,没有块级作用域,除了在函数内部的变量默认都属于window var foo='hello'; fn=function(){ var foo='w ...

  9. MongoDB主从

    环境示例: 系统:Centos6.6x64 安装目录:/opt/ 主:172.16.15.101 从:172.16.15.102 1.下载安装: # wget https://fastdl.mongo ...

  10. GoCN每日新闻(2019-11-04)

    GoCN每日新闻(2019-11-04) GoCN每日新闻(2019-11-04)   1. Go中垃圾收集器是如何标记内存的 https://medium.com/a-journey-with-go ...