IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> TP5.1导入Excel表格,支持自动筛选字段,支持验证字段 -> 正文阅读

[PHP知识库]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();
    }

至此结束,可根据自身需求进行扩展或修改代码
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-01 11:41:35  更:2021-09-01 11:42:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:34:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码