如何解决Laravel maatwebsite导出CSV时跳过Blade模板空白td的问题
解决方案
你可以按以下步骤调整配置和代码解决空白列被跳过的问题:
- 修改Blade模板空白单元格内容
完全为空的<td>标签会被maatwebsite的解析器识别为无内容节点直接跳过,你可以将三个空白td改为填充不可见空白占位符,代码如下:
<td> </td> <td> </td> <td> </td>
如果你不想使用 ,也可以直接输出空字符串{{ '' }},确保td节点内有明确的内容值。
- 调整CSV导出配置
你当前配置中CSV的enclosure参数设为空值,会导致空字段无法被正确识别分隔,修改config/excel.php中的对应配置:
'csv' => [ 'delimiter' => ';', 'enclosure' => '"', // 改为双引号作为字段包裹符 'line_ending' => PHP_EOL, 'use_bom' => false, 'include_separator_line' => false, 'excel_compatibility' => false, ],
- (可选)改用更稳定的导出方式
如果调整后仍有问题,可以放弃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
相关产品推荐
相关产品推荐

