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 相关文章推荐
PHP 字符串 小常识
Jun 05 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
几个有用的php字符串过滤,转换函数代码
May 01 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
解析csv数据导入mysql的方法
Jul 01 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 PHP
使用php记录用户通过搜索引擎进网站的关键词
Feb 13 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
ThinkPHP3.1基础知识快速入门
Jun 19 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP下的浮点运算不准的解决方法
Oct 27 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 分库分表hash算法
2009/11/12 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
react native带索引的城市列表组件的实例代码
2017/08/08 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
vue获取form表单的值示例
2019/10/29 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
Python生成随机MAC地址
2015/03/10 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python爬取数据并写入MySQL数据库的实例
2018/06/21 Python
Python for循环及基础用法详解
2019/11/08 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
职工趣味运动会方案
2014/02/10 职场文书
座谈会主持词
2014/03/20 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
八一建军节主持词
2015/07/01 职场文书
电工生产实习心得体会
2016/01/22 职场文书
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript