【问题标题】:Convert csv to excel with PHPExcel in laravel?在 laravel 中使用 PHPExcel 将 csv 转换为 excel?
【发布时间】:2014-10-15 06:30:20
【问题描述】:

我找到了这个答案,

PHP Converting CSV to XLS - phpExcel error

但我已经在 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';
    }

【问题讨论】:

  • 你的代码在哪里?你想使用maatwebsite.nl/laravel-excel/docs 吗?您应该提供您的代码和示例 CSV 文件
  • 您好,感谢您的回复;是的,我正在使用 maatwebsite.nl/laravel-excel/docs ,我在示例中找到了代码,但系统抱怨函数 createReader 和 createWriter 不存在。
  • 你应该质疑你的代码
  • 好的,我添加了代码。

标签: php excel csv laravel laravel-excel


【解决方案1】:

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

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

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

感谢大家的帮助。

【讨论】:

    【解决方案2】:
    /* 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);
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        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-11-12
          • 2015-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-19
          相关资源
          最近更新 更多