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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 4
laisxn

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

10个月前 评论
逆天西瓜 (楼主) 10个月前

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

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

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

10个月前 评论
逆天西瓜 (楼主) 10个月前
chuoke (作者) 10个月前
逆天西瓜 (楼主) 10个月前
//在要导出的那个值后面追加 ."\t"
$record['phone'] . "\t";
10个月前 评论
逆天西瓜 (楼主) 10个月前
小猪蹄子 (作者) 10个月前
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个月前 评论

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