Laravel-excel: Delimitador CSV

Creado en 15 oct. 2014  ·  26Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

Al crear una clase personalizada:

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

Y usando:

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

no se respeta la configuración del delimitador

Comentario más útil

@ yailperalta-santex
Para usar el delimitador de tabulación en csv, debe configurarlo así "\t"
debe estar entre comillas dobles, no comillas simples
por lo que la configuración en config/excel.php será así
'delimiter' => "\t",

Todos 26 comentarios

Estás mezclando dos cosas: inyecciones de archivos y fachadas.

Está ampliando la clase de fachada, que no tiene la propiedad $ delimiter.

Lo que quieres hacer es algo como:

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();
    }
}

Si los documentos son confusos sobre esto, avíseme o haga una solicitud de extracción para los documentos :)

Documentos sobre inyecciones de archivos: http://www.maatwebsite.nl/laravel-excel/docs/import#injection

Cómo configurar delimitador para CSV sobre la marcha. En realidad, estoy usando la función "Excel :: load" en mi controlador que extiende BaseController. Tuve éxito al cargar .XLS, .XLSX y CSV con la configuración defsult como se menciona en el archivo de configuración csv.php. Pero el problema es que tengo que tomar User INput para el delimitador, ya que la entrada puede ser Pipesign, Tab, etc. Entonces, ¿cómo hacerlo? Por favor ayuda.

Puede usar métodos como setDelimiter() para anular la configuración de configuración. Ver: https://github.com/Maatwebsite/Laravel-Excel/blob/master/src/Maatwebsite/Excel/Readers/LaravelExcelReader.php#L271

está bien. He usado :
$ resultados = Excel :: load ('uploads /'. $ nombre de archivo, función ($ lector) {

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

pero está leyendo todos los valores en una sola columna ya que no tiene "Delimitador de tubería". Por favor ayuda.

Estoy teniendo el mismo problema. Usando Laravel 4. Aquí está el código de mi controlador:

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

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

La salida no se divide en el separador de tuberías, sino que se trata como una cadena larga. He aquí una muestra:

    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||
                        )

                )
)

¿Estoy haciendo algo mal aquí? ¿Por qué no se analizan las filas en el carácter de barra vertical?

Si cambio la configuración delimiter en config/csv.php , el archivo se analiza correctamente. ¿Por qué no funciona con el método setDelimiter() ?

Tienes que cambiar el delimitador antes de que se cargue el archivo:

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

Gracias por la ayuda, pero esto ahora está dando un error:

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

El error está en Shared / String.php. ¿Está relacionado de alguna manera con esto?

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

¿Qué pasa si intentas configurarlo sobre la marcha con:

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

Funciona (Laravel 5.1):

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

ok, de esta manera funciona, pero ¿por qué no funciona de esta manera?

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

Debido a que el archivo ya está cargado, no se puede cambiar más actualmente.

bien ... y si necesito importar 2 csv en la misma solicitud, y un uso ';' como delimitador y otros usos ',' necesito usar Config :: set 2 veces? ¿no hay otra manera?

Sí, dos Config :: set deberían funcionar.

La versión 3 tendrá soporte para cambiar el delimitador después de la carga. Pero aún no estamos cerca de un lanzamiento.

muchas gracias por la rápida respuesta

Estoy usando laravel 4.2, por lo que el delimitador predeterminado no separa las columnas de la manera correcta si una de las columnas está vacía

En Laravel 4, puede establecer el delimitador sobre la marcha con esto:
Config::set('excel::csv.delimiter', '|');

Ref: https://laravel.com/docs/4.2/packages#package -configuration

por qué hacer override, todo existe en 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
),

establecer delimitador encima de Excel :: cargar así. Su trabajo para mí en laravel 5.3

       Excel::setDelimiter('|');

Excel :: load ($ nombre de archivo, función ($ lector) {

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

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

@medamineDev config / Excel.php es para uso general. Tiene que anular cuando el sistema tiene que procesar archivos que tienen un separador / delimitador diferente.

Hola, ¿cómo configurar el delimitador del tabulador?

Prueba /t

@jediscript Gracias pero / t no funciona, dice que el delimitador debe ser de 1 carácter.

@ yailperalta-santex ¿qué problema estás tratando de resolver con esta biblioteca? Quizás puedas usar http://php.net/manual/en/function.fgetcsv.php en su lugar.

@ yailperalta-santex
Para usar el delimitador de tabulación en csv, debe configurarlo así "\t"
debe estar entre comillas dobles, no comillas simples
por lo que la configuración en config/excel.php será así
'delimiter' => "\t",

$ datos = Excel :: setDelimiter ("t") -> cargar (ruta_almacenamiento (). '/ uploads / import / data.csv') -> get ();

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

rossjcooper picture rossjcooper  ·  3Comentarios

alejandri picture alejandri  ·  3Comentarios

matthewslouismarie picture matthewslouismarie  ·  3Comentarios

bahmanyaghoobi picture bahmanyaghoobi  ·  3Comentarios

pamekar picture pamekar  ·  3Comentarios