将csv转换为excel与laravel中的PHPExcel?

我find了这个答案,

PHP将CSV转换为XLS – phpExcel错误

但我已经在Laravel 4中尝试过了,我无法得到它的工作,任何帮助将不胜感激。

我的代码

public function CsvExcelConverter($filename){ $objReader = Excel::createReader('CSV'); $objReader->setDelimiter(";"); $objPHPExcel = $objReader->load('uploads/'.$filename); $objWriter = Excel::createWriter($objPHPExcel, 'Excel5'); //new file $new_filename = explode('.',$filename); $new_name = $new_filename[1]; $objWriter->save($new_name.'.xls'); return $new_name.'.xls'; } 

感谢您的答案,但由于某种原因,我们似乎无法设置加载分隔符,但我发现你可以在configuration文件中设置它。

vendeor / maatwebsite / EXCEL / src目录/configuration/ csv.php

那么只需指定分隔符。 这种方式加载文件时,它实际上分隔每个条目,转换时,每个条目都在自己的单元格。

感谢所有的帮助。

 /* Get the excel.php class here: http://www.phpclasses.org/browse/package/1919.html */ require_once("../classes/excel.php"); $inputFile=$argv[1]; $xlsFile=$argv[2]; if( empty($inputFile) || empty($xlsFile) ) { die("Usage: ". basename($argv[0]) . " in.csv out.xls\n" ); } $fh = fopen( $inputFile, "r" ); if( !is_resource($fh) ) { die("Error opening $inputFile\n" ); } /* Assuming that first line is column headings */ if( ($columns = fgetcsv($fh, 1024, "\t")) == false ) { print( "Error, couldn't get header row\n" ); exit(-2); } $numColumns = count($columns); /* Now read each of the rows, and construct a big Array that holds the data to be Excel-ified: */ $xlsArray = array(); $xlsArray[] = $columns; while( ($rows = fgetcsv($fh, 1024, "\t")) != FALSE ) { $rowArray = array(); for( $i=0; $i<$numColumns;$i++ ) { $key = $columns[$i]; $val = $rows[$i]; $rowArray["$key"] = $val; } $xlsArray[] = $rowArray; unset($rowArray); } fclose($fh); /* Now let the excel class work its magic. excel.php has registered a stream wrapper for "xlsfile:/" and that's what triggers its 'magic': */ $xlsFile = "xlsfile://".$xlsFile; $fOut = fopen( $xlsFile, "wb" ); if( !is_resource($fOut) ) { die( "Error opening $xlsFile\n" ); } fwrite($fOut, serialize($xlsArray)); fclose($fOut); exit(0); 

如果使用maatwebsite/excel库,则只能使用本机PHPExcel实例方法,而不能使用静态方法。 要从CSV转换为Excel,可以在Documentation页面find这个代码

 Excel::load($filename, function($file) { // modify file content })->setFileName($new_name)->store('xls'); 

从理论上讲,您应该创build自定义类来设置分隔符:

 class CSVExcel extends Excel { protected $delimiter = ';'; } 

现在你可以使用:

 CSVExcel::load('csvfilename.csv')->setFileName('newfilename')->export('xls'); 

但问题是,在这种情况下$delimiter不使用。 定界符支持似乎不久前被添​​加,所以也许有一个错误,或者需要以另一种方式使用。 我已经添加了问题,以防万一: https : //github.com/Maatwebsite/Laravel-Excel/issues/262