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下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
解析PHP 5.5 新特性
Jul 02 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
php实现的简易扫雷游戏实例
Jul 09 PHP
thinkphp配置文件路径的实现方法
Aug 30 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
thinkphp3.2实现在线留言提交验证码功能
Jul 19 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
Oct 13 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
解析ajax事件的调用顺序
2013/06/17 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
总结的一些PHP开发中的tips(必看篇)
2017/03/24 PHP
jquery中animate动画积累的解决方法
2013/10/05 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
JS判断字符串包含的方法
2015/05/05 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python实现简单成绩录入系统
2019/09/19 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
2014年远程教育工作总结
2014/12/09 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android