PHPExcel CSV to XLSX
11,654
The "default" separator for reading a CSV file in PHPExcel is a comma (,
). Your CSV file is using something other than a comma - perhaps a tab ("\t"
), which is also commonly used for such files).
If the values isn't a comma (and we can't tell from an image of the file viewed in MS Excel) then you have to tell PHPExcel explicitly what that separator is before loading.
e.g.
$objReader->setDelimiter("\t");
Author by
JustinasT
Updated on June 04, 2022Comments
-
JustinasT almost 2 years
I have a problem converting file feom CSV to XLSX format:
Index.php
<?php if (!isset($_FILES["file"])) { ?> <html> <body> <h1>Convert CSV to XLSX</h1> <form action="index.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <input type="submit"/> </form> </body> </html> <?php exit; } //obtain PHPExcel from http://phpexcel.codeplex.com require_once('Classes\PHPExcel.php'); require_once('CSVToExcelConverter.php'); if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_FILES["file"]["error"]; exit; } try { header('Content-type: application/ms-excel'); header('Content-Disposition: attachment; filename='.'example.xlsx'); CSVToExcelConverter::convert($_FILES['file']['tmp_name'], 'php://output'); } catch(Exception $e) { echo $e->getMessage(); }
CSVToExcelConverter.php
class CSVToExcelConverter { /** * Read given csv file and write all rows to given xls file * * @param string $csv_file Resource path of the csv file * @param string $xls_file Resource path of the excel file * @param string $csv_enc Encoding of the csv file, use utf8 if null * @throws Exception */ public static function convert($csv_file, $xls_file, $csv_enc=null) { //set cache $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; PHPExcel_Settings::setCacheStorageMethod($cacheMethod); //open csv file $objReader = new PHPExcel_Reader_CSV(); if ($csv_enc != null) $objReader->setInputEncoding($csv_enc); $objPHPExcel = $objReader->load($csv_file); $in_sheet = $objPHPExcel->getActiveSheet(); //open excel file $objPHPExcel = new PHPExcel(); $out_sheet = $objPHPExcel->getActiveSheet(); //row index start from 1 $row_index = 0; foreach ($in_sheet->getRowIterator() as $row) { $row_index++; $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); //column index start from 0 $column_index = -1; foreach ($cellIterator as $cell) { $column_index++; $out_sheet->setCellValueByColumnAndRow($column_index, $row_index, $cell->getValue()); } } //write excel file $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); $objWriter->save($xls_file); } }
CSV File format: CSV file opened with Excel
xlsx file I get after conversion
Basicaly I would like to get output similar to original csv file, but in xmlx format, how to do that?
-
JustinasT over 8 yearsThanks for answer! That made things a lot more clear for me!