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 文件时候,也有出现过数据丢失的问题,有其他人遇到过这种情况吗?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

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

1年前 评论
JobinLi (楼主) 11个月前

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

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

对应实现设置格式的代码

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;
}

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

11个月前 评论

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

11个月前 评论

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