debug) { Notice::note("import $folder to excel", 'g'); } switch ($this->task_id) { case 1: $this->titel = ucfirst($folder) . '_' . $day; $files = $this->get_tree($this->data_dir . '/' . $day); break; case 3: $task = SofaScoreTask::with('sport')->where('id', $this->task_id)->first(); $this->titel = ucfirst($folder) . '-' . $this->clean_string($task->name); $files = $this->get_tree($this->data_dir); break; } $files = array_chunk($this->filter($files), $this->max); foreach ($files as $key => $value) { $has = count($value); if (! $key && $has < $this->max) { $count_from = 1; $count_to = $has; } elseif (! $key) { $count_from = 1; $key++; $count_to = $key * $this->max; } elseif ($has == $this->max) { $count_from = $key * $this->max + 1; $key++; $count_to = $key * $this->max; } else { $count_from = $key * $this->max + 1; $count_to = $key * $this->max + $has; } $spreadsheet = new Spreadsheet; $spreadsheet->getProperties()->setTitle($this->titel . '-' . $count_from . '-' . $count_to); $activeWorksheet = $spreadsheet->getActiveSheet(); $column = 1; foreach ($value as $file) { $data = file_get_contents($file); $data = json_decode($data, true); $json_string = json_encode($data, JSON_PRETTY_PRINT); $arr = explode(PHP_EOL, $json_string); $row = 0; foreach ($arr as $string) { $row++; $replacedString = preg_replace('/\\\\u([0-9abcdef]{4})/', '&#x$1;', $string); $utf8string = mb_convert_encoding($replacedString, 'UTF-8', 'HTML-ENTITIES'); $activeWorksheet->setCellValue([$column, $row], $utf8string); } $column++; } $spreadsheet->setActiveSheetIndex(0); $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save("$this->data_dir/$this->titel-$count_from-$count_to.xlsx"); } } protected function filter(array $files, array $types = ['json']) { $filtered = []; foreach ($files as $file) { $path_parts = pathinfo($file); if (isset($path_parts['extension']) && in_array($path_parts['extension'], $types)) { $filtered[] = $file; } } return $filtered; } }