You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Laravel maatwebsite导出CSV时跳过Blade模板空白td的问题

解决方案

你可以按以下步骤调整配置和代码解决空白列被跳过的问题:

  1. 修改Blade模板空白单元格内容
    完全为空的<td>标签会被maatwebsite的解析器识别为无内容节点直接跳过,你可以将三个空白td改为填充不可见空白占位符,代码如下:
<td>&nbsp;</td>        
<td>&nbsp;</td>        
<td>&nbsp;</td>

如果你不想使用&nbsp;,也可以直接输出空字符串{{ '' }},确保td节点内有明确的内容值。

  1. 调整CSV导出配置
    你当前配置中CSV的enclosure参数设为空值,会导致空字段无法被正确识别分隔,修改config/excel.php中的对应配置:
'csv' => [
    'delimiter'              => ';',
    'enclosure'              => '"', // 改为双引号作为字段包裹符
    'line_ending'            => PHP_EOL,
    'use_bom'                => false,
    'include_separator_line' => false,
    'excel_compatibility'    => false,
],
  1. (可选)改用更稳定的导出方式
    如果调整后仍有问题,可以放弃FromView方式,改用FromCollection + WithMapping手动控制每一列的输出,完全避免HTML解析带来的异常,示例代码如下:
// 修改ReportExport类
namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;

class ReportExport implements FromCollection, WithMapping, WithStrictNullComparison
{
    private $data;
    public function __construct($data)
    {
        $this->data = $data;
    }

    public function collection()
    {
        return collect($this->data);
    }

    public function map($row): array
    {
        return [
            $row['sapNo'],
            $row['month'],
            1110,
            $row['totalHours'],
            $row['netPricePerHour'],
            '', // 空白列1
            '', // 空白列2
            '', // 空白列3
        ];
    }
}

该方式可以100%保证列的数量和定义的一致,不会出现漏列的问题。

内容的提问来源于stack exchange,提问作者Deekshith S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:36:04