0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelでなるべく楽にcsvを扱う

0
Last updated at Posted at 2019-04-02

前提

  • csv扱うの面倒なのでなるべく楽したい(SJISとか特に)
  • Laravel5.5(PHP7.2)の環境が構築済み

操作

usmanhalalit/laracsvを使う。
このままだとUTF-8しか対応していなので、継承して少し修正する。

まず

composer require usmanhalalit/laracsv:^2.0

完了したらば下記のクラス・コードを適当なところに追加する


<?php

namespace App\HogeService;

use SplTempFileObject;
use Laracsv\Export;
use League\Csv\Writer;
use League\Csv\CharsetConverter;

/**
 * 
 */
class HogeCsvExport extends Export
{

    /**
     *
     * @return void
     */
    public function __construct()
    {
        $encoder = (new CharsetConverter())->outputEncoding('SJIS');

        $writerObject = Writer::createFromFileObject(new SplTempFileObject)->setNewline("\r\n");

        $this->csv = $writerObject->addFormatter($encoder);
    }

}

namespace App\HogeServiceHogeCsvExport
は任意の名称で。

(new CharsetConverter())->outputEncoding('SJIS');
Writer::createFromFileObject(new SplTempFileObject)->setNewline("\r\n")
で任意の文字コードと改行コードを設定する。

柔軟性をもたせるなら、__constructの引数に文字コードと改行コードを設定すれば良いかな?


    /**
     *
     * @return void
     */
    public function __construct(string $encoding, string $newLine)
    {
        $encoder = (new CharsetConverter())->outputEncoding($encoding);

        $writerObject = Writer::createFromFileObject(new SplTempFileObject)->setNewline($newLine);

        $this->csv = $writerObject->addFormatter($encoder);
    }

入力の文字コードも変更したい場合はinputEncodingを使えば良い。
詳しくはusmanhalalit/laracsvの関連ソースコードを参照ください。

$encoder = (new CharsetConverter())->inputEncoding('SJIS');

参照

usmanhalalit/laracsv
League\Csv

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?