当前位置:首页 > CMS教程 > Thinkphp > 列表

thinkphp5.1 框架导入/导出excel文件操作示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-09 08:21:51 浏览: 评论:0 

本文实例讲述了thinkphp5.1 框架导入/导出excel文件操作,分享给大家供大家参考,具体如下:

thinkphp5.1 导入excel文件

  1. public function importExcel() 
  2.   { 
  3.     try { 
  4.       //获取表格的大小,限制上传表格的大小 
  5.       if ($_FILES['file']['size'] > 10 * 1024 * 1024) { //文件过大 
  6.         log_debug($log_title . 'END === MSG:' . '文件过大'); 
  7.         parent::endBack(['state' => 0, 'msg' => '文件过大']); 
  8.       } 
  9.    
  10.       //限制上传表格类型 
  11.       $ext = substr(strrchr($_FILES['file']["name"], '.'), 1); 
  12.       if ($ext != 'xls' && $ext != 'xlsx') { 
  13.         log_debug($log_title . 'END === MSG:' . '文件格式不正确'); 
  14.         parent::endBack(['state' => 0, 'msg' => '上传文件必须为excel表格']); 
  15.       } 
  16.    
  17.    
  18.       //读取表格 
  19.       $filename = $_FILES['file']['tmp_name']; 
  20.       $reader = IOFactory::createReader('Xlsx'); //Xls,Xlsx都可读取 
  21.       $canRead = $reader->canRead($filename); 
  22.       if (!$canRead) { 
  23.         log_debug($log_title . 'END,文件格式不正确,SQL:' . Db::name('')->getLastSql()); 
  24.         parent::endBack(['state' => 0, 'msg' => '文件格式不正确''re_login' => false]); 
  25.       } 
  26.    
  27.       $spreadsheet = $reader->load($filename); //载入excel表格 
  28.       $worksheet = $spreadsheet->getActiveSheet(); //选中sheet表 
  29.       $highestRow = $worksheet->getHighestRow(); // 总行数 
  30. //      $highestColumn = $worksheet->getHighestColumn(); // 总列数 
  31.    
  32.       if (!(0 < $highestRow)) { 
  33.         log_debug($log_title . 'END,文件内容空,SQL:' . Db::name('')->getLastSql()); 
  34.         parent::endBack(['state' => 0, 'msg' => '文件没有数据''re_login' => false]); 
  35.       } 
  36.    
  37.    
  38.       //循环读取--有效判断 
  39.       $sst_word_arr = []; //存放敏感词的数组 
  40.       for ($row = 1; $row <= $highestRow$row++) { 
  41.         //取列数A列的数据 
  42.         $tmp_word = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue(); 
  43.         if ('' != trim($tmp_word) && null != $tmp_word) { 
  44.           $sst_word_arr[] = $tmp_word
  45.           break//发现有效数据,直接退出,接下来插入数据 
  46.         } 
  47.       } 
  48. //      $sst_word_arr = array_unique($sst_word_arr); 
  49.    
  50.       if (emptyempty($sst_word_arr)) { 
  51.         log_debug($log_title . 'END,文件无有效数据,SQL:' . Db::name('')->getLastSql()); 
  52.         parent::endBack(['state' => 0, 'msg' => '文件无有效数据''re_login' => false]); 
  53.       } 
  54.    
  55.       //判断和数据库操作 
  56.       for ($row = 2; $row <= $highestRow$row++) { 
  57.         //取列数A列的数据 
  58.         $tmp_old_car_num = $spreadsheet->getActiveSheet()->getCell('A' . $row)->getValue(); 
  59.    
  60.         $car_num = trim($tmp_old_car_num); 
  61.         if ('' != $car_num && null != $car_num) { 
  62.           //数据库操作 
  63.           } 
  64.         } 
  65.       } 
  66.    
  67.       $ret_arr = [ 
  68.         'state' => 1, 
  69.          //返回数据 
  70.       ]; 
  71.    
  72.       log_debug($log_title . 'END,SUCCESS'); 
  73.       parent::endBack($ret_arr); 
  74.   } catch (\Exception $e) { 
  75.       // 
  76.     } 
  77.   } 

excel文件格式为:

thinkphp5.1 框架导入/导出excel文件操作示例

thinkphp5.1 导出excel文件

  1. namespase app\test; 
  2. use PhpOffice\PhpSpreadsheet\IOFactory; 
  3. use PhpOffice\PhpSpreadsheet\Spreadsheet; 
  4. use PhpOffice\PhpSpreadsheet\Writer\Xlsx; 
  5. class test { 
  6.   public function carNumsExport() 
  7.   { 
  8.     $log_title = '测试 => 车牌列表导出[' . __METHOD__ . '] '
  9.     try { 
  10.    
  11.       $file_name = '《车牌列表》from y8zh - ' . $user_info['uid'] . '.xlsx'
  12.       $file_relative_path = parent::$module_name . DIRECTORY_SEPARATOR . 'fcb_car_nums' . DIRECTORY_SEPARATOR; 
  13.       $file_path = parent::$api_file_root_path . $file_relative_path
  14.    
  15.       // 已生成过则直接返回 
  16.       if (file_exists($file_path . $file_name)) { 
  17.         $ret_arr = [ 
  18.           'state' => 1, 
  19.           'download_url' => parent::$api_file_get_url . $file_relative_path . $file_name
  20.         ]; 
  21.         parent::endBack($ret_arr); 
  22.       } 
  23.    
  24.       if (!is_dir($file_path)) { 
  25.         mkdir($file_path, 0777, true); 
  26.       } 
  27.    
  28.       $spreadsheet = new Spreadsheet(); 
  29.       $sheet = $spreadsheet->getActiveSheet(); 
  30.    
  31.       //获取所有车牌号 
  32.       $car_nums = Db::connect('db_config_yun')->name('vechicle')->column('DISTINCT number'); 
  33.    
  34.       $i = 1; 
  35.         $sheet->setCellValue('A' . $i'车牌号')->getStyle('A' . $i)->getFont()->setBold(true); 
  36.         $i++; 
  37.    
  38.       // 表内容 
  39.       if (!emptyempty($car_nums)) { 
  40.         foreach ($car_nums as $k_c => $v_c) { 
  41.           $sheet->setCellValue('A' . $i$v_c); 
  42.           $i++; 
  43.         } 
  44.    
  45.       } 
  46.    
  47.       $writer = new Xlsx($spreadsheet); 
  48.       $writer->save($file_path . $file_name); 
  49.       $ret_arr = [ 
  50.         'state' => 1, 
  51.         'download_url' => parent::$api_file_get_url . $file_relative_path . $file_name
  52.       ]; 
  53.    
  54.       log_debug($log_title . 'END === DOWNLOAD_URL:' . $ret_arr['download_url']); 
  55.       parent::endBack($ret_arr); 
  56.   } catch (\Exception $e) { 
  57.       // 
  58.     } 
  59.   } 
  60. }

Tags: thinkphp5.1导入excel

分享到: