1) { return DataType::TYPE_FORMULA; } elseif (is_bool($value)) { return DataType::TYPE_BOOL; } elseif (is_float($value) || is_int($value)) { return DataType::TYPE_NUMERIC; } return DataType::TYPE_STRING; } } class execl_loader { public function load_dirs($dirs) { foreach ($dirs as $dir) { $this->load_dir($dir); } } public function load_dir($dir) { $files = file_generator($dir); foreach ($files as $file) { Log::record("$file",Log::WARING); $this->load_file($file); } } public function load_file($file) { $line_reader = function ($file) { $ext = pathinfo($file,PATHINFO_EXTENSION); if(!in_array($ext,['xls','xlsx'])) { return; } $reader = PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile($file); $reader->setReadDataOnly(true); $spreadsheet = PhpOffice\PhpSpreadsheet\IOFactory::load($file); yield 'start' => 1; foreach ($spreadsheet->getWorksheetIterator() as $worksheet) { foreach ($worksheet->getRowIterator() as $row) { $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set $item = []; foreach ($cellIterator as $cell) { if ($cell !== null) { $item[] = trim($cell->getValue()); } } yield 'line' => $item; } } yield 'start' => 0; }; $mod_record = Model(); $inserter = function ($line) use ($mod_record){ $mod_record->table('bank_record')->insert($line); }; $lines = $line_reader($file); $convert = new converter(); foreach ($lines as $key => $val) { if($key === 'start') { $convert->start(); } elseif($key === 'line') { $line = $convert->convert($val); if(!empty($line) && !empty($line['trade_no'])) { $inserter($line); } else { Log::record(json_encode($val,JSON_UNESCAPED_UNICODE),Log::WARING); } } else { $convert->end(); } } } }