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使之能同时支持GIF和JPEG
Oct 09 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
Sep 30 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
配置php网页显示各种语法错误
Sep 23 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
yii添删改查实例
Nov 16 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
万能的php分页类
Jul 06 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
Laravel登录失败次数限制的实现方法
Aug 26 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生成静态页面详解
2006/11/19 PHP
php 常用字符串函数总结
2008/03/15 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
Koa从零搭建到Api实现项目的搭建方法
2019/07/30 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
在Python的Django框架中创建语言文件
2015/07/27 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
python利用插值法对折线进行平滑曲线处理
2018/12/25 Python
python单线程文件传输的实例(C/S)
2019/02/13 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
高级护理专业毕业生推荐信
2013/12/25 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
锅炉工岗位职责
2015/02/13 职场文书
逃课检讨书范文
2015/05/06 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
基于Go语言构建RESTful API服务
2021/07/25 Golang