PHPExcel библиотека получить дату

Используя PHPExcel, я пытаюсь извлечь данные из файла Excel и сохранить их в базе данных MySql, используя следующий код:

$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$i=0;

$arr =array("","","","","","","");

for ($row = 1; $row <= $highestRow; $row++)
{
//  Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
foreach($rowData[0] as $k=>$v)
{
if(PHPExcel_Shared_Date::isDateTime($v))
{
$arr[$i] = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($InvDate));
}
else
$arr[$i] = $v;
$i++;
}

Этот код выдает следующую ошибку:

Исправляемая фатальная ошибка: Аргумент 1, передаваемый в PHPExcel_Shared_Date :: isDateTime (), должен быть экземпляром PHPExcel_Cell с двойным заданием, вызываемым в …………

Когда я читаю столбцы следующим образом:

foreach($rowData[0] as $k=>$v)
{
$arr[$i] = $v;
$i++;
}

Столбцы даты читаются как обычный текст, даже если я установил форматирование ячеек на дату в Excel. В целом, у меня есть 3 столбца даты в каждой записи моего файла Excel, которые могут иметь либо дату, либо будут пустыми.

Столбец даты в Excel содержит даты в формате: d-m-Y. Я хочу, чтобы он был получен в формате: «Y-m-d», если это возможно, иначе мне придется взорвать его и преобразовать вручную. Дата будет окончательно сохранена в столбце типа даты MySQL.

Я тоже прочитал несколько статей в stackoverflow, но не смог найти идеальное решение.

0

Решение

$v это просто числовое значение, сериализованное значение метки времени, используемое в MS Excel, ничем не отличающееся от любого другого значения с плавающей запятой; невозможно сказать, если $v представляет дату или нет без возможности доступа к маске формата для ячейки, поэтому isDateTime() Метод должен прочитать саму ячейку, чтобы определить, содержит ли она дату или нет.

Убедитесь, что ваш массив возвращен как ассоциативный массив (установив дополнительный последний аргумент для метода как true), который дает вам адрес каждой ячейки:

$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE, TRUE);

Это вернет массив, проиндексированный по его адресу строки, как вложенный массив по адресу столбца, поэтому ваш foreach должен будет отражать номер строки:

foreach($rowData[$row] as $k=>$v)

и $ k будет тогда адресом столбца.

Затем вы можете использовать $ row и $ k, чтобы получить ячейку, и передать ее isDateTime() вызов:

if(PHPExcel_Shared_Date::isDateTime($sheet->getCell($k . $row)))

И обратите внимание, что

$arr[$i] = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($InvDate));

должно быть

$arr[$i] = date('Y-m-d', PHPExcel_Shared_Date::ExcelToPHP($v));

в вашем коде

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]