Lecteur PHPExcel - aide requise
Je m en utilisant PHPExcel pour lire des données à partir d'une feuille Excel et de les stocker dans une table mysql, jusqu'à maintenant, je m en mesure de télécharger .xls ainsi que .fichier xlsx et après téléchargement de l'xls je suis en dessous du tableau de la structure de données
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
maintenant, j'ai des problèmes, merci de me suggérer la méthode optimisée
- comment pouvons-nous obtenir le nom de la feuille ( bcoz dans un excel, il y a 7 feuilles )
- pour l'instant ce que je fais pour stocker ces
les données en db, ci-dessous, l'extrait de code$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);
et cela renvoie
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] =>
)
)
j'ai besoin de
- en-tête de chaque feuille excel (c'est à dire de la première ligne) à devenir la clé du tableau($arr_data) et
- de repos deviennent la valeur de tableau.
- temps a changé en une certaine valeur entière, qui doit être la même que dans la feuille excel
- champ vide ( j'.e.vide-tête de colonne ) de la matrice de toutes les lignes doivent être tronqués (ici [4] )
- si le premier champ d'une feuille excel (ou combiné condition sur certains
les champs) n'est pas remplie, alors que la ligne ne doit pas être ajouté dans le tableau
c'est à dire souhaité tableau devrait ressembler à
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
)
)
et après que je stocker des données dans ma db à l'aide de mysql action sur le tableau désiré.
- est-il une autre méthode courte pour stocker les données ci-dessus en db
Remarque: Veuillez ne pas voir le manuel( il est vraiment vraiment très mauvais )... juste me dire les méthodes de nom..
mise à jour
@Marc Merci pour votre solution, cela m'aide beaucoup, mais encore certains problèmes sont là
- comment gérer vide/cellule vide dans la feuille excel..bcoz lorsque toutes les cellules sont vides, puis il affiche un avis
Notice: Undefined index: C dans C:\xampp\htdocs\xls_reader\Tests\excel2007.php
sur la ligne 60
Notice: Undefined index: D C:\xampp\htdocs\xls_reader\Tests\excel2007.php
sur la ligne 60
alors que la ligne 60 est
foreach($headingsArray as $columnKey => $columnHeading) {
$namedDataArray[$r][$columnHeading] = $dataRow[$row]$columnKey];
}
- la façon de définir les conditions avant l'extraction de la matrice de données complète c'est à dire si je veux que, si la première et de la deuxième colonne sont vide/vide dans toute la ligne alors que la ligne ne doit pas être ajoutée dans notre tableau désiré
grâce
source d'informationauteur diEcho
Vous devez vous connecter pour publier un commentaire.
Pour obtenir l'actuelle feuille active:
Regarder PHPExcel_Shared_Date::ExcelToPHP($excelDate) ou PHPExcel_Shared_Date::ExcelToPHPObject($excelDate) pour convertir les valeurs de date/heure pour un timestamp PHP ou objet DateTime
Ont un coup d'oeil à l' $objPHPExcel- > getActiveSheet()->méthode toArray() plutôt qu'en parcourant tous les orrf et des colonnes de vous-même. Si vous souhaitez utiliser toArray avec la mise en forme de l'argument que, ne pas utiliser $objReader->setReadDataOnly(true); sinon PHPExcel ne peut pas distinguer entre un numéro et une date/heure. La dernière SVN code a ajouté une rangeToArray() la méthode à l'objet de feuille de calcul qui permet de lire une ligne (ou un bloc de cellules) à la fois, par exemple $objPHPExcel- > getActiveSheet()->rangeToArray ("A1:A4')
Le reste de vos questions sont fondamentalement tableau PHP manipulation
MODIFIER
PS. Au lieu de simplement nous dire que le manuel est vraiment très mauvais... dites-nous comment nous pouvons l'améliorer.
EDIT 2
À l'aide de la dernière SVN code pour profiter de la rangeToArray() méthode: