PHPExcel меняет xls DATETIME на числа

1

Когда я загружаю файл.xls в PHPExcel, я бы хотел прочитать необработанные данные.
Я прочитал об использовании "getValue()", и он должен исправить это.
Но не в моем случае.

Итак, в.xls у меня есть столбец: 2015-10-08 11:31
Когда я обрабатываю его с помощью PHPExcel, я получил: 42285.47993055556

Из-за того, что PHPExcel сначала читает файл, я не могу использовать PHP для создания объекта DATETIME?!

PHP

for ($row = 2; $row <= $highestRow; ++ $row) {
$val=array();
    for ($col = 0; $col < $highestColumnIndex; ++ $col) {
        $cell = $worksheet->getCellByColumnAndRow($col, $row);
        $val[] = $cell->getValue();

Как я могу это решить?

Бросив принятый ответ, я получил этот код для работы для меня:

for ($row = 2; $row <= $highestRow; ++ $row) {
  $val=array();
  for ($col = 0; $col < $highestColumnIndex; ++ $col) {
    $cell = $worksheet->getCellByColumnAndRow($col, $row);
    $val[] = $cell->getValue();
  }//close 2nd for loop
  //Create and convert xls date to php date
  $val[10] = PHPExcel_Shared_Date::ExcelToPHPObject($val[10]);
  $val[10] = $val[10]->format('Y-m-d H:i:s');
  //query stuff...
}//close first for loop    
Теги:
xls
phpexcel

1 ответ

4
Лучший ответ

Нет PHPExcel не меняет его... это уже номер

MS Excel хранит даты/время как сериализованную временную метку, основанную на количестве дней с 1 января 1900 года (или 1 января 1904 года, если используется календарь Mac).... это значение 42285.47993055556 - это временная метка Excel, соответствующая 2015-10-08 11:31:06. Ячейка, в которой хранится это значение, имеет код номера, который преобразует его в человеческое представление этой даты/времени. Если вы измените эту маску, она изменит видимый внешний вид значения, но базовое сериализованное значение останется неизменным.

Если вы это сделаете

$val[] = $cell->getFormattedValue();

то PHPExcel применит маску формата номера к этой сериализованной дате/временной отметке и вернет строку, содержащую человекочитаемый формат этой даты, на основе маски, которая была сохранена в файле Excel.

Если вы это сделаете

$val[] = PHPExcel_Shared_Date::ExcelToPHP($cell->getValue());

то PHPExcel вернет временную метку unix, которую вы можете передать функции PHP date() для форматирования, но вы хотите

Если вы это сделаете

$val[] = PHPExcel_Shared_Date::ExcelToPHPObject($cell->getValue());

то PHPExcel вернет объект PHP DateTime, который затем можно форматировать, но вы хотите использовать метод DateTime object format()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню