laravel-admin自定义导出excel文件(xls)贼慢如何解决?

最近使用 laravel-admin,但是 laravel-admin 自带的导出功能,导出 excel 后,数据表中的某个字段具有长数字的值会被自动转为科学计数很烦,加了 \t 之后,导出来的 excel 虽然不显示科学计数了,但是那一列的数据会有空格和引号。查了好多方法,但是好像都不管用。为了去掉引号,于是只好自定义导出 excel 了,但是自定义 excel 导出才 9000 条数据,而且数据的内容都很小,但是耗时却很长要一分多钟,有没有什么办法可以改进啊

<?php

namespace App\Admin\Extensions;

use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use PhpOffice\PhpSpreadsheet\Cell\DataType;



class ShopLogExporter  extends  ExcelExporter  implements  WithMapping,WithHeadings,WithColumnFormatting
{
    protected $fileName = 'ShopLog.xls';
    public function map($rows): array
    {
        return [
            date('Y-m-d H:i:s', strtotime($rows->DATE)),
            $rows->NO_USER
            $rows->ID_USER,
            $rows->No_Name,
            data_get($rows,'GoodCode.Code'),
            $rows->NO_GOOD,
            data_get($rows,'Good.owner'),
            $rows->PAY,
        ];
    }

    public function headings(): array
    {
        return [
            '日期' ,
            '用户编号' ,
            '用户名' ,
            '商品编号',
            '商品名称',
            '商品单价',
            '商品数量',
            '商品总价',
        ];
    }
    public function columnFormats(): array
    {
        return [
            'C' => DataType::TYPE_STRING,
        ];
    }
//    public function bindValue(CeLL $cell, $value)
//    {
//        $column = $cell->getColumn();
//        if (in_array( $column, ['D','F', 'G','I','J','K'])) {
//            $cell->setValueExplicit($value, DataType::TYPE_STRING);
//            return true;
//        }
//        return parent::bindValue($cell, $value);
//    }
//    public function export()
//    {
//
//    }

}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 10

xlswriter ,也可以具体分析一下查询语句

10个月前 评论
蜗牛啊蜗牛 (楼主) 9个月前

之前用 PHPExcel 也遇到过,我们的订单号有些是纯数字的,超过了 12 位,导出 Excel 文件后,打开会被渲染成科学计数法,现在也没搞明白如何处理。

10个月前 评论
xuchunyang (作者) 10个月前
xuchunyang (作者) 10个月前

科学计数 在数据最左边加一个 ` 号

10个月前 评论
蜗牛啊蜗牛 (楼主) 9个月前

用 csv,算完结果直接弹框,在下载那里等一分钟和在页面卡一分钟都是一分钟,但是效果差距很大。

10个月前 评论
DogLoML

可以试试这个 博客:laravel扩展:xlswriter导出,自定义复杂合并及样式
数据为字符串的话,会自动设置为文本类型,不用拼接\t或者空格

9个月前 评论

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