【PHP】使用phpoffice/phpexcel导入导出数据
本例以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导入导出数据的更多相关文章
- 【PHP】使用phpoffice/phpspreadsheet导入导出数据
当你在使用phpoffice/phpexcel 类库时候.composer 会给你提示一句话 Package phpoffice/phpexcel is abandoned, you should a ...
- 使用PHPExcel导入导出excel格式文件
使用PHPExcel导入导出excel格式文件 作者:zccst 因为导出使用较多,以下是导出实现过程. 第一步,将PHPExcel的源码拷贝到项目的lib下 文件包含:PHPExcel.ph ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- mysql导入导出数据中文乱码解决方法小结
linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqld ...
- Android开发笔记:SQLite导入导出数据
SQLite是Android中最方便使用的数据库了,现在看下如何快速的在SQLite中导入导出数据. 首先由于是.NET项目转Android,原有数据库使用的是SQLSERVER,由于项目相同部分结构 ...
- 解决mysql导入导出数据乱码问题
最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to ...
- [转]mysql导入导出数据中文乱码解决方法小结
本文章总结了mysql导入导出数据中文乱码解决方法,出现中文乱码一般情况是导入导入时编码的设置问题,我们只要把编码调整一致即可解决此方法,下面是搜索到的一些方法总结,方便需要的朋友. linux系统中 ...
- oracle中导入导出数据备份数据库
原文:oracle中导入导出数据备份数据库 数据库所在位置 将数据导出到的文件名 用户名 备份数据库 :exp c ...
- PLSQL导入/导出数据方法
PLSQL导入/导出数据方法 PLSQL导入/导出数据方法 以前导数据库信息的时候,总是会先开启sql窗口,把自己手写的建表文件复制进去,然后再导入数据信息. 今天突然懒得去找以前的建表文件,而想用S ...
随机推荐
- OSX 优化配置
修改用户名 sudo hostname macbookpro sudo scutil --set HostName macbookpro sudo scutil --set LocalHostName ...
- PHP、asp、aspx、JSP一句话
PHP.asp.aspx.JSP一句话 原文地址:https://www.cnblogs.com/JoEcO01/p/11556413.html 1.asp一句话木马: <%eval requ ...
- 20180524模拟赛T3——Word
[题目描述] 有一个星球要创造新的单词,单词有一些条件: 字母集有\(p\)个元音和\(q\)个辅音,单词由字母构成 每个单词最多有\(n\)个元音和\(n\)个辅音(同一元音或辅音可重复使用) 每个 ...
- keller PAA-3XX/80794系列(绝压)压力传感器
一.瑞士 keller(科勒)压力传感器 keller英文版通讯协议百度网盘:提取码:fusc 广播模式:所有从机都会收到上位机信息 Broadcasting This mode of communi ...
- IDEA连接Oracle数据库
连接Oracle的前提是导入了相关的jar或者依赖 下面是连接数据库的操作 如果出现了下面的画面,就说明连接成功
- BZOJ 2091: [Poi2010]The Minima Game 博弈dp
十分有趣的问题. 我们发现如果拿的话肯定要先拿一些大的. 所以我们可以先将所有数从小到大排序,令 $f[i]$ 表示拿完前 $i$ 小先手-后手的最大值. 则有转移:$f[i]=max(f[i-1], ...
- Xamarin.Forms之主题
Xamarin.Forms应用程序可以使用DynamicResource标记扩展在运行时动态响应样式更改. 此标记扩展类似于StaticResource标记扩展,两者都使用字典键从ResourceDi ...
- 5-(微信小程序篇)关于WiFi模块配网以后利用小程序绑定设备,绑定方式说明
https://www.cnblogs.com/yangfengwu/p/11625189.html 众所周知:使用微信Airkiss 只能给设备配网,并不能够获取设备的MAC地址信息,但是我在 ht ...
- Fiborial 题解——2019.10.14
一看到这个题 就感觉...cao,, 什么东西...??! 然后就开始暴力求Fn 然鹅我并不会写高精(我太菜了) 只能求到大概10左右 在吧Fn给质因数分解 求出其因子个数 妄图找到什么有关的规律 但 ...
- python使用jieba实现中文文档分词和去停用词
分词工具的选择: 现在对于中文分词,分词工具有很多种,比如说:jieba分词.thulac.SnowNLP等.在这篇文档中,笔者使用的jieba分词,并且基于python3环境,选择jieba分词的理 ...