maatwebsite/excel 3.0以上导出解决身份证号码等长数字显示科学计算法

作者:admin - 2020年04月17日

本内容是根据官方文档理解测试记录,如有问题可以直接访问官方文档地址。


由于身份证号码,银行卡号,导出自动转换成了科学计数法,搜索了一些内容,都是一些说前面加逗号,或等号,或其他来,限定列内容。感觉还是挺不靠谱,所有通过查看官方文档,找到解决方法。


在使用导出excel时,设置了列格式还是无法解决身份证自动变更为数字科学计算法。通过查看官方文档,有自定义格式列的方法,测试效果可以实现。


方法一:检查列的格式

通过继承DefaultValueBinder类,重写bindValue列的格式判断,但如果列内容为数字,并且长度大于或等于10,将该列定义为字符串文本列。

namespace App\Exports;

use PhpOffice\PhpSpreadsheet\Cell\Cell;
use Maatwebsite\Excel\Concerns\ToModel;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;

class UsersExport extends DefaultValueBinder implements WithCustomValueBinder
{
    public function bindValue(Cell $cell, $value)
    {
        if (is_numeric($value) && strlen ($value) >= 10) {
            $cell->setValueExplicit($value, DataType::TYPE_NUMERIC);

            return true;
        }

        // else return default behavior
        return parent::bindValue($cell, $value);
    }
}

方法二:所有列定义为字符串文本列

继承StringValueBinder类,说明将本次导出excel的所有列都定义为字符串文本列,无需重写bindValue方法。

namespace App\Exports;

use Maatwebsite\Excel\Concerns\WithCustomValueBinder;

class UsersExport extends \PhpOffice\PhpSpreadsheet\Cell\StringValueBinder implements WithCustomValueBinder
{

}

方法三:配置定义默认导出都是文本列

在config/excel.php配置文件中,找到如下参数并修改,即将默认的列格式处理,都定义成以字符串文本格式。

'value_binder' => [
    'default' => Maatwebsite\Excel\DefaultValueBinder::class,
    ],

将default改成

PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class


设置格式化列,liunx下无效

设置格式化列,按理可以自动将列设置成文本列。测试效果不行,在window环境下可以自动正常变成文本列,但在liunx环境下无效,仍然显示数字科学计算法。

namespace App\Exports;

use PhpOffice\PhpSpreadsheet\Shared\Date;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;

class InvoicesExport implements WithColumnFormatting
{
    
    public function columnFormats(): array
    {
        return [
            'B' => NumberFormat::FORMAT_TEXT,
            'C' => NumberFormat::FORMAT_TEXT,
        ];
    }
}



来源于: https://docs.laravel-excel.com/3.1/exports/custom-formatting-values.html#value-binder

本文作者: admin

本文链接: https://www.jianbaizhan.com/article/639

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!


 请勿发布不友善或者负能量的内容。审查将对发布广告等违规信息进行处罚!