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()
// {
//
// }
}
用xlswriter ,也可以具体分析一下查询语句
之前用 PHPExcel 也遇到过,我们的订单号有些是纯数字的,超过了 12 位,导出 Excel 文件后,打开会被渲染成科学计数法,现在也没搞明白如何处理。
科学计数 在数据最左边加一个 ` 号
用 csv,算完结果直接弹框,在下载那里等一分钟和在页面卡一分钟都是一分钟,但是效果差距很大。
可以试试这个 博客:laravel扩展:xlswriter导出,自定义复杂合并及样式
数据为字符串的话,会自动设置为文本类型,不用拼接\t或者空格