Задать вопрос
lamo4ok
@lamo4ok
Программист

PhpSpreadsheet: Как установить такой формат ячейки, чтобы она принимала текстовые значения, не обрезая в них знак «+»?

Есть примерно такой код:
$sheet
	->getStyleByColumnAndRow($column, $row)
	->getNumberFormat()
	->setFormatCode('@')
;
$sheet->setCellValueByColumnAndRow(
	$position,
	$row,
	$value
);


По идее, он должен устанавливать в ячейке текстовый формат, и после этого если мы в нее установим значение вроде "+5", оно должно таким и остаться. На практике же происходит обрезание знака плюс. Как это победить? Пробовал формат General, но при данном формате (Общий) плюс обрезается даже если проверять это руками в самом MS Excel. А вот текстовый формат при такой проверке плюс сохраняет, но не тогда, когда мы делаем это через код.
  • Вопрос задан
  • 4510 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Urvin
@Urvin
Похоже, придется поколдовать c наследником DefaultValueBinder и назначением его ячейкам.
Посмотрите - на 63 строке оного прямо отрезается начальный "+", как бы Вы не химичили с типами ячеек.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Kripto77
Столкнулся с той же проблемой - ответ на шел в доках, возможно кому-то пригодится
https://phpspreadsheet.readthedocs.io/en/latest/to... - Раздел "Setting a number with leading zeroes"

В тип string значение ячейки приводится примерно таким кодом
// Set cell A8 with a numeric value, but tell PhpSpreadsheet it should be treated as a string
$spreadsheet->getActiveSheet()->setCellValueExplicit(
    'A8',  // координаты ячейки
    "01513789642",   // нужное значение строки
    \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING
);
Ответ написан
Комментировать
Как вариант - передавать значения предваряя их апострофом, т.е. вместо "+5" делать "'+5"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы