如何在PHPSpreadsheet中应用等效的会计格式(Accounting format)?
在PHPSpreadsheet中实现Excel会计格式的方法
我之前也踩过这个坑,直接把PHPExcel的格式字符串套到PHPSpreadsheet里确实出不来预期效果,不过现在有两种靠谱的解决方式:
方法一:直接用内置的会计格式常量
PHPSpreadsheet已经内置了适配Excel会计格式的常量,不用自己写复杂的格式串,代码示例如下:
use PhpOffice\PhpSpreadsheet\Style\NumberFormat; use PhpOffice\PhpSpreadsheet\Spreadsheet; // 创建表格实例 $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 填充测试数据 $sheet->setCellValue('A1', 1567.89); $sheet->setCellValue('A2', -432.10); $sheet->setCellValue('A3', 0); // 给单元格应用会计格式 $targetRange = $sheet->getStyle('A1:A3'); $targetRange->getNumberFormat()->setFormatCode(NumberFormat::FORMAT_CURRENCY_ACCOUNTING);
这个内置常量完全对应Excel默认的会计格式效果:货币符号左对齐、数字右对齐、负数用括号包裹、零值显示短横线,省心又准确。
方法二:自定义会计格式字符串(适配PHPSpreadsheet写法)
如果需要调整货币符号、小数位数这类细节,就需要用自定义格式串,但要注意PHP字符串的引号转义问题。正确的写法是这样:
// 用单引号包裹格式串,避免PHP解析内部的双引号 $customAccountingFormat = '"$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)'; $targetRange->getNumberFormat()->setFormatCode($customAccountingFormat);
格式串各部分的作用:
"$"* #,##0.00_):处理正数,$是货币符号,*用空格填充实现对齐,#,##0.00是千分位加两位小数,_)预留和负数括号右半边一致的宽度保证对齐_("$"* (#,##0.00):处理负数,用括号包裹数值,同时保留对齐空间_("$"* "-"??_):处理零值,显示短横线-且保持对齐_(@_):处理文本内容,保持默认显示逻辑
你之前没得到预期效果,大概率是没处理好PHP的引号解析,用单引号包裹格式串就能解决这个问题啦。
内容的提问来源于stack exchange,提问作者Uriel
相关产品推荐
相关产品推荐

