Laravel-Excel 3 导出值转换数字为文本

我这里是 ‘C’,’D’, ‘H’ 这几列是超过 15 位数字,自动转换为了科学计数法,所以直接绑定这几列即可。

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

class ExpertMonthFinanceExport extends DefaultValueBinder implements WithCustomValueBinder
{
    public function bindValue(Cell $cell, $value)
    {
        $column = $cell->getColumn();
        if (in_array( $column, ['C','D', 'H'])) {
            $cell->setValueExplicit($value, DataType::TYPE_STRING);
            return true;
        }
        return parent::bindValue($cell, $value);
    }
}

参考文章:问答:maatwebsite/Excel 3.0 导出 Excel 如何设置长数字为文本
官方文档:docs.laravel-excel.com/3.1/exports...

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5
#tips1
$fields = sprintf("%s\t",$fields);
#tips2
$fields = sprintf("'%s'",$fields);
2年前 评论
laisxn

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

3年前 评论
逆天西瓜 (楼主) 3年前

这个方法没用过,一直用的是 WithColumnFormatting

    public function columnFormats(): array
    {
        return [
            'A' => NumberFormat::FORMAT_TEXT,
            'C' => NumberFormat::FORMAT_TEXT,
            'E' => NumberFormat::FORMAT_TEXT,
            'F' => NumberFormat::FORMAT_TEXT,
        ];
    }

不知道效果是不是一样的。

3年前 评论
逆天西瓜 (楼主) 3年前
chuoke (作者) 3年前
逆天西瓜 (楼主) 3年前
//在要导出的那个值后面追加 ."\t"
$record['phone'] . "\t";
3年前 评论
逆天西瓜 (楼主) 3年前
小猪蹄子 (作者) 3年前
public function columnFormats(): array
{
    return [
        'I' => NumberFormat::FORMAT_NUMBER_00,
        'J' => NumberFormat::FORMAT_NUMBER_00,
        'N' => NumberFormat::FORMAT_NUMBER,
        'O' => NumberFormat::FORMAT_NUMBER,
    ];
}

用FORMAT_NUMBER就正常了

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!