Maatwerk Excel Laravel如何设置CSV导出delimeter?

dba5bblo  于 2023-01-22  发布在  其他
关注(0)|答案(4)|浏览(220)

您好,我正在使用Maatwerk Excel laravel包导出数据到XLSX和CSV。
在两个例子中,逗号是好的。
但现在我需要创建一个CSV,其中delimeter不是逗号,而是不同的东西(制表符或管道符号)。
我找不到设置位置。我尝试:

Config::set('Excel::csv.delimeter','|');

Excel::create('CSV Products', function($excel) use ($exports_arr) {
    $excel->setTitle('Products');
    $excel->setCreator('Me')->setCompany('My company');
    $excel->setDescription('Products');
    $excel->sheet('sheet1', function($sheet) use ($exports_arr) {
        $sheet->fromArray($exports_arr, null, 'A1', false, false);
    });
})->download('csv');

但是如果我查看config/Excel.php文件,注解表明这个delimeter仅供阅读。
是否有可能更改导出CSV文件的分隔符?
先谢了。

vxqlmq5t

vxqlmq5t1#

注解指出excel.csv.delimiter用于读取csv文件,但在Writers/LaravelExcelWriter.php(第578行)中,CSV分隔符取自配置,默认设置为,
$this->writer->setDelimiter(config('excel.csv.delimiter', ','));
您确定Config::set语句工作正常吗?
尝试使用:
Config::set('excel.csv.delimeter','|');
并使用检查值
Config::get('excel.csv.delimeter');
更新:
this答案中所述,服务提供程序在请求发生之前注册。在请求期间更新配置键不会影响Maatwerk/Excel先前读取的值。答案中给出了一个解决方案,即创建一个延迟提供程序。

z9zf31ra

z9zf31ra2#

我知道这有点过时,但我最近也遇到了同样的问题。
为了在导出多个CSV文件时设置自定义分隔符,您可以创建use Maatwebsite\Excel\Excel类的新示例,而不使用外观。
试试这个:

use Maatwebsite\Excel\Excel;
use Maatwebsite\Excel\Writer; 
use Maatwebsite\Excel\QueuedWriter; 
use Maatwebsite\Excel\Reader; 

...

$reader = new Reader(app()->make('filesystem'));    
$writer = new Writer; 
$queued_writer = new QueuedWriter($writer); 

$writer->setDelimiter('|');

$excel = new Excel($writer, $queued_writer, $reader, app()->make('filesystem'));
$excel->create( ... );
owfi6suc

owfi6suc3#

关于这一问题的最新情况:如果您使用的是Laravel Excel 3,您可以在config/excel. php文件中设置它:

return [
   'exports' => [
        'csv' => [
            'delimiter' => '|',
        ]
   ]
]

或者,如果要动态设置它:

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

x7rlezfr4#

use Maatwebsite\Excel\Concerns\WithCustomCsvSettings;
use Maatwebsite\Excel\Concerns\WithCustomQuerySize;

class MyExportClass implements FromView, WithCustomQuerySize, WithCustomCsvSettings
{
    use Exportable;

 
    public string $filePath;
    public string $disk;

    public function getCsvSettings(): array
    {
        return [
            'delimiter' => ",",
        ];
    }
....
}

来自文件:在此输入链接说明

相关问题