Чтение PHPExcel – требуется помощь

Я использую PHPExcel для чтения данных из листа Excel и хранения в таблице mysql, до сих пор им удалось загрузить .xls, а также файл .xlsx и после загрузки xls я получил табличную структуру данных

name start_date end_date city one 11/25/2011 3:30:00 PM 11/29/2011 4:40:00 AM Jaipur two 10/22/2011 5:30:00 PM 10/25/2011 6:30:00 AM Kota three 3/10/2011 2:30:00 PM 3/11/2011 12:30:00 AM Bikaner chandigarh 

теперь у меня есть некоторые проблемы, пожалуйста, предложите мне оптимизированный метод

  1. как получить имя листа (bcoz в одном excel есть 7 листов)
  2. пока что я делаю, чтобы сохранить эти данные в db, ниже приведен фрагмент кода

     $inputFileName = "test.xls"; $inputFileType = PHPExcel_IOFactory::identify($inputFileName); $objReader = PHPExcel_IOFactory::createReader($inputFileType); $objReader->setReadDataOnly(true); /** Load $inputFileName to a PHPExcel Object **/ $objPHPExcel = $objReader->load($inputFileName); $total_sheets=$objPHPExcel->getSheetCount(); // here 4 $allSheetName=$objPHPExcel->getSheetNames(); // array ([0]=>'student',[1]=>'teacher',[2]=>'school',[3]=>'college') $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); // first sheet $highestRow = $objWorksheet->getHighestRow(); // here 5 $highestColumn = $objWorksheet->getHighestColumn(); // here 'E' $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // here 5 for ($row = 1; $row <= $highestRow; ++$row) { for ($col = 0; $col <= $highestColumnIndex; ++$col) { $value=$objWorksheet->getCellByColumnAndRow($col, $row)->getValue(); if(is_array($arr_data) ) { $arr_data[$row-1][$col]=$value; } } } print_r($arr_data); 

и это возвращает

 Array ( [0] => Array ( [0] => name [1] => start_date [2] => end_date [3] => city [4] => ) [1] => Array ( [0] => one [1] => 40568.645833333 [2] => 40570.5 [3] => Jaipur [4] => ) [2] => Array ( [0] => two [1] => 40568.645833333 [2] => 40570.5 [3] => Kota [4] => ) [3] => Array ( [0] => three [1] => 40568.645833333 [2] => 40570.5 [3] => Bikaner [4] => ) [4] => Array ( [0] => [1] => [2] => [3] => Chandigarh [4] => ) ) 

я нуждаюсь в этом

  • заголовок каждого листа excel (т.е. первая строка) становится ключом массива ($ arr_data) и
  • rest станет значением массива.
  • время изменилось на некоторое целочисленное значение, которое будет таким же, как на листе excel
  • пустое поле (т.е. столбца заголовка) массива во всей строке должно быть усечено (здесь [4])
  • если первое поле листа excel (или комбинированное условие для некоторых полей) не выполняется, то эта строка не должна быть добавлена ​​в массив

т.е. желаемый массив должен выглядеть так:

 Array ( [0] => Array ( [name] => one [start_date] => 11/25/2011 3:30:00 PM [end_date] => 11/29/2011 4:40:00 AM [city] => Jaipur ) [1] => Array ( [name] => two [start_date] => 10/22/2011 5:30:00 PM [end_date] => 10/25/2011 6:30:00 AM [city] => Kota ) [2] => Array ( [name] => three [start_date] => 3/10/2011 2:30:00 PM [end_date] => 3/11/2011 12:30:00 AM [city] => Bikaner ) ) 

и после этого я храню данные в своем db, используя действие mysql для нужного массива.

  • есть ли какой-либо другой короткий метод для хранения данных выше db

Примечание. Пожалуйста, не обращайтесь к руководству (это действительно очень плохо) … просто скажите мне имя метода ..

Обновить

@Mark Спасибо за ваше решение, мне это очень помогает, но все же есть некоторые проблемы.

  • как обращаться с пустой / пустой ячейкой в ​​excel sheet..bcoz, когда какая-либо ячейка пуста, тогда она отображает уведомление

Примечание. Неопределенный индекс: C в C: \ xampp \ htdocs \ xls_reader \ Tests \ excel2007.php в строке 60
Примечание. Неопределенный индекс: D в C: \ xampp \ htdocs \ xls_reader \ Tests \ excel2007.php в строке 60

тогда как линия 60

 foreach($headingsArray as $columnKey => $columnHeading) { $namedDataArray[$r][$columnHeading] = $dataRow[$row]$columnKey]; } 
  • как установить условия до получения массива полных данных, т. е. если я хочу, чтобы первый и второй столбцы были пустыми / пустыми в любой строке, тогда эта строка не должна быть добавлена ​​в наш желаемый массив

благодаря

как получить имя листа (bcoz в одном превосходстве есть 7 листов)?

Чтобы получить текущий активный лист:

 $sheetName = $objPHPExcel->getActiveSheet()->getTitle(); 

время изменилось на некоторое целочисленное значение, которое будет таким же, как на листе excel

Посмотрите на PHPExcel_Shared_Date :: ExcelToPHP ($ excelDate) или PHPExcel_Shared_Date :: ExcelToPHPObject ($ excelDate), чтобы преобразовать значения даты / времени в метку времени PHP или объект DateTime

Посмотрите на метод $ objPHPExcel-> getActiveSheet () -> toArray (), а не на все rwos и столбцы. Если вы хотите использовать toArray с форматированным аргументом, не используйте $ objReader-> setReadDataOnly (true); иначе PHPExcel не может различать число и дату / время. Последний SVN-код добавил метод rangeToArray () к объекту рабочей таблицы, который позволяет вам одновременно читать строку (или блок ячеек), например $ objPHPExcel-> getActiveSheet () -> rangeToArray ('A1: A4' )

Остальные ваши вопросы в основном манипулируют массивами PHP

РЕДАКТИРОВАТЬ

PS. Вместо того, чтобы просто сказать нам, что руководство действительно очень плохое … скажите нам, как мы можем его улучшить.

EDIT 2

Используя последний код SVN, чтобы воспользоваться методом rangeToArray ():

 $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); $highestRow = $objWorksheet->getHighestRow(); $highestColumn = $objWorksheet->getHighestColumn(); $headingsArray = $objWorksheet->rangeToArray('A1:'.$highestColumn.'1',null, true, true, true); $headingsArray = $headingsArray[1]; $r = -1; $namedDataArray = array(); for ($row = 2; $row <= $highestRow; ++$row) { $dataRow = $objWorksheet->rangeToArray('A'.$row.':'.$highestColumn.$row,null, true, true, true); if ((isset($dataRow[$row]['A'])) && ($dataRow[$row]['A'] > '')) { ++$r; foreach($headingsArray as $columnKey => $columnHeading) { $namedDataArray[$r][$columnHeading] = $dataRow[$row][$columnKey]; } } } echo '<pre>'; var_dump($namedDataArray); echo '</pre><hr />';