PHPExcel и цены в рублях

PHPExcel — хорошая и удобная библиотека для генерации Excel файлов из PHP.

При написании скрипта для генерации прайс-листа появилась задача выводить в том числе и колонку с ценами (сюрприз 🙂 ). Самый простой способ — это преобразовать число через функцию number_format, приписать в конце «руб» и записать получившуюся строку в ячейку.
Способ простой, быстрый и неправильный.

Неправилен он потому что в таком случае значение ячейки воспринимается Excel как строка. А значит его уже нельзя использовать в формулах. Да и если вдруг кто-то захочет парсить этот прайс-лист, то такой подход добавит ему проблем.

Правильный же способ заключается в том чтобы записывать в ячейку обычное число, а уже его внешний вид задавать через свойства ячейки.

Для задание формата чисел в PHPExcel есть ряд констант. Например константа PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1 позволяет показывать в ячейке число с двумя десятичными знаками, с точкой в виде разделителя и с запятой для разделителя тысяч.

С префиксом «руб». Все оказалось чуть сложнее. Хорошую услугу оказал LibreOffice — если в нем задавать формат ячейки, то тут же виден пользовательский тип формата — т.е. некоторая строка, задающая формат.

В результате я создал свой свобственный формат валюты (руб) для PHPExcel:

define("PRICE_FORMAT", PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1. "[\$ руб.-419]");

Используется он соответственно при задании стиля ячейки:

$sheet->setCellValue("C" . $cnt, floatval($item["price"]));
$sheet->getStyle("C" . $cnt)->getNumberFormat()->setFormatCode(PRICE_FORMAT);

Таким образом в ячейке цена выглядит так как нужно, но по сути в Excel хранится обычное число.

Запись опубликована в рубрике Полезности, Работа, Фриланс с метками , . Добавьте в закладки постоянную ссылку.

Добавить комментарий