支持自动识别表头名称和字段并生成对应的数据

目录结构

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表格,支持自动筛选字段,支持验证字段相关推荐

  1. 陈表达VBA笔记-Excel VBA 编程-在表格做自动筛选的功能

    Excel VBA 编程,在表格做自动筛选的功能 下面的例子是自动筛选85列的内容,筛选内容为处方 Private Sub CommandButton11_Click()     '筛选处方     ...

  2. 如何在ex表格导入php_怎么使用php把表格中的数据导入到excel中,php如何快速导入excel表格数据...

    php怎么导入大量数据的excel php导出数据的Excel: PHP从数据库分多次读取100万行记录,和分将100万入文本文件都没问题 Excel可以支100万行记录,Excel 2003最大支持 ...

  3. php导入excel表格数据,php页面导入excel表格数据-php导入excel 怎么获取excel表格数据...

    PHP如何导出当前页面中的表格至Excel 常用的用PHP读取EXCEL的方法有以下三种,各自有各自的优缺点.个人推荐用第三种方法,因为它可以跨平台使用. 1. 以.csv格式读取 将.xls转换成. ...

  4. matlab筛选表格数据导出,excel表格里怎么将筛选数据导出-Excel表格在进行筛选,我如何可以导出所有筛选出来......

    如何将EXCEL表格中筛选出来的数据一次性复制到另一... 使用数据透最方便下据为例: 步骤1:选择A1单元格,插入>>>数据透视表,再单击定"按钮,如下图 步骤2:勾选& ...

  5. php修改excel表格数据,php修改excel表格数据-php怎么导入Excel表格到数据库,根据表格内的字段......

    php怎么导入Excel表格到数据库,根据表格内的字段... 昨天项目里有个新知需求,客户希望把一些数据能导出成为Excel表格道,刚开始用PHP原生输入Excel表格,发现效果不是很理想,于是找到一 ...

  6. 拒绝“累丑”,告别加班,一键读取Excel表格数据自动录入至网页

    朗思RPA:读取Excel表格数据自动录入到网页 朗思无代码RPA社区版可永久免费下载体验~ 零代码,易学易操作,可视化界面,全中文化支持,助力企业数字化转型,让员工工作更高效!

  7. latex 的列表和表格环境-快速导入excel表格源文件

    latex 的列表和表格环境-快速导出excel表格源文件 列表-1 基本语法 \begin{itemize}\item 列表内容\item 列表内容\item 列表内容 \end{itemiz ...

  8. 避免word中表格导入excel表格中变形的问题

    1.word中序号自动递增 选中你要添加"单元格",选择"开始"-"编号",定制自己的格式,选中后,自动添加序号 2.把word中表格数据存 ...

  9. SQL server 导入excel表格

    导入教程: 打开SQL Server Management Studio,按图中的路径进入导入数据界面. 导入的时候需要将EXCEL的文件准备好,不能打开.点击下一步. 数据源:选择"Mic ...

最新文章

  1. 【RocketMQ工作原理】消息堆积与消费延迟
  2. 【laravel5.4】laravel5.4系列之生成_ide_helper.php文件
  3. UESTC 1851 Kings on a Chessboard
  4. 纯css3天气动画场景特效
  5. c语言函数声明定义参数命名,C语言函数声明与定义
  6. HTML+CSS+JS实现 ❤️echarts企业地区大数据图表模板❤️
  7. Transaction rolled back because it has been marked as rollback-only 原因 和解决方案
  8. Hive from_unixtime函数入门
  9. 快闪ppt音乐_冬日午后南昌路,音乐快闪引人驻足
  10. 汉字笔划,五笔字根、拆分、练习汇总
  11. 计算机多道程序设计是指什么,多道程序设计是什么意思?
  12. 新东方雅思词汇(List 41 ~ List 45)
  13. a113 智能音箱芯片方案_智能音箱九大芯片方案商及其生产厂商和代表作品介绍...
  14. Java学习里程-----Java基础_26 BigDecimal类
  15. 强化学习基础-蒙特卡洛(Monte Carlo)
  16. 漫画:鉴权与安全访问控制的技术血脉
  17. 什么叫别让孩子输在起跑线上?! - 电子产品已成儿童“多动症”诱因
  18. 【网络工程师配置篇】华为RIP路由基础配置续篇——重分发
  19. 计算机病毒考试及答案,计算机病毒类考试题目以及参考答案.doc
  20. Why Python is Slow? Looking Under the Hood

热门文章

  1. 市值一夜间蒸发千亿,拼多多离不开黄峥?
  2. 项目经理(Project Manager)和产品经理(Product Manager),简称PM。
  3. NAGVIS安装详解
  4. 为什么我越来越喜欢画低保真原型?
  5. linux命令行看图工具,六个鲜为人知的超酷Unix/Linux命令
  6. Ubuntu 的软件管理工具
  7. Unity使用Mysql(添/删/改/查)(保姆级)
  8. 在c语言中 程序的最小编译单位是,C语言课堂练习习题集
  9. uniapp隐藏原生导航栏
  10. Linux 命令:realpath 命令