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 相关文章推荐
输出控制类
Oct 09 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
PHP内核探索之变量
Dec 22 PHP
thinkPHP实现将excel导入到数据库中的方法
Apr 22 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
Sep 11 PHP
php微信公众账号开发之前五个坑(一)
Sep 18 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP设计模式之观察者模式定义与用法示例
Aug 04 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获取字符串中各个字符出现次数的方法
2015/02/23 PHP
php多进程应用场景实例详解
2019/07/22 PHP
经典的带阴影的可拖动的浮动层
2006/06/26 Javascript
一个用js实现控制台控件的代码
2007/09/04 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
vue.js事件处理器是什么
2017/03/20 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
python查看微信好友是否删除自己
2016/12/19 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
印度婴儿用品在线商店:Firstcry.com
2016/12/05 全球购物
三星美国官网:Samsung美国
2017/02/06 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
教师批评与自我批评范文
2014/10/15 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
2014司机年终工作总结
2014/12/05 职场文书
解决pytorch 损失函数中输入输出不匹配的问题
2021/06/05 Python
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技