2016-12-22 2 views
0

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

$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++; 
} 

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

Catchable fatal error: Argument 1 passed to PHPExcel_Shared_Date::isDateTime() must be an instance of PHPExcel_Cell, double given, called in ............

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

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

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

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

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

+0

Можете ли вы var_dump ($ rowData); после получения? – user4035

ответ

1

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

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

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

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

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

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

Вы можете использовать $ строку и $ к, чтобы получить клетку, и передать в 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)); 

в вашем коде

+0

Удивительный. Это работало как шарм. Благодарю. – ITSagar

Смежные вопросы