1

我找到了这个答案,

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';
    }
4

4 回答 4

1

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

供应商/maatwebsite/excel/src/config/csv.php

然后只需指定分隔符。这样,在加载文件时,它实际上将每个条目分开,并且在转换它时,每个条目都在自己的单元格中。

感谢所有的帮助。

于 2014-10-15T10:18:07.353 回答
0

如果使用maatwebsite/excelLaravel 中的库,则只能使用原生 PHPExcel 实例方法,不能使用静态方法。要从 CSV 转换为 excel,可以在文档页面找到此代码

Excel::load($filename, function($file) {
    // modify file content
})->setFileName($new_name)->store('xls');
于 2014-10-15T07:57:18.340 回答
0
/* 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);
于 2014-10-15T06:47:13.767 回答
0

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

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

现在你可以使用:

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

但问题是,$delimiter在这种情况下没有使用。分隔符支持好像是不久前才加入的,所以可能有bug或者需要换个方式使用。我添加了问题以防万一:https ://github.com/Maatwebsite/Laravel-Excel/issues/262

于 2014-10-15T08:06:37.037 回答