カスタムクラスを作成する場合:
class CSVExcel extends Excel {
protected $delimiter = ';';
}
そして使用する:
CSVExcel::load('file.csv')->export('xls');
区切り文字の設定は尊重されません
ファイルインジェクションとファサードの2つを混ぜ合わせています。
$ 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();
}
}
ドキュメントがこれについて混乱している場合は、私に知らせてください、またはドキュメントのプルリクエストを行ってください:)
ファイルインジェクションに関するドキュメント: http :
その場でCSVの区切り文字を設定する方法。 実際、私はBaseControllerを拡張するコントローラーで「Excel :: load」関数を使用しています。 csv.php構成ファイルに記載されているように、defsult設定で.XLS、.XLSX、およびCSVをロードすることに成功しました。 しかし、問題は、入力がパイプサイン、タブなどである可能性があるように、区切り文字にユーザー入力を使用する必要があることです。 助けてください。
setDelimiter()
などのメソッドを使用して、構成設定をオーバーライドできます。 参照: https :
わかった。 利用した :
$ results = Excel :: load( 'uploads/'。$filename、function($ reader){
})->setDelimiter("|")->get();
ただし、「パイプ区切り文字」を使用していないため、すべての値を1列で読み取っています。 助けてください。
私は同じ問題を抱えています。 Laravel4の使用。これが私のコントローラーからのコードです。
public function uploadData()
{
$file = Input::file('data')->getRealPath();
\Excel::load($file, function($reader) {
echo "<pre>";
$reader->setDelimiter('|');
print_r($reader->get());
});
}
出力はパイプ区切り文字で分割されず、代わりに1つの長い文字列として扱われます。 サンプルは次のとおりです。
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をインポートする必要がある場合、1つは「;」を使用します区切り文字として、そして別の用途として '、' Config :: setを2回使用する必要がありますか? 他に方法はありませんか?
ええ、2つのConfig :: setが機能するはずです。
バージョン3は、ロード後に区切り文字を変更するためのサポートがあります。 しかし、まだリリースに近づいていません。
迅速な返信ありがとうございます
私はlaravel4.2を使用しているので、列の1つが空の場合、デフォルトの区切り文字は列を正しい方法で分離しません
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の上に区切り文字を設定します。 Laravel5.3での私のための仕事
Excel::setDelimiter('|');
Excel :: load($ filename、function($ 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 = Excel :: setDelimiter( "t")-> load(storage_path()。 '/ uploads / imports / data.csv')-> get();
最も参考になるコメント
@ yailperalta-santex
csvでタブ区切り文字を使用するには、次のように設定する必要があります
"\t"
一重引用符ではなく二重引用符で囲む必要があります
したがって、
config/excel.php
構成は次のようになります'delimiter' => "\t",