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 хранится обычное число.