Laravel Excel:如何在导出的csv中打印所有零?



我正在使用Laravel Excel导出csv。

我将输出值创建为

'amount' => number_format(-$ai->final_invoice_amount, 2, ".", "")

但是,例如对于204.00,在导出的csv中我只得到204,没有点和前导零。

我知道它是计算机的有效数字;但是我们的客户端有一个严格的解析器,它需要一个204.00值。

我尝试过,但不工作,添加一个显式强制转换到string,但它是无用的,因为number_format输出一个字符串在任何情况下

'amount' => (string)number_format(-$ai->final_invoice_amount, 2, ".", "")

Laravel Excel的Events让你可以访问PHPSpreadSheet的底层。

https://docs.laravel-excel.com/3.1/exports/extending.html事件使用Events,您可以对单元格或单元格组应用所需的格式。演示比解释容易,所以我创建了一个简单的例子。

<?php
namespace AppExport;
use MaatwebsiteExcelConcernsFromCollection;
use MaatwebsiteExcelConcernsWithEvents;
use MaatwebsiteExcelEventsBeforeSheet;
class SampleExport implements FromCollection, WithEvents
{
public function collection()
{
return collect([
[
'id' => 1,
'amount_1' => 100,
'amount_2' => 75.20,
'amount_3' => -23.10,
],
[
'id' => 2,
'amount_1' => -60,
'amount_2' => 50.40,
'amount_3' => 110,
],
]);
}
public function registerEvents(): array
{
return [
BeforeSheet::class => function (BeforeSheet $event) {
// format columns B-D to two decimal places
$event->sheet
->getDelegate()
->getStyle('B:D')
->getNumberFormat()
->setFormatCode('0.00');
},
];
}
}

这是作为文件输出的结果CSV。

"1","100.00","75.20","-23.10"
"2","-60.00","50.40","110.00"

注意:被格式化的值必须是数字类型!尝试格式化字符串将无法工作。

最新更新