【问题标题】:Number formatting phpspreadsheet with decimals not seen as numbers by the exported xlsx数字格式化phpspreadsheet,小数不被导出的xlsx视为数字
【发布时间】:2019-12-18 14:09:10
【问题描述】:

我有一个页面,其中包含航班费用、酒店住宿费用和总费用的行的简单概述,它使用 phpspreadsheet 添加了 xlsx 导出。 费用需要以欧元显示,格式为:

€ 1120,46

或者

€ 1.120,46

无论哪种方式都可以。

航班费用的值是可变的,并且来自数据库,以十进制 (6,2) 形式来自早期的用户输入。酒店费用为固定金额 (76) * 天数(基于航班日期)。

我还在电子表格中使用 sum 函数来添加列的总数,但其余的计算是通过 PHP 完成的,并作为单元格的值添加。

对于带有数字的单元格,使用:

...->setFormatCode(PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_CURRENCY_EUR);

或“FORMAT_CURRENCY_EUR_SIMPLE”,结果相同,但数字后面的欧元符号,不是我需要的。所以我用这个:

...->setFormatCode('[$€ ]#,##0.00_-');

在 xlsx 导出中,它适用于不带小数的数字。数字显示正确,求和功能也有效,包括正确位置的€符号。

但是当数字包含小数时,它会停止工作。

如果我添加像“120.45”这样的数字,xlsx 导出显示“120.45.0”并且 Excel 不会报告任何问题,而且 sum 函数不会计算任何内容。

如果我添加像“120,45”这样的数字,xlsx 导出显示“120,45”,但 Excel 报告它不是数字,并且 sum 函数不会计算任何内容。然后,您可以单击 Excel 中的警告三角形并将其设为数字​​。此时,该值通过 sum 函数添加到总数中。

这两个选项也未能添加欧元符号。

我尝试在 PHP 端使用这些类型的格式添加数字:

$sheet->setCellValue('S5, number_format ($price, 2, ",", ""));

$sheet->setCellValue('S5, number_format ($price, 2, ".", ""));

$sheet->setCellValue('S5, str_replace(',','.',$price));

$sheet->setCellValue('S5, str_replace('.',',',$price));

这对十进制值产生了与上述相同的结果,并且'number_format(...)' 使非十进制值也作为值,因此没有数字和求和函数正常工作。

你知道这可能是什么吗?

【问题讨论】:

  • 可能 phpspreadsheet 只支持没有千位分隔符的数值转换(文档确实说:数字字符串将转换为数字,这样会具有误导性) - 即您是否尝试在导出之前使用 php 转换您的数字字符串(例如浮动)?
  • 我没有在添加到导出的值中使用千位分隔符。或者你建议我应该使用它们吗?数字
  • 尝试使用这个: $sheet->setCellValueExplicit('V5, number_format ($price, 2, ",", ""), DataType::TYPE_NUMERIC);有点作品......因为它删除了小数。所以不是预期的效果,但现在公式正在起作用。使用“。”来执行此操作作为十进制分隔符,使用额外的 '.' 产生与以前相同的结果,现在创建 '4.556.0' 而不是 '4556,45' 或 '€ 4.556,45' 并再次破坏一切。打开 xlsx 时也会提示错误。
  • 作为一种解决方法,我删除了 setFormatCode 和公式。然后将数据类型设置为字符串并手动添加€-sign infront...这样excel至少会显示正确的数字。

标签: php phpspreadsheet


【解决方案1】:

我正在使用相同的 api (phpspreadsheet) 并遇到此问题。 我在开发人员页面上找到了一份报告以及他们所做的更正。 问题是解决使用“.”(点)作为小数分隔符的国家/地区的小数问题。对我们来说,更正只会带来更多问题。

我的解决方案是在此时(1.10.1)最后一次修正之前设置最后一个稳定版本(1.10.0)。

我刚刚打开了一个问题报告,现在我正在等待答案。

【讨论】:

  • 我试试这个,看看有没有帮助。
猜你喜欢
  • 2018-10-26
  • 2020-03-09
  • 2014-09-29
  • 2019-05-07
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多