【问题标题】:How to remove double quotations from exported csv file如何从导出的 csv 文件中删除双引号
【发布时间】:2021-12-16 00:04:33
【问题描述】:

我使用的是 Laravel 5.8,并添加了 Maatwebsite 包,用于从数据库表中导出 CSV 文件。

这是我导出的类:

class ConfirmedExport implements FromCollection, WithHeadings
{
    public function headings():array{
        return [
   
        ];
    }

    public function collection()
    {
        return collect(WithdrawWallet::getData());
    }
}

结果如下:

"123456789","2100","Desc","lname","fname"

但是我需要从单词中删除双引号(" "),所以预期的结果是这样的:

123456789,2100,Desc,lname,fname

那该怎么做呢?


更新 #1:

我刚刚为导出类尝试了这段代码:

namespace App\Exports;

use App\WithdrawWallet;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class ConfirmedExport implements FromCollection, WithHeadings
{
    public function headings():array{
        return [
   
        ];
    }

    public function collection()
    {
        return collect(WithdrawWallet::getData());
    }
    
    public function getCsvSettings(): array
    {
        return [
            'enclosure' => ''
        ];
    }
}

它成功地从最后一个元素(即:123456789)中删除了" ",但仍然为其他元素显示" "

【问题讨论】:

  • str_replace('"','',$csvstr)?
  • @ProfessorAbronsius 我刚刚使用str_replace('"','',$csvstr) 添加了我的控制器方法,但仍然无法正常工作,并在下载的文件中显示双引号
  • 我使用变量$csvstr 来表示文件的内容,而这里您使用它作为文件名
  • @ProfessorAbronsius 那么如何正确使用文件内容呢?
  • 为什么你“需要”完全删除引号?它们在 CSV 文件中完全有效 - 有时是必要的,例如,如果它们包含的值包含逗号。

标签: php laravel laravel-5.8 maatwebsite-excel laravel-excel


【解决方案1】:

@nagidi 发布配置后,您可以在设置中进行更改。

  1. 运行以下命令:

    php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
    
  2. config/excel.php 中的“附件”中删除"(双引号)

     'exports' => [
         'csv' => [
             'enclosure' => '', // was '"'
             // other settings
         ],
     ],
    

现在您的 csv 导出值不再包含 " 附件。

如果您想在每次导出时更改此设置,您可以实现 WithCustomCsvSettings 关注并将 getCsvSettings 方法添加到您的 ConfirmedExport 类中:

use Maatwebsite\Excel\Concerns\WithCustomCsvSettings;

class ConfirmedExport implements WithCustomCsvSettings
{
    // other code

    public function getCsvSettings(): array
    {
        return [
            'enclosure' => ''
        ];
    }
}

【讨论】:

  • 谢谢你,但我也用这个导出 CSV 来处理其他文件,他们确实需要 enclosure'"'
  • 有什么办法可以优化它,所以如果请求来自ConfirmedExport类,则不需要enclosure,否则必须使用enclosure
  • @nagidi 我已经更新了我的答案,这就是你要找的:)
  • @nagidi 解决了你的问题吗?
  • 我刚试了你说的,它成功地从最后一个元素(即:123456789)中删除了" ",但仍然为其他元素显示" "!跨度>
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2014-05-05
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2014-02-24
相关资源
最近更新 更多