如何在 laravel excel maatwebsite 中设置带分隔符的动态数字格式?

Hos*_*ari 6 excel number-formatting laravel laravel-excel maatwebsite-excel

我有一个金额列,当数字没有小数时我想设置整数格式,当数字有小数时设置双精度格式。在这两种方式中,我想为数字添加分隔符。目前,我使用bindValue,但Excel单元格不知道金额列是数字格式,我应该选择它们并将它们转换为数字。

public function bindValue(Cell $cell, $value)
{
    if (is_int($value)) {
        $cell->setValueExplicit($value, '#,##0');

        return true;
    }else if (is_double($value)) {
        $cell->setValueExplicit($value, '#,##0.00');

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

        return true;

    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我该如何修复它?

小智 1

您可以使用以下方法格式化整个列

  • WithColumnFormatting
    namespace App\Exports;
    
    use PhpOffice\PhpSpreadsheet\Shared\Date;
    use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
    use Maatwebsite\Excel\Concerns\WithColumnFormatting;
    use Maatwebsite\Excel\Concerns\WithMapping;
    
    class InvoicesExport implements WithColumnFormatting, WithMapping
    {
        public function map($invoice): array
        {
            return [];
        }
        
        public function columnFormats(): array
        {
            return [
                'B' => NumberFormat::FORMAT_NUMBER_00,
                'C' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
            ];
        }
    }
Run Code Online (Sandbox Code Playgroud)