PhpSpreadsheet форматирует дату импорта из XLSX - PullRequest
0 голосов
/ 16 мая 2018

Добрый день.Я использую библиотеку PhpSpreadsheet для импорта xlsx.

В столбце I в xlsx у меня есть это значение 20/10/1970 00:00:00, которое отображается как 1970-10-20 00:00:00, но когда я импортирую его:

$dataArray = $spreadsheet->getActiveSheet()
->rangeToArray(
    'A2:AO3',    // The worksheet range that we want to retrieve
    NULL,        // Value that should be returned for empty cells
    NULL,        // Should formulas be calculated (the equivalent of getCalculatedValue() for each cell)
    TRUE,        // Should values be formatted (the equivalent of getFormattedValue() for each cell)
    TRUE         // Should the array be indexed by cell row and cell column
);

, я получаю странное["I"] => float(25861) Пожалуйста, помогите мне получить данные углерода в этом поле.

Если я попытаюсь преобразовать это число с плавающей точкой, как полученную мной метку времени, 01/01/1970 не 10/20/1970

Другая дата, которую я получаю как["J"] => float(43195.4092014)

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Другим способом решения этой функции является получение активного листа от нашего объекта PHPSpreadSheet и изменение стиля следующим образом:

$sheet = $PhpSpreadSheetObject->getActiveSheet();
$sheet->getStyle("A1:Z1")->getNumberFormat()->setFormatCode("YYYY-MM-DD");
0 голосов
/ 16 мая 2018

В Excel даты не такие, как в других программах / языках программирования.

Excel считает с 1900-01-01 в отличие от UNIX, который считает с 1970-01-01.
Возвращаемое число - это число с плавающей точкой числа дней с 1900-01-01, а дробная часть - это время дня.

В качестве примера 25861.5 - это 1970-10-20 12:00 («Y-m-d h.i»).

Для преобразования в UNIX необходимо взять возвращенное значение - 25569 (1970-01-01 в Excel) и умножить на 86400 (один день в секундах).

Смотрите здесь: https://3v4l.org/AudMn

В Excel, если вы форматируете 25861 и 25569 как даты:
enter image description here

Другой поплавок, который вы получили 43195.4092013889

echo date("Y-m-d h:i", (43195.4092013889-25569)*86400); //2018-04-05 11:49 (mind the timezones)

https://3v4l.org/mMZQ4

...