TP5.1导入Excel表格,支持自动筛选字段,支持验证字段
支持自动识别表头名称和字段并生成对应的数据
目录结构
1.下载php的Excel扩展
扩展地址:https://github.com/PHPOffice/PHPExcel
将下载的扩展放入到/extend
目录下,并改名文件夹为Excel(如上图所示)
2.创建类库文件(\application\webapi\lib\Excel.php
)
<?php
// =================
// excel 扩展
// =================
namespace app\Webapi\lib;class Excel {// 保存文件方法,可不用直接使用tp自带// function excel_extend_upload($uploadPath = null) {// if (!$uploadPath) {// $uploadPath = dirname(__FILE__) . "\\uploads\\";// }// \PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;// if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {// $upfile = $_FILES["upfile"];// //获取数组里面的值// $name = $upfile["name"]; //上传文件的文件名// $type = $upfile["type"]; //上传文件的类型// $size = $upfile["size"]; //上传文件的大小// $tmp_name = $upfile["tmp_name"]; //上传文件的临时存放路径// if (!is_dir($uploadPath)) {// mkdir($uploadPath, 0777, true);// }// $final_file_name = $uploadPath . rand(1000, 9999) . "-customers.xlsx";// move_uploaded_file($tmp_name, $final_file_name); //将上传到服务器临时文件夹的文件重新移动到新位置// $file_name = $final_file_name;// $info['name'] = $name;// $info['type'] = $type;// $info['size'] = $size;// $info['file_name'] = $file_name;// return $info;// $error = $upfile["error"]; //上传后系统返回的值// if ($error !== 0) {// return false;// die();// }// } else {// return false;// }// }// 获取excel对象function get_obj($file_name) {// dump(__DIR__ . '/../../extend/Excel/PHPExcel.php');$phpexcel_path= '../extend/Excel/PHPExcel.php';require_once $phpexcel_path;$objReader = null;$objPHPExcel = null;$extension = strtolower(pathinfo($file_name, PATHINFO_EXTENSION));if ($extension == 'xlsx') {$objReader = new \PHPExcel_Reader_Excel2007();$objPHPExcel = $objReader->load($file_name);// var_dump(666);// var_dump($objPHPExcel);} else if ($extension == 'xls') {$objReader = new \PHPExcel_Reader_Excel5();$objPHPExcel = $objReader->load($file_name);} else if ($extension == 'csv') {$PHPReader = new \PHPExcel_Reader_CSV();//默认输入字符集$PHPReader->setInputEncoding('GBK');//默认的分隔符$PHPReader->setDelimiter(',');//载入文件$objPHPExcel = $PHPReader->load($file_name);}return $objPHPExcel;}/*** 绑定标题和字段(最多对应到AZ)* @param object $objPHPExcel* @param array $title_field 示例:['员工编号'=>'coding']* @param array $cellKey 列序号['A','B','C',...]* @return {*}*/function band_title_field($objPHPExcel, $title_field, $cellKey = null) {$title_item_field = [];$cellKey = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M','N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM','AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ'];// 取出所有列标题foreach ($cellKey as $key => $value) {$title_item = $objPHPExcel->getActiveSheet()->getCell($value . 1)->getValue();if ($title_item) {$title[$title_item] = $value;} else {break;}}// // 定义标题列// $title_field = [// // '序号' => 'A' ,// '员工编号' => 'coding',// '姓名' => 'name',// '部门' => 'section_id',// // '组别' => 'E' ,// '岗位' => 'position_id',// // '职级' => 'G' ,// '手机号码' => 'phone',// '入职日期' => 'start_time',// '年龄' => 'age',// ];// 表头字母对应字段foreach ($title_field as $key => $value) {if (isset($title[$key])) {$title_item_field[$value] = $title[$key];}}return $title_item_field;}}
3.控制器代码(\application\webapi\controller\Device.php
接口控制器代码截取
)
// 导入表格public function importExcel(){//上传excel文件$file = request()->file('excel');//将文件保存到public/uploads目录下面$info = $file->validate(['size' => 1048576, 'ext' => 'xls,xlsx'])->move('../public/excel_uploads');$fileName = '../public/excel_uploads/'.$info->getSaveName();$excel_extend=new Excel();// 获取表格对象$objPHPExcel = $excel_extend->excel_extend_get_obj($fileName);// 定义标题列$title_field = ['姓名' => 'name','手机号码' => 'phone','入职日期' => 'start_time','年龄' => 'age','性别' => 'sex','身证号码' => 'id_card_number','出生日期' => 'birthday',];// 绑定表头和字段$title_item_field = $excel_extend->excel_extend_band_title_field($objPHPExcel, $title_field);$sheet = $objPHPExcel->getSheet(0); //取得sheet(0)表$highestRow = $sheet->getHighestRow(); // 取得总行数$highestColumn = $sheet->getHighestColumn(); // 取得总列数for ($i = 2; $i <= $highestRow; $i++) {$content[$i] = [];foreach ($title_item_field as $key => $value) {$content[$i][$key] = $objPHPExcel->getActiveSheet()->getCell($value . $i)->getValue();}// 获取到行数据字段对应值数据$data=$content[$i];// 可以在此进行字段验证解析if($data['sex']=="男"){$data['sex']=1;}else{$data['sex']=0;}// 保存数据到数据库// ......}// $this->apiSuccess();}
至此结束,可根据自身需求进行扩展或修改代码
TP5.1导入Excel表格,支持自动筛选字段,支持验证字段相关推荐
- 陈表达VBA笔记-Excel VBA 编程-在表格做自动筛选的功能
Excel VBA 编程,在表格做自动筛选的功能 下面的例子是自动筛选85列的内容,筛选内容为处方 Private Sub CommandButton11_Click() '筛选处方 ...
- 如何在ex表格导入php_怎么使用php把表格中的数据导入到excel中,php如何快速导入excel表格数据...
php怎么导入大量数据的excel php导出数据的Excel: PHP从数据库分多次读取100万行记录,和分将100万入文本文件都没问题 Excel可以支100万行记录,Excel 2003最大支持 ...
- php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...
PHP如何导出当前页面中的表格至Excel 常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点.个人推荐用第三种方法,因为它可以跨平台使用. 1. 以.csv格式读取 将.xls转换成. ...
- matlab筛选表格数据导出,excel表格里怎么将筛选数据导出-Excel表格在进行筛选,我如何可以导出所有筛选出来......
如何将EXCEL表格中筛选出来的数据一次性复制到另一... 使用数据透最方便下据为例: 步骤1:选择A1单元格,插入>>>数据透视表,再单击定"按钮,如下图 步骤2:勾选& ...
- php修改excel表格数据,php修改excel表格数据-php怎么导入Excel表格到数据库,根据表格内的字段......
php怎么导入Excel表格到数据库,根据表格内的字段... 昨天项目里有个新知需求,客户希望把一些数据能导出成为Excel表格道,刚开始用PHP原生输入Excel表格,发现效果不是很理想,于是找到一 ...
- 拒绝“累丑”,告别加班,一键读取Excel表格数据自动录入至网页
朗思RPA:读取Excel表格数据自动录入到网页 朗思无代码RPA社区版可永久免费下载体验~ 零代码,易学易操作,可视化界面,全中文化支持,助力企业数字化转型,让员工工作更高效!
- latex 的列表和表格环境-快速导入excel表格源文件
latex 的列表和表格环境-快速导出excel表格源文件 列表-1 基本语法 \begin{itemize}\item 列表内容\item 列表内容\item 列表内容 \end{itemiz ...
- 避免word中表格导入excel表格中变形的问题
1.word中序号自动递增 选中你要添加"单元格",选择"开始"-"编号",定制自己的格式,选中后,自动添加序号 2.把word中表格数据存 ...
- SQL server 导入excel表格
导入教程: 打开SQL Server Management Studio,按图中的路径进入导入数据界面. 导入的时候需要将EXCEL的文件准备好,不能打开.点击下一步. 数据源:选择"Mic ...
最新文章
- 【RocketMQ工作原理】消息堆积与消费延迟
- 【laravel5.4】laravel5.4系列之生成_ide_helper.php文件
- UESTC 1851 Kings on a Chessboard
- 纯css3天气动画场景特效
- c语言函数声明定义参数命名,C语言函数声明与定义
- HTML+CSS+JS实现 ❤️echarts企业地区大数据图表模板❤️
- Transaction rolled back because it has been marked as rollback-only 原因 和解决方案
- Hive from_unixtime函数入门
- 快闪ppt音乐_冬日午后南昌路,音乐快闪引人驻足
- 汉字笔划,五笔字根、拆分、练习汇总
- 计算机多道程序设计是指什么,多道程序设计是什么意思?
- 新东方雅思词汇(List 41 ~ List 45)
- a113 智能音箱芯片方案_智能音箱九大芯片方案商及其生产厂商和代表作品介绍...
- Java学习里程-----Java基础_26 BigDecimal类
- 强化学习基础-蒙特卡洛(Monte Carlo)
- 漫画:鉴权与安全访问控制的技术血脉
- 什么叫别让孩子输在起跑线上?! - 电子产品已成儿童“多动症”诱因
- 【网络工程师配置篇】华为RIP路由基础配置续篇——重分发
- 计算机病毒考试及答案,计算机病毒类考试题目以及参考答案.doc
- Why Python is Slow? Looking Under the Hood