lamo4ok
@lamo4ok
Программист

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

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


По идее, он должен устанавливать в ячейке текстовый формат, и после этого если мы в нее установим значение вроде "+5", оно должно таким и остаться. На практике же происходит обрезание знака плюс. Как это победить? Пробовал формат General, но при данном формате (Общий) плюс обрезается даже если проверять это руками в самом MS Excel. А вот текстовый формат при такой проверке плюс сохраняет, но не тогда, когда мы делаем это через код.
  • Вопрос задан
  • 1267 просмотров
Решения вопроса 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"
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Laptop.ru Москва
от 150 000 до 190 000 ₽
DKLINE Санкт-Петербург
от 120 000 до 150 000 ₽
Laptop.ru Москва
от 130 000 до 170 000 ₽