在使用 maatwebsite/excel 包導出Excel的時候,有的單元格里會存放手機號等一大串的數字,這一串數字會被Excel軟件處理為科學計數法,在后續處理數據的時候會產生不小的麻煩,一個個去調會很麻煩,有幸在度娘上搜到了一個方法,奈何原網站打不開了,所以在這里記錄一下這個問題的解決辦法。
使用maatwebsite/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);
}
}