Laravel-excel: CSV ๊ตฌ๋ถ„ ๊ธฐํ˜ธ

์— ๋งŒ๋“  2014๋…„ 10์›” 15์ผ  ยท  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();
    }
}

๋ฌธ์„œ๊ฐ€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๋ฉด ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜ ๋ฌธ์„œ์— ๋Œ€ํ•œ pull-request๋ฅผ ๋งŒ๋“œ์‹ญ์‹œ์˜ค :)

ํŒŒ์ผ ์ฃผ์ž…์— ๋Œ€ํ•œ ๋ฌธ์„œ: http://www.maatwebsite.nl/laravel-excel/docs/import#injection

CSV์— ๋Œ€ํ•œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋ฅผ ์ฆ‰์„์—์„œ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•. ์‹ค์ œ๋กœ BaseController๋ฅผ ํ™•์žฅํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ "Excel::load" ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. csv.php ๊ตฌ์„ฑ ํŒŒ์ผ์— ์–ธ๊ธ‰๋œ ๋Œ€๋กœ defsult ์„ค์ •์œผ๋กœ .XLS, .XLSX ๋ฐ CSV๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋Š” ์ž…๋ ฅ์ด Pipesign, Tab ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ์— ๋Œ€ํ•ด User INput์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋„์™€์ฃผ์„ธ์š”.

setDelimiter() ์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ์„ค์ •์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ์กฐ: https://github.com/Maatwebsite/Laravel-Excel/blob/master/src/Maatwebsite/Excel/Readers/LaravelExcelReader.php#L271

์ข‹์•„์š”. ๋‚˜๋Š” ์‚ฌ์šฉํ–ˆ๋‹ค :
$results = Excel::load('์—…๋กœ๋“œ/' . $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||
                        )

                )
)

๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ดํ”„ ๋ฌธ์ž์—์„œ ํ–‰์ด ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

config/csv.php ์—์„œ delimiter ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ฉด ํŒŒ์ผ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„๋ฉ๋‹ˆ๋‹ค. 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, ํ•จ์ˆ˜($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 = ์—‘์…€::setDelimiter("t")->load(storage_path().'/uploads/imports/data.csv')->get();

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰