Laravel-excel: Pembatas CSV

Dibuat pada 15 Okt 2014  ·  26Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

Saat membuat kelas khusus:

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

Dan menggunakan:

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

pengaturan pembatas tidak dihormati

Komentar yang paling membantu

@yailperalta-santex
Untuk menggunakan pembatas tab di csv Anda harus mengaturnya seperti ini "\t"
itu harus dalam tanda kutip ganda bukan tanda kutip tunggal
jadi konfigurasi di config/excel.php akan seperti ini
'delimiter' => "\t",

Semua 26 komentar

Anda mencampur dua hal: Injeksi file dan Fasad.

Anda memperluas kelas fasad, yang tidak memiliki properti $delimiter.

Apa yang ingin Anda lakukan adalah sesuatu seperti:

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

Jika dokumen membingungkan tentang ini, beri tahu saya atau buat permintaan tarik untuk dokumen :)

Dokumen tentang Injeksi File: http://www.maatwebsite.nl/laravel-excel/docs/import#injection

Cara mengatur Pembatas untuk CSV dengan cepat. Sebenarnya saya menggunakan fungsi "Excel::load" di Controller saya yang memperluas BaseController. Saya telah berhasil memuat .XLS, .XLSX dan CSV dengan pengaturan defsult seperti yang disebutkan dalam file konfigurasi csv.php. Tapi masalahnya saya harus mengambil User INput untuk pembatas seperti input bisa Pipesign, Tab dll. JADI bagaimana caranya? Tolong bantu.

Anda dapat menggunakan metode seperti setDelimiter() untuk mengganti pengaturan konfigurasi. Lihat: https://github.com/Maatwebsite/Laravel-Excel/blob/master/src/Maatwebsite/Excel/Readers/LaravelExcelReader.php#L271

oke. Saya telah menggunakan:
$results = Excel::load('uploads/' . $filename, function($reader) {

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

tetapi membaca semua nilai dalam satu kolom karena tidak menggunakan "Pembatas Pipa". Tolong bantu.

Saya mempunyai masalah yang sama. Menggunakan Laravel 4. Berikut kode dari controller saya:

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

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

Outputnya tidak dibagi pada pemisah pipa, melainkan diperlakukan sebagai satu string panjang. Berikut ini contoh:

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

                )
)

Apakah saya melakukan sesuatu yang salah di sini? Mengapa baris tidak diuraikan pada karakter pipa?

Jika saya mengubah pengaturan delimiter di config/csv.php , file diuraikan dengan benar. Mengapa tidak bekerja menggunakan metode setDelimiter() ?

Anda harus mengubah pembatas sebelum file dimuat:

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

Terima kasih atas bantuannya, tetapi ini sekarang memberikan kesalahan:

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

Kesalahan ada di Shared/String.php. Apakah itu entah bagaimana terkait dengan ini?

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

Bagaimana jika Anda mencoba mengaturnya dengan cepat dengan:

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

Ini berfungsi (Laravel 5.1):

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

ok cara ini berhasil, tetapi mengapa cara ini tidak berhasil?

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

Karena file sudah dimuat, jadi tidak bisa diubah lagi saat ini.

baik... dan jika saya perlu mengimpor 2 csv pada permintaan yang sama, dan satu menggunakan ';' sebagai pembatas dan penggunaan lain ',' saya perlu menggunakan Config::set 2 kali? tidak ada jalan lain?

Ya, dua Config::set seharusnya berfungsi.

Versi 3 akan memiliki dukungan untuk mengubah pembatas setelah dimuat. Tapi kami belum mendekati rilis.

sangat terima kasih atas balasan cepat

Saya menggunakan laravel 4.2, jadi pembatas default tidak memisahkan kolom dengan cara yang benar jika salah satu kolom kosong

Di Laravel 4, Anda dapat mengatur pembatas dengan cepat dengan ini:
Config::set('excel::csv.delimiter', '|');

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

mengapa melakukan override , semuanya ada di 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
),

atur pembatas Di atas Excel::load seperti ini. Ini berfungsi untuk saya di laravel 5.3

       Excel::setDelimiter('|');

Excel::load($nama file, fungsi ($pembaca) {

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

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

@medamineDev config/Excel.php adalah untuk penggunaan umum. Anda harus melakukan override ketika sistem harus memproses file yang memiliki separator/delimiter yang berbeda.

Hai, bagaimana cara mengatur pembatas tabulator?

Coba /t

@jediscript Terima kasih tetapi /t tidak berfungsi, mengatakan bahwa pembatas harus 1 karakter.

@yailperalta-santex masalah apa yang Anda coba selesaikan dengan perpustakaan ini? Mungkin Anda bisa menggunakan http://php.net/manual/en/function.fgetcsv.php sebagai gantinya.

@yailperalta-santex
Untuk menggunakan pembatas tab di csv Anda harus mengaturnya seperti ini "\t"
itu harus dalam tanda kutip ganda bukan tanda kutip tunggal
jadi konfigurasi di config/excel.php akan seperti ini
'delimiter' => "\t",

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat