$columnMap * @param array $options */ public function __construct( protected Export $export, protected array $columnMap, protected array $options = [], ) { $this->exporter = $this->export->getExporter( $this->columnMap, $this->options, ); } public function handle(): void { $disk = $this->export->getFileDisk(); $writer = app(Writer::class); $writer->openToFile($temporaryFile = tempnam(sys_get_temp_dir(), $this->export->file_name)); $csvDelimiter = $this->exporter::getCsvDelimiter(); $writeRowsFromFile = function (string $file, ?Style $style = null) use ($csvDelimiter, $disk, $writer) { $csvReader = CsvReader::createFromStream($disk->readStream($file)); $csvReader->setDelimiter($csvDelimiter); $csvResults = (new Statement)->process($csvReader); foreach ($csvResults->getRecords() as $row) { $writer->addRow(Row::fromValues($row, $style)); } }; $cellStyle = $this->exporter->getXlsxCellStyle(); $writeRowsFromFile( $this->export->getFileDirectory() . DIRECTORY_SEPARATOR . 'headers.csv', $this->exporter->getXlsxHeaderCellStyle() ?? $cellStyle, ); foreach ($disk->files($this->export->getFileDirectory()) as $file) { if (str($file)->endsWith('headers.csv')) { continue; } if (! str($file)->endsWith('.csv')) { continue; } $writeRowsFromFile($file, $cellStyle); } $writer->close(); $disk->putFileAs( $this->export->getFileDirectory(), new File($temporaryFile), "{$this->export->file_name}.xlsx", Filesystem::VISIBILITY_PRIVATE, ); unlink($temporaryFile); } }