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 用sock技术发送邮件的函数
Jul 21 PHP
PHP字符串的编码问题的详细介绍
Apr 27 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
May 10 PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
Mar 25 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
详解php框架Yaf路由重写
Jun 20 PHP
php二维码生成以及下载实现
Sep 28 PHP
thinkphp中U方法按路由规则生成url的方法
Mar 12 PHP
PHP实现微信提现功能
Sep 30 PHP
PHP实现单文件、多个单文件、多文件上传函数的封装示例
Sep 02 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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的优点与缺点
2013/04/11 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
artDialog+plupload实现多文件上传
2016/07/19 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
前端插件之Bootstrap Dual Listbox使用教程
2019/07/23 Javascript
js实现内置计时器
2019/12/16 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
马德里著名的运动鞋商店:NOIRFONCE
2019/04/12 全球购物
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
编程输出如下图形
2013/11/24 面试题
土木工程应届生求职信
2013/10/31 职场文书
2014的自我评价
2014/01/13 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
春节联欢会策划方案
2014/05/16 职场文书
文明城市标语
2014/06/16 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
大型公益活动策划方案
2014/08/20 职场文书
中学生自我评价范文
2015/03/03 职场文书
2016年中秋节慰问信
2015/12/01 职场文书