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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM