thinkphp5.1 框架导入/导出excel文件操作示例


Posted in PHP onMay 25, 2020

本文实例讲述了thinkphp5.1 框架导入/导出excel文件操作。分享给大家供大家参考,具体如下:

thinkphp5.1 导入excel文件

public function importExcel()
  {
    try {
      //获取表格的大小,限制上传表格的大小
      if ($_FILES['file']['size'] > 10 * 1024 * 1024) { //文件过大
        log_debug($log_title . 'END === MSG:' . '文件过大');
        parent::endBack(['state' => 0, 'msg' => '文件过大']);
      }
 
      //限制上传表格类型
      $ext = substr(strrchr($_FILES['file']["name"], '.'), 1);
      if ($ext != 'xls' && $ext != 'xlsx') {
        log_debug($log_title . 'END === MSG:' . '文件格式不正确');
        parent::endBack(['state' => 0, 'msg' => '上传文件必须为excel表格']);
      }
 
 
      //读取表格
      $filename = $_FILES['file']['tmp_name'];
      $reader = IOFactory::createReader('Xlsx'); //Xls,Xlsx都可读取
      $canRead = $reader->canRead($filename);
      if (!$canRead) {
        log_debug($log_title . 'END,文件格式不正确,SQL:' . Db::name('')->getLastSql());
        parent::endBack(['state' => 0, 'msg' => '文件格式不正确', 're_login' => false]);
      }
 
      $spreadsheet = $reader->load($filename); //载入excel表格
      $worksheet = $spreadsheet->getActiveSheet(); //选中sheet表
      $highestRow = $worksheet->getHighestRow(); // 总行数
//      $highestColumn = $worksheet->getHighestColumn(); // 总列数
 
      if (!(0 < $highestRow)) {
        log_debug($log_title . 'END,文件内容空,SQL:' . Db::name('')->getLastSql());
        parent::endBack(['state' => 0, 'msg' => '文件没有数据', 're_login' => false]);
      }
 
 
      //循环读取--有效判断
      $sst_word_arr = []; //存放敏感词的数组
      for ($row = 1; $row <= $highestRow; $row++) {
        //取列数A列的数据
        $tmp_word = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue();
        if ('' != trim($tmp_word) && null != $tmp_word) {
          $sst_word_arr[] = $tmp_word;
          break; //发现有效数据,直接退出,接下来插入数据
        }
      }
//      $sst_word_arr = array_unique($sst_word_arr);
 
      if (empty($sst_word_arr)) {
        log_debug($log_title . 'END,文件无有效数据,SQL:' . Db::name('')->getLastSql());
        parent::endBack(['state' => 0, 'msg' => '文件无有效数据', 're_login' => false]);
      }
 
      //判断和数据库操作
      for ($row = 2; $row <= $highestRow; $row++) {
        //取列数A列的数据
        $tmp_old_car_num = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue();
 
        $car_num = trim($tmp_old_car_num);
        if ('' != $car_num && null != $car_num) {
          //数据库操作
          }
        }
      }
 
      $ret_arr = [
        'state' => 1,
         //返回数据
      ];
 
      log_debug($log_title . 'END,SUCCESS');
      parent::endBack($ret_arr);
  } catch (\Exception $e) {
      //
    }
  }

excel文件格式为:

thinkphp5.1 框架导入/导出excel文件操作示例

thinkphp5.1 导出excel文件

namespase app\test;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
class test {
  public function carNumsExport()
  {
    $log_title = '测试 => 车牌列表导出[' . __METHOD__ . '] ';
    try {
 
      $file_name = '《车牌列表》from y8zh - ' . $user_info['uid'] . '.xlsx';
      $file_relative_path = parent::$module_name . DIRECTORY_SEPARATOR . 'fcb_car_nums' . DIRECTORY_SEPARATOR;
      $file_path = parent::$api_file_root_path . $file_relative_path;
 
      // 已生成过则直接返回
      if (file_exists($file_path . $file_name)) {
        $ret_arr = [
          'state' => 1,
          'download_url' => parent::$api_file_get_url . $file_relative_path . $file_name,
        ];
        parent::endBack($ret_arr);
      }
 
      if (!is_dir($file_path)) {
        mkdir($file_path, 0777, true);
      }
 
      $spreadsheet = new Spreadsheet();
      $sheet = $spreadsheet->getActiveSheet();
 
      //获取所有车牌号
      $car_nums = Db::connect('db_config_yun')->name('vechicle')->column('DISTINCT number');
 
      $i = 1;
        $sheet->setCellValue('A' . $i, '车牌号')->getStyle('A' . $i)->getFont()->setBold(true);
        $i++;
 
      // 表内容
      if (!empty($car_nums)) {
        foreach ($car_nums as $k_c => $v_c) {
          $sheet->setCellValue('A' . $i, $v_c);
          $i++;
        }
 
      }
 
      $writer = new Xlsx($spreadsheet);
      $writer->save($file_path . $file_name);
      $ret_arr = [
        'state' => 1,
        'download_url' => parent::$api_file_get_url . $file_relative_path . $file_name,
      ];
 
      log_debug($log_title . 'END === DOWNLOAD_URL:' . $ret_arr['download_url']);
      parent::endBack($ret_arr);
  } catch (\Exception $e) {
      //
    }
  }
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
利用PHP生成静态HTML文档的原理
Oct 29 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
php实现分页工具类分享
Jan 09 PHP
PHP对接微信公众平台消息接口开发流程教程
Mar 25 PHP
排序算法之PHP版快速排序、冒泡排序
Apr 09 PHP
PHP实现单例模式最安全的做法
Jun 13 PHP
PHP动态页生成静态页的3种常用方法
Nov 13 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 #PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 #PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 #PHP
php7 错误处理机制修改实例分析
May 25 #PHP
php7 list()、session及其他模块的修改实例分析
May 25 #PHP
php7 新增功能实例总结
May 25 #PHP
PHP强制转化的形式整理
May 22 #PHP
You might like
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
javascript function调用时的参数检测常用办法
2010/02/26 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
Angular5中状态管理的实现
2018/09/03 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
javascript实现贪吃蛇游戏(娱乐版)
2020/08/17 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
使用python实现数组、链表、队列、栈的方法
2019/12/20 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
Java里面如何创建一个内部类的实例
2015/01/19 面试题
学雷锋先进个人事迹
2014/05/26 职场文书
家长会标语
2014/06/24 职场文书
生产操作工岗位职责
2014/09/16 职场文书
银行业务授权委托书
2014/10/10 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Javascript中Microtask和Macrotask鲜为人知的知识点
2022/04/02 Javascript