Конвертировать CSV, чтобы преуспеть с PHPExcel в Laravel?

я нашел этот ответ,

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

1

Решение

спасибо за ответы, но по какой-то причине мы не можем установить разделитель при загрузке, но я обнаружил, что вы можете установить его в файле конфигурации.

vendeor / maatwebsite / Excel / SRC / конфигурации / csv.php

затем просто укажите разделитель. таким образом, при загрузке файла он фактически разделяет каждую запись, а при конвертации каждая запись находится в отдельной ячейке.

Спасибо за помощь.

1

Другие решения

/* 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);
0

Если вы используете maatwebsite/excel Библиотека в Laravel, вы можете использовать только собственные методы экземпляра PHPExcel, а не статические методы. Чтобы конвертировать из CSV в Excel, этот код можно найти по адресу Страница документации

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

Теоретически вы должны создать свой собственный класс для установки разделителя:

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

и теперь вы можете использовать:

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

Но проблема в том, что $delimiter не используется в этом случае. Поддержка разделителя, кажется, была добавлена ​​не так давно, поэтому, возможно, есть ошибка или ее необходимо использовать другим способом. Я добавил проблему на всякий случай для этого: https://github.com/Maatwebsite/Laravel-Excel/issues/262

0
По вопросам рекламы [email protected]