[英]Writing multiple csv files in one xls file using phpExcel
Good morning. 早上好。 I'm trying to create a .xls file from three different.csv files placed in the /temp directory from windows. 我正在尝试从Windows放在/ temp目录中的三个不同的.csv文件创建一个.xls文件。 Those .csv files contains data from a database. 这些.csv文件包含来自数据库的数据。 My problem is that I don't know why the output is way different as it should be. 我的问题是我不知道为什么输出应该与实际有所不同。 I have three sheets in my .xls document for each of the .csv files, but I only get the content of one of the files, and it overrides the header of the document, changing it. 我在.xls文档中为每个.csv文件准备了三张纸,但是我只得到其中一个文件的内容,并且它覆盖了文档的标题,因此进行了更改。 Here is my code 这是我的代码
/**
* Cabeceras para descargar el excel
*/
ini_set('memory_limit', '512M');
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=informe_de_precios" . date("Y-M-D-h-m-s") . ".xls");
header("Content-Transfer-Encoding: binary ");
require_once '/PHPExcel_1.8.0_doc/Classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->
getProperties()
->setCreator("Idiso")
->setLastModifiedBy("Idiso")
->setTitle("Informe errores precios")
->setSubject("Informe errores precios")
->setDescription("Informe errores precios")
->setKeywords("Informe errores precios")
->setCategory("Informe errores precios");
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'CANAL')
->setCellValue('B1', 'COD_HOTEL')
->setCellValue('C1', 'NOMBRE')
->setCellValue('D1', 'TARIFA')
->setCellValue('E1', 'HABITACION')
->setCellValue('F1', 'REGIMEN')
->setCellValue('G1', 'FECHA_INI')
->setCellValue('H1', 'FECHA_FIN')
->setCellValue('I1', 'RECUENTO')
->setCellValue('J1', 'PUBLICADO')
->setCellValue('K1', 'ERROR_DESCRIPTION')
->setCellValue('L1', 'ERROR_DETAIL')
->setCellValue('M1', 'TRAN_XMLIN')
->setCellValue('N1', 'TRAN_XMLOUT');
$objPHPExcel->getActiveSheet(0)->setTitle('Precios');
$objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFont()
->setBold(true)
->setSize(9);
$objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
$objPHPExcel->getActiveSheet()->getStyle('A1:N1')->getFill()->getStartColor()->setARGB('FFFF00');
$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);
$objPHPExcel->getActiveSheet()->setAutoFilter('A1:N1');
$objPHPExcel->getActiveSheet()->freezePane('A2');
$objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex(1)
->setCellValue('A1', 'CANAL')
->setCellValue('B1', 'COD_HOTEL')
->setCellValue('C1', 'NOMBRE')
->setCellValue('D1', 'TARIFA')
->setCellValue('E1', 'HABITACION')
->setCellValue('F1', 'FECHA_INI')
->setCellValue('G1', 'FECHA_FIN')
->setCellValue('H1', 'RECUENTO')
->setCellValue('I1', 'PUBLICADO')
->setCellValue('J1', 'ERROR_DESCRIPTION')
->setCellValue('K1', 'ERROR_DETAIL')
->setCellValue('L1', 'TRAN_XMLIN')
->setCellValue('M1', 'TRAN_XMLOUT');
$objPHPExcel->getActiveSheet(1)->setTitle('Cupos');
$objPHPExcel->getActiveSheet()->getStyle('A1:M1')->getFont()
->setBold(true)
->setSize(9);
$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');
$objPHPExcel->createSheet();
$objPHPExcel->setActiveSheetIndex(2)
->setCellValue('A1', 'CANAL')
->setCellValue('B1', 'COD_HOTEL')
->setCellValue('C1', 'NOMBRE')
->setCellValue('D1', 'TARIFA')
->setCellValue('E1', 'HABITACION')
->setCellValue('F1', 'FECHA_INI')
->setCellValue('G1', 'FECHA_FIN')
->setCellValue('H1', 'RECUENTO')
->setCellValue('I1', 'PUBLICADO')
->setCellValue('J1', 'ERROR_DESCRIPTION')
->setCellValue('K1', 'ERROR_DETAIL')
->setCellValue('L1', 'TRAN_XMLIN')
->setCellValue('M1', 'TRAN_XMLOUT');
$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');
The output that it should make is the following: https://ufile.io/a1a1b 它应该产生的输出如下: https : //ufile.io/a1a1b
Could you help me with this issue, please? 您能帮我解决这个问题吗? Thank you so much in advance for your time and effort. 非常感谢您的时间和精力。
It's already solved, I didn't set the delimiter for the .csv file! 它已经解决了,我没有为.csv文件设置分隔符! thank you for your time and effort and sorry for any inconvenience it may have caused! 感谢您的时间和精力,不便之处,敬请原谅!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.