PhpSpreadsheet-как определить, если число форматируется как текст?

PhpSpreadsheet-как определить, если число форматируется как текст?

13.11.2019 09:32:07 Просмотров 90 Источник

У меня есть простая электронная таблица с числом, отформатированным как текст:

LibreOffice screenshot

Я хочу использовать PhpSpreadsheet, чтобы определить, что число действительно отформатировано как текст, а не по умолчанию "General". Поэтому я делаю это:

<?php

use PhpOffice\PhpSpreadsheet\IOFactory;

require 'vendor/autoload.php';

$reader = IOFactory::createReader('Xlsx');
$reader->setReadDataOnly(TRUE);

$cell = $reader->load('index.xlsx')->getActiveSheet()->getCell('A1');
var_dump($cell->getValue(), $cell->getStyle()->getNumberFormat()->getFormatCode());

Но результат всегда такой:

поплавок (12345)
строка (7) " Общие сведения"

Как определить, если номер отформатирован как "текст"?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text#comment103962889_58843456
@SeanBright, что не помогло, все еще "генерал". Я использую LibreOffice вместо MS Office, так что это может быть фактором. Я бы посмотрел, могу ли я получить пробную версию MS Office, чтобы попробовать ее, но это в конечном счете не полезно, поскольку этот вопрос основан на проблеме пользователя, и я не могу сделать программное обеспечение MS обязательным требованием.

Ответы - PhpSpreadsheet-как определить, если число форматируется как текст? / PhpSpreadsheet - how to determine if a number is formatted as text?

Является ответом!
Sundance_Raphael

19.11.2019 12:46:43

Вы пишете его в своем коде читателя ' $reader - >setReadDataOnly (True);', что означает считывание чистых данных без форматирования, в вашем коде читателя. Ознакомиться с документацией.

См. строку 5 в коде.

Вы должны использовать

$reader->setReadDataOnly(FALSE);

Чем вы должны быть в состоянии считывать информацию о формировании из файла excel.

 $format = $sheet->getStyle("A1")->getNumberFormat()->getFormatCode();
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104153331_58930964
Это то, что я использую, но getFormatCodeвозвращает "General" вместо этого, в этом весь смысл.
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104153521_58930964
вы должны попытаться установить $reader->setReadDataOnly(FALSE);к numberformating С '@' вы говорите, чтобы читатель читал только puredate без формирования. Затем читатель возвращает только общие как cellformat
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104153586_58930964
Мне нет смысла его устанавливать. Я должен знать, где пользователи устанавливают его с помощью Excel или LibreOffice.
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104153685_58930964
Вы пишете его в своем коде чтения ' $reader - >setReadDataOnly (True);' в своем коде чтения. вы не увидите никакого пользовательского форматирования, если вы скажете phpspreadsheet, что он должен использовать только данные. См. строку 5 в коде.
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104153753_58930964
Да, это имеет смысл. Я попробую это позже (я сейчас на работе, и у меня есть тестовые файлы дома) и опубликую результаты. Спасибо.
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104176569_58930964
Хорошо, это сработало. Можете ли вы отредактировать свой ответ, чтобы сказать, что $reader->setReadDataOnly(TRUE);на самом деле это решение? Потому что в настоящее время решение находится в комментариях, а не в самом ответе. Я назначу награду завтра, так что пока не позволяйте мне это сделать.
https://stackoverflow.com/questions/58843456/phpspreadsheet-how-to-determine-if-a-number-is-formatted-as-text/58930964#comment104177844_58930964
Я обновил ответ.
Закрыть X