PhpSpreadsheet-как определить, если число форматируется как текст?
У меня есть простая электронная таблица с числом, отформатированным как текст:
Я хочу использовать 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) " Общие сведения"
Как определить, если номер отформатирован как "текст"?
У вопроса есть решение - Посмотреть?

Источник

@SeanBright, что не помогло, все еще "генерал". Я использую LibreOffice вместо MS Office, так что это может быть фактором. Я бы посмотрел, могу ли я получить пробную версию MS Office, чтобы попробовать ее, но это в конечном счете не полезно, поскольку этот вопрос основан на проблеме пользователя, и я не могу сделать программное обеспечение MS обязательным требованием.
Источник

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

19.11.2019 12:46:43
Вы пишете его в своем коде читателя ' $reader - >setReadDataOnly (True);', что означает считывание чистых данных без форматирования, в вашем коде читателя. Ознакомиться с документацией.
См. строку 5 в коде.
Вы должны использовать
$reader->setReadDataOnly(FALSE);
Чем вы должны быть в состоянии считывать информацию о формировании из файла excel.
$format = $sheet->getStyle("A1")->getNumberFormat()->getFormatCode();

Это то, что я использую, но
getFormatCode
возвращает "General" вместо этого, в этом весь смысл.

вы должны попытаться установить
$reader->setReadDataOnly(FALSE);
к numberformating С '@' вы говорите, чтобы читатель читал только puredate без формирования. Затем читатель возвращает только общие как cellformat

Мне нет смысла его устанавливать. Я должен знать, где пользователи устанавливают его с помощью Excel или LibreOffice.

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

Да, это имеет смысл. Я попробую это позже (я сейчас на работе, и у меня есть тестовые файлы дома) и опубликую результаты. Спасибо.

Хорошо, это сработало. Можете ли вы отредактировать свой ответ, чтобы сказать, что
$reader->setReadDataOnly(TRUE);
на самом деле это решение? Потому что в настоящее время решение находится в комментариях, а не в самом ответе. Я назначу награду завтра, так что пока не позволяйте мне это сделать.

Я обновил ответ.
Помочь в развитии проекта: