Laravel 使用 maatwebsite/excel 时长数字出现科学计数法的解决办法

在使用 maatwebsite/excel 包导出Excel的时候,有的单元格里会存放手机号等一大串的数字,这一串数字会被Excel软件处理为科学计数法,在后续处理数据的时候会产生不小的麻烦,一个个去调会很麻烦,有幸在度娘上搜到了一个方法,奈何原网站打不开了,所以在这里记录一下这个问题的解决办法。

使用maatwebsite/excel的教程可以参考这篇文章

Laravel 使用 maatwebsite/Excel 3.1 导入导出 Excel

言归正传,首先找到 vendor/maatwebsite/excel/src/DefaultValueBinder.php 文件
打开后的文件内容是这样的:

<?php

namespace Maatwebsite\Excel;

use PhpOffice\PhpSpreadsheet\Cell\Cell; 
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder as PhpSpreadsheetDefaultValueBinder;

class DefaultValueBinder extends PhpSpreadsheetDefaultValueBinder
{
    /**
     * @param Cell $cell Cell to bind value to
     * @param mixed $value Value to bind in cell
     *
     * @return bool
     */
    public function bindValue(Cell $cell, $value)
    {
        if (is_array($value)) {
            $value = \json_encode($value);
        } 

        return parent::bindValue($cell, $value);
    }
}

引入use PhpOffice\PhpSpreadsheet\Cell\DataType类

在bindValue方法里添加

        if (strlen($value) > 10) {
            $cell->setValueExplicit($value, DataType::TYPE_STRING);
            return true;
        }

使用PHPstorm的时候会提示This file dose not belong to the project ,选择第一个就好了。

修改后的文件是这样子的:

<?php

namespace Maatwebsite\Excel;

use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder as PhpSpreadsheetDefaultValueBinder;

class DefaultValueBinder extends PhpSpreadsheetDefaultValueBinder
{
    /**
     * @param Cell $cell Cell to bind value to
     * @param mixed $value Value to bind in cell
     *
     * @return bool
     */
    public function bindValue(Cell $cell, $value)
    {
        if (is_array($value)) {
            $value = \json_encode($value);
        }

        //超过10位的数字转文本格式,防止科学计数法
        if (strlen($value) > 10) {
            $cell->setValueExplicit($value, DataType::TYPE_STRING);
            return true;
        }

        return parent::bindValue($cell, $value);
    }
}

posted @ 2021-12-29 18:04  小舟悠悠水中摇  阅读(1002)  评论(2编辑  收藏  举报