Laravel-excel: CSV-Trennzeichen

Erstellt am 15. Okt. 2014  ·  26Kommentare  ·  Quelle: Maatwebsite/Laravel-Excel

Beim Erstellen einer benutzerdefinierten Klasse:

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

Und verwenden:

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

Trennzeicheneinstellung wird nicht beachtet

Hilfreichster Kommentar

@yailperalta-santex
Um Tabstopp-Trennzeichen in csv zu verwenden, müssen Sie es wie folgt einstellen "\t"
Es muss in doppelten Anführungszeichen stehen, nicht in einfachen Anführungszeichen
die Konfiguration in config/excel.php wird also so sein
'delimiter' => "\t",

Alle 26 Kommentare

Sie verwechseln zwei Dinge: Akteneinspritzungen und Fassaden.

Sie erweitern die Fassadenklasse, die nicht über die Eigenschaft $delimiter verfügt.

Was Sie tun möchten, ist etwa:

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

Wenn die Dokumente diesbezüglich verwirrend waren, lassen Sie es mich bitte wissen oder stellen Sie eine Pull-Anfrage für die Dokumente :)

Dokumente zu Dateiinjektionen: http://www.maatwebsite.nl/laravel-excel/docs/import#injection

So legen Sie das Trennzeichen für CSV im Handumdrehen fest. Tatsächlich verwende ich die Funktion "Excel::load" in meinem Controller, die BaseController erweitert. Ich habe Erfolg beim Laden von .XLS, .XLSX und CSV mit der Standardeinstellung, wie in der Konfigurationsdatei csv.php erwähnt. Aber das Problem ist, dass ich die Benutzereingabe als Trennzeichen verwenden muss, da die Eingabe Pipesign, Tab usw. sein kann. Bitte helfen Sie.

Sie können Methoden wie setDelimiter() , um die Konfigurationseinstellungen zu überschreiben. Siehe: https://github.com/Maatwebsite/Laravel-Excel/blob/master/src/Maatwebsite/Excel/Readers/LaravelExcelReader.php#L271

OK. Ich habe benutzt :
$results = Excel::load('uploads/' . $filename, function($reader) {

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

aber es liest alle Werte in einer einzelnen Spalte, da es kein "Pipe Delimiter" benötigt. Bitte helfen Sie.

Ich habe das gleiche Problem. Verwenden von Laravel 4. Hier ist der Code von meinem Controller:

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

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

Die Ausgabe wird nicht auf dem Rohrtrenner aufgeteilt, sondern als eine lange Zeichenfolge behandelt. Hier ist ein Beispiel:

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

                )
)

Mache ich hier etwas falsch? Warum werden die Zeilen nicht auf das Pipe-Zeichen geparst?

Wenn ich die Einstellung delimiter in config/csv.php ändere, wird die Datei korrekt geparst. Warum funktioniert es nicht mit der Methode setDelimiter() ?

Sie müssen das Trennzeichen ändern, bevor die Datei geladen wird:

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

Danke für die Hilfe, aber jetzt gibt es einen Fehler:

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

Der Fehler liegt in Shared/String.php. Hängt das irgendwie damit zusammen?

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

Was ist, wenn Sie versuchen, es im Handumdrehen einzustellen mit:

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

Es funktioniert (Laravel 5.1):

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

ok dieser Weg funktioniert, aber warum funktioniert dieser Weg nicht?

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

Da die Datei bereits geladen ist, kann sie derzeit nicht mehr geändert werden.

fein ... und wenn ich 2 csv auf die gleiche Anfrage importieren muss und eine verwende ';' als Trennzeichen und ein anderes verwendet ',' muss ich Config::set 2 Mal verwenden? Es gibt keinen anderen Weg?

Ja, zwei Config::sets sollten funktionieren.

Version 3 unterstützt das Ändern des Trennzeichens nach dem Laden. Aber wir sind noch lange nicht in der Nähe einer Veröffentlichung.

sehr danke für schnelle antwort

Ich verwende Laravel 4.2, daher trennt das Standardtrennzeichen die Spalten nicht richtig, wenn eine der Spalten leer ist

In Laravel 4 können Sie das Trennzeichen im Handumdrehen folgendermaßen festlegen:
Config::set('excel::csv.delimiter', '|');

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

warum überschreiben, alles existiert in 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
),

Trennzeichen setzen Oben Excel :: so laden . Es funktioniert für mich auf Laravel 5.3

       Excel::setDelimiter('|');

Excel::load($Dateiname, Funktion ($Reader) {

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

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

@medamineDev config/Excel.php ist für den allgemeinen Gebrauch. Sie müssen überschreiben, wenn das System Dateien verarbeiten muss, die ein anderes Trennzeichen/Trennzeichen haben.

Hallo, wie stelle ich das Tabulator-Trennzeichen ein?

Versuchen Sie es mit /t

@jediscript Danke, aber /t funktioniert nicht, sagt, dass das Trennzeichen 1 Zeichen sein muss.

@yailperalta-santex welches Problem versuchen Sie mit dieser Bibliothek zu lösen? Vielleicht können Sie stattdessen http://php.net/manual/en/function.fgetcsv.php verwenden.

@yailperalta-santex
Um Tabstopp-Trennzeichen in csv zu verwenden, müssen Sie es wie folgt einstellen "\t"
Es muss in doppelten Anführungszeichen stehen, nicht in einfachen Anführungszeichen
die Konfiguration in config/excel.php wird also so sein
'delimiter' => "\t",

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen