Laravel-Excel 导出内容部分缺失

1. 运行环境

1). 当前使用的 Laravel 版本?

Laravel Framework 8.83.27

2). 当前使用的 php/php-fpm 版本?

PHP 版本:
PHP 8.1.25 (cli) (built: Nov 21 2023 15:49:45) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.25, Copyright (c) Zend Technologies
with Zend OPcache v8.1.25, Copyright (c), by Zend Technologies
with Xdebug v3.3.0, Copyright (c) 2002-2023, by Derick Rethans

php-fpm 版本:8.1.25

3). 当前系统

Windows 10 + docker

4). 业务环境

开发环境

5). 相关软件版本

maatwebsite/excel 3.1.55

2. 问题描述?

使用laravel-excel进行数据导出时候,将一个9000+行的文件,拆分为多个xls进行导出。出现部分单元格的内容丢失的问题

// $chunk 为切分后的数据
Excel::store(
    new class($chunk, $header) implements FromCollection, WithHeadings, WithMapping {

        public function __construct(private $chunk, private $header)
        {
        }

        public function collection()
        {
            return new Collection($this->chunk);
        }

        public function headings(): array
        {
            return $this->header;
        }

        public function map($row): array
        {
            if ($row[12] == '683009369') {
                dump($row);
            }
            return $row;
        }

    },
    $fileName,
    'local',
    \Maatwebsite\Excel\Excel::XLS
);

3. 您期望得到的结果?

实际上是有内容的(不止这一行,比较多的都有这个问题)

Laravel-Excel 导出内容部分缺失

4. 您实际得到的结果?

Laravel-Excel 导出内容部分缺失

比较费解,不知道是什么原因导致的。曾经在线上使用 ext-xlswriter 拓展,导出 xlsx 文件时候,也有出现过数据丢失的问题,有其他人遇到过这种情况吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 6

导出excel的部分应该不会有丢失数据的问题,是否需要排查一下,在你拆分数据的时候就丢失了。

2个月前 评论
JobinLi (楼主) 2个月前

看下文档里有设置列的格式的 设置成 文本格式就可以了

2个月前 评论
JobinLi (楼主) 2个月前

对应实现设置格式的代码

public function columnFormats(): array
{
    $formats = [];
    foreach ($this->header as $key => $name) {
        $column = Coordinate::stringFromColumnIndex($key);
        if (in_array($name, ['进货价', '销售价', '会员价', '库存'], true)) {
            $formats[$column] = NumberFormat::FORMAT_NUMBER;
        } else {
            $formats[$column] = NumberFormat::FORMAT_TEXT;
        }
    }
    return $formats;
}

如果使用错误,还望帮忙指引下对应正确的方式文档链接

2个月前 评论

直接梭哈,全部加个空格连接~

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!