Доброе утро. Я пытаюсь создать файл .xls из трех разных файлов .csv, помещенных в каталог /temp из Windows. Эти файлы .csv содержат данные из базы данных. Моя проблема в том, что я не знаю, почему результат отличается от того, каким он должен быть. В моем документе .xls есть три листа для каждого из файлов .csv, но я получаю только содержимое одного из файлов, и оно переопределяет заголовок документа, изменяя его. Вот мой код
Доброе утро. Я пытаюсь создать файл .xls из трех разных файлов .csv, помещенных в каталог /temp из Windows. Эти файлы .csv содержат данные из базы данных. Моя проблема в том, что я не знаю, почему результат отличается от того, каким он должен быть. В моем документе .xls есть три листа для каждого из файлов .csv, но я получаю только содержимое одного из файлов, и оно переопределяет заголовок документа, изменяя его. Вот мой код
$objPHPExcel->getActiveSheet(2)->setTitle('Normas'); $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getFont()->setBold(true); $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID); $objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getFill()->getStartColor()->setARGB('FFFF00'); $objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1); $objPHPExcel->getActiveSheet()->setAutoFilter('A1:M1'); $objPHPExcel->getActiveSheet()->freezePane('A1'); /** * Usamos un iterador para darle estilos a cada columna del excel */ $fileSystem = new DirectoryIterator("C:\Windows\Temp"); chdir("C:\Windows\Temp"); foreach ($fileSystem as $tempFile) { if (preg_match("/price\d*.csv/", $tempFile->getFilename())) { $objPHPExcel->setActiveSheetIndex(0); $objReader = new PHPExcel_Reader_CSV(); $objReader->setInputEncoding('CP1252'); $objReader->setDelimiter(';'); $objReader->setEnclosure(''); $objReader->setLineEnding("\n"); $objReader->setSheetIndex(0); $objReader->loadIntoExisting($tempFile->getFilename(), $objPHPExcel); } else if (preg_match("/allotment\d*.csv/", $fileSystem->getFilename())) { $objPHPExcel->setActiveSheetIndex(1); $objReader = new PHPExcel_Reader_CSV(); $objReader->setInputEncoding('CP1252'); $objReader->setDelimiter(';'); $objReader->setEnclosure(''); $objReader->setLineEnding("\n"); $objReader->setSheetIndex(0); $objReader->loadIntoExisting($tempFile->getFilename(), $objPHPExcel); } else if (preg_match("/price\d*.csv/", $fileSystem->getFilename())) { $objPHPExcel->setActiveSheetIndex(2); $objReader = new PHPExcel_Reader_CSV(); $objReader->setInputEncoding('CP1252'); $objReader->setDelimiter(';'); $objReader->setEnclosure(''); $objReader->setLineEnding("\n"); $objReader->setSheetIndex(0); $objReader->loadIntoExisting($tempFile->getFilename(), $objPHPExcel); } else { continue; } $fileSystem->next(); }
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) { /** * Cogemos el index de la hoja activa en el momento para poder iterar * entre las hojas */ $objPHPExcel->setActiveSheetIndex($objPHPExcel->getIndex($worksheet));
$sheet = $objPHPExcel->getActiveSheet(); $cellIterator = $sheet->getRowIterator()->current()->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(true); /** * Mediante este foreach le damos el formato que queramos a las columnas, * si la columna es "mayor"(alfabéticamente) a la J se le da un width * de 40, si no tiene autoSize */ foreach ($cellIterator as $cell) { //print_r($sheet->getColumnDimension($cell->getColumn())); if ($sheet->getColumnDimension($cell->getColumn())->getColumnIndex() > "J") { $sheet->getColumnDimension($cell->getColumn())->setAutoSize(false); $sheet->getColumnDimension($cell->getColumn())->setWidth(40); $sheet->getDefaultStyle()->getFont()->setName('Calibri')->setSize(9); } else { $sheet->getColumnDimension($cell->getColumn())->setAutoSize(true); $sheet->getDefaultStyle()->getFont()->setName('Calibri')->setSize(9); } } }
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save('php://output'); [/code]
Вывод, который он должен сделать, следующий: https://ufile.io/a1a1b
Может помогите мне с этим вопросом, пожалуйста? Заранее большое спасибо за ваше время и усилия.