您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何操作thinkphp5.1 框架導入/導出excel文件”,在日常操作中,相信很多人在如何操作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文件格式為:
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) { // } } }
到此,關于“如何操作thinkphp5.1 框架導入/導出excel文件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。