Laravel-excel: Разделитель CSV

Созданный на 15 окт. 2014  ·  26Комментарии  ·  Источник: Maatwebsite/Laravel-Excel

При создании собственного класса:

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

И используя:

 CSVExcel::load('file.csv')->export('xls');

установка разделителя не соблюдается

Самый полезный комментарий

@ yailperalta-santex
Чтобы использовать разделитель табуляции в csv, вы должны установить его так: "\t"
он должен быть в двойных кавычках, а не в одинарных кавычках
поэтому конфигурация в config/excel.php будет такой
'delimiter' => "\t",

Все 26 Комментарий

Вы смешиваете две вещи: инъекции файлов и фасады.

Вы расширяете класс фасада, у которого нет свойства $ delimiter.

Вы хотите сделать что-то вроде:

class MyOwnFile extends ExcelFile {

    protected $delimiter = ';';

    public function getFile()
    {
        return storage_path('exports') . '/file.csv';
    }

}

class ExampleController {

    public function __construct(MyOwnFile $file)
    {
        $this->file = $file;
    }

    public function import()
    {
        // if using fileHandlers:
        $this->file->handleImport();

       // If you want to fetch inside the controller (which I wouldn't recommend)
       $this->file->get();
    }

    // or if you are using Laravel 5.0, you could use the method injection:
    public function import(MyOwnFile $file)
    {
        $file->handleImport();
    }
}

Если в документации это сбивает с толку, дайте мне знать или сделайте запрос на перенос документов :)

Документы о внедрении файлов: http://www.maatwebsite.nl/laravel-excel/docs/import#injection

Как установить разделитель для CSV на лету. На самом деле я использую в своем контроллере функцию «Excel :: load», которая расширяет BaseController. Мне удалось загрузить .XLS, .XLSX и CSV с настройкой по умолчанию, как указано в файле конфигурации csv.php. Но проблема в том, что я должен использовать User INput в качестве разделителя, например, ввод может быть Pipesign, Tab и т. Д. Итак, как это сделать? Пожалуйста помоги.

Вы можете использовать такие методы, как setDelimiter() чтобы переопределить настройки конфигурации. См. Https://github.com/Maatwebsite/Laravel-Excel/blob/master/src/Maatwebsite/Excel/Readers/LaravelExcelReader.php#L271

Ok. Я использовал :
$ results = Excel :: load ('uploads /'. $ filename, function ($ reader) {

                })->setDelimiter("|")->get();

но он читает все значения в одном столбце, так как он не принимает «Разделитель труб». Пожалуйста помоги.

У меня такая же проблема. Используя Laravel 4. Вот код моего контроллера:

public function uploadData()
{
        $file = Input::file('data')->getRealPath();

        \Excel::load($file, function($reader) {
                echo "<pre>";
                $reader->setDelimiter('|');
                print_r($reader->get());
        });
}

Вывод не разделяется на разделителе каналов, вместо этого он обрабатывается как одна длинная строка. Вот пример:

    Maatwebsite\Excel\Collections\RowCollection Object
(
    [title:protected] => Worksheet
    [items:protected] => Array
        (
            [0] => Maatwebsite\Excel\Collections\CellCollection Object
                (
                    [title:protected] => 
                    [items:protected] => Array
                        (
                            [upc_numberitem_numberqty_availunit_pricedescriptioncolorqty_on_ponext_avail_dt] => 040176424354|53607-3037|0|14.50|PACK-N-GO DUFFELS 20?"|BIRDS ON A WIRE/LEAF GREEN||
                        )

                )

            [1] => Maatwebsite\Excel\Collections\CellCollection Object
                (
                    [title:protected] => 
                    [items:protected] => Array
                        (
                            [upc_numberitem_numberqty_availunit_pricedescriptioncolorqty_on_ponext_avail_dt] => 040176414850|53607-3054|0|14.50|PACK-N-GO DUFFELS 20?"|BLACK/BLACK/BLACK||
                        )

                )
)

Я здесь что-то не так делаю? Почему строки не анализируются на символе вертикальной черты?

Если я изменю параметр delimiter в config/csv.php , файл будет проанализирован правильно. Почему не работает метод setDelimiter() ?

Вы должны изменить разделитель перед загрузкой файла:

Excel::setDelimiter('|')->load(...);

Спасибо за помощь, но теперь возникает ошибка:

iconv() expects parameter 1 to be string, object given

Ошибка находится в Shared / String.php. Это как-то связано с этим?

https://github.com/Maatwebsite/Laravel-Excel/issues/382

Что, если вы попытаетесь установить его на лету с помощью:

Config::set('excel::csv.delimiter, '|');

Это работает (Laravel 5.1):

Config::set('excel.csv.delimiter', '|');

хорошо, этот способ работает, но почему этот способ не работает?

Excel::load($file->getPathName(), function($reader){
    $reader->setDelimiter(';')
    dd($reader->get());
});

Поскольку файл уже загружен, в настоящее время его нельзя изменить.

хорошо ... и если мне нужно импортировать 2 CSV по одному и тому же запросу и одно использование ';' в качестве разделителя, а другой использует ',' мне нужно использовать Config :: set 2 раза? нет другого выхода?

Да, два Config :: set должны работать.

Версия 3 будет поддерживать изменение разделителя после загрузки. Но мы еще не приблизились к релизу.

большое спасибо за быстрый ответ

Я использую laravel 4.2, поэтому разделитель по умолчанию не разделяет столбцы правильным образом, если один из столбцов пуст

В Laravel 4 вы можете установить разделитель на лету следующим образом:
Config::set('excel::csv.delimiter', '|');

Ссылка: https://laravel.com/docs/4.2/packages#package -configuration

зачем делать переопределение, все существует в config / Excel.php

'csv'        => array(
    /*
   |--------------------------------------------------------------------------
   | Delimiter
   |--------------------------------------------------------------------------
   |
   | The default delimiter which will be used to read out a CSV file
   |
   */

    'delimiter'   => ';',

    /*
    |--------------------------------------------------------------------------
    | Enclosure
    |--------------------------------------------------------------------------
    */

    'enclosure'   => '',

    /*
    |--------------------------------------------------------------------------
    | Line endings
    |--------------------------------------------------------------------------
    */

    'line_ending' => "\r\n",

    /*
    |--------------------------------------------------------------------------
    | setUseBom
    |--------------------------------------------------------------------------
    */

    'use_bom' => false
),

установить разделитель Над Excel :: load вот так. Его работа для меня на laravel 5.3

       Excel::setDelimiter('|');

Excel :: load ($ filename, function ($ reader) {

            foreach ($reader->toArray() as $row) {

                 $data[] = $row;
            }
              print_r($data);
        });

@medamineDev config / Excel.php предназначен для общего использования. Вы должны переопределить, когда система должна обрабатывать файлы с другим разделителем / разделителем.

Привет, как установить разделитель табулятора?

Попробуйте /t

@jediscript Спасибо, но / t не работает, говорит, что разделитель должен состоять из 1 символа.

@ yailperalta-santex какую проблему вы пытаетесь решить с помощью этой библиотеки? Возможно, вы можете вместо этого использовать http://php.net/manual/en/function.fgetcsv.php .

@ yailperalta-santex
Чтобы использовать разделитель табуляции в csv, вы должны установить его так: "\t"
он должен быть в двойных кавычках, а не в одинарных кавычках
поэтому конфигурация в config/excel.php будет такой
'delimiter' => "\t",

$ data = Excel :: setDelimiter ("t") -> load (storage_path (). '/ uploads / imports / data.csv') -> get ();

Была ли эта страница полезной?
0 / 5 - 0 рейтинги