getSheet($numeroFeuille); $derniereColonne = $feuille->getHighestColumn(); $numeroDerniereColonne = PHPExcel_Cell::columnIndexFromString($derniereColonne); return $numeroDerniereColonne; } /** * Retourne le nombre total de ligne d'une feuille. * ATTENTION : Cette fonction compte également les lignes vides situées entre des données * @param type $fichier Le chemin absolu vers le fichier * @param type $numeroFeuille Le numéro de la feuille à étudier * @return int Le nombre de ligne présent dans la feuille */ function getNombreLigne($fichier, $numeroFeuille) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $derniereLigne = $feuille->getHighestRow(); return $derniereLigne; } /** * Permet de compter le nombre de ligne non vide présentes dans une feuille de données * @param type $fichier Le chemin absolu vers le fichier * @param type $numeroFeuille Le numéro de la feuille à traiter * @return int Le nombre de ligne non vide */ function getNombreLigneNonVide($fichier, $numeroFeuille) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $compteurColonne = 0; $compteurLigne = 0; // Parcours des lignes foreach ($feuille->getRowIterator() as $ligne) { // Parcours des colonnes $nullData = 0; foreach ($ligne->getCellIterator() as $cellule) { $contenu = trim($cellule->getValue()); if (!empty($contenu)) { $compteurColonne++; } else { $nullData++; } } if ($compteurColonne>0) { //$nullData != $compteurColonne $compteurLigne++; } $compteurColonne = 0; } return $compteurLigne; } /** * Permet de détecter si une liste d'entete contenue dans une feuille * @param type $fichier Le chemin absolu vers le fichier * @param type $numeroFeuille Le numéro de la feuille à étudier * @return boolean Vrai si il existe des doublons, faux dans les autres cas */ function isDoublonEntete($fichier, $numeroFeuille) { $result = false; $data = array(); $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $compteurLigne = 0; foreach ($feuille->getRowIterator() as $ligne) { // Parcours des colonnes $nullData = 0; $compteurColonne = 0; foreach ($ligne->getCellIterator() as $cellule) { $contenu = trim($cellule->getValue()); if (!empty($contenu)) { $data[$compteurLigne][$compteurColonne] = $contenu; $compteurColonne++; } else { $nullData++; } } if ($nullData != $compteurColonne) { $compteurLigne++; } if ($compteurLigne == 1) { break; } } for ($i = 0; $i < $compteurColonne; $i++) { $dataRef = $data[0][$i]; $nombreOccurence = 0; for ($j = 0; $j < $compteurColonne; $j++) { $dataComp = $data[0][$j]; if ($dataComp == $dataRef) { $nombreOccurence++; } } if ($nombreOccurence > 1) { $result = true; } } return $result; } /** * Permet de récuperer la 1ère ligne non vide d'une feuille d'un classeur excel * @param type $fichier Le chemin absolu vers le fichier * @param type $numeroFeuille Le numéro de la feuille à étudier * @return type data[] Une liste de texte de longueur égale au nombre de colonne */ function recuperationEntete($fichier, $numeroFeuille) { $data = array(); $entete = array(); $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $compteurLigne = 0; foreach ($feuille->getRowIterator() as $ligne) { // Parcours des colonnes $nullData = 0; $compteurColonne = 0; foreach ($ligne->getCellIterator() as $cellule) { $contenu = trim($cellule->getValue()); if (!empty($contenu)) { $data[$compteurLigne][$compteurColonne] = $contenu; $compteurColonne++; } else { $nullData++; } } if ($nullData != $compteurColonne) { $compteurLigne++; } if ($compteurLigne == 1) { break; } } for ($i = 0; $i < $compteurColonne; $i++) { //$entete[$i] = htmlentities(trim(stripslashes($data[0][$i]))); $entete[$i] = trim(stripslashes($data[0][$i])); //$entete[$i] = str_replace("'","´",$entete[$i]); $entete[$i] = str_replace("\"","",$entete[$i]); $entete[$i] = str_replace(CHR(10), "", $entete[$i]); $entete[$i] = str_replace(CHR(13), "", $entete[$i]); //$entete[$i] = utf8_encode($entete[$i]); $entete[$i] = utf8_decode($entete[$i]); } return $entete; } /** * Fonction permettant de lire une feuille excel * Format supporté 97-2003, 2007, ODS * @param type $fichier Le chemin absolu vers le fichier * @param type $numeroFeuille Le numéro de la feuille à charger en mémoire * @return type data[][] Retourne un tableau de données sous la forme $data[numéro de ligne][lettre de colonne] */ function readingExcelToArrayWithLetter($fichier, $numeroFeuille) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $data = array(); $compteurColonne = 0; $compteurLigne = 0; // Parcours des lignes foreach ($feuille->getRowIterator() as $ligne) { // Parcours des colonnes $nullData = 0; $compteurColonne = 0; foreach ($ligne->getCellIterator() as $cellule) { $contenu = trim($cellule->getValue()); // if (!empty($contenu)) { $data[$compteurLigne][$cellule->getColumn()] = trim(stripslashes($contenu)); $data[$compteurLigne][$cellule->getColumn()] = str_replace("'","_",$data[$compteurLigne][$cellule->getColumn()]); $data[$compteurLigne][$cellule->getColumn()] = str_replace(CHR(10), "", $data[$compteurLigne][$cellule->getColumn()]); $data[$compteurLigne][$cellule->getColumn()] = str_replace(CHR(13), "", $data[$compteurLigne][$cellule->getColumn()]); $data[$compteurLigne][$cellule->getColumn()] = utf8_decode($data[$compteurLigne][$cellule->getColumn()]); $compteurColonne++; // } else { // $nullData++; // } } // if ($nullData != $compteurColonne) { $compteurLigne++; // } } return $data; } function readingExcelToArrayWithLetterXls($fichier, $numeroFeuille) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $data = array(); $compteurColonne = 0; $compteurLigne = 0; // Parcours des lignes foreach ($feuille->getRowIterator() as $ligne) { // Parcours des colonnes $nullData = 0; $compteurColonne = 0; foreach ($ligne->getCellIterator() as $cellule) { $contenu = trim($cellule->getValue()); if (!empty($contenu)) { $data[$compteurLigne][$cellule->getColumn()] = trim(stripslashes($contenu)); $data[$compteurLigne][$cellule->getColumn()] = str_replace("'","_",$data[$compteurLigne][$cellule->getColumn()]); $data[$compteurLigne][$cellule->getColumn()] = str_replace(CHR(10), "", $data[$compteurLigne][$cellule->getColumn()]); $data[$compteurLigne][$cellule->getColumn()] = str_replace(CHR(13), "", $data[$compteurLigne][$cellule->getColumn()]); $compteurColonne++; } else { $nullData++; } } if ($compteurColonne>0) { //$nullData != $compteurColonne $compteurLigne++; } } return $data; } /** * Permet d'écrire les données contenues dans un tableau, possédant des lettres en entête de colonne, sur un fichier au format Microsoft Excel 97-2003. Ces données peuvent être typés de manière général par la classe PHPExcel_Cell_DataType * @see PHPExcel_Cell_DataType.php * @param type $fichier Le chemin absolu du fichier à créer. Doit contenir l'extension .xls * @param type $numeroFeuille Le numéro de la feuille à écrire * @param type $nomFeuille Le nom à lui donner * @param type $data Un tableau de données sous la forme data[numéro de ligne][lettre de colonne] * @param type $attributsFichiers Un tableau d'attribut de données où les attributs correspondent à : 0->Créateur, 1->Auteur de la dernière modification, 2->Le titre du fichier, 3->Le sujet du fichier, 4->La description du fichier, 5->Les mots clés utiles au référencement système du fichier, 6-> La catégorie d'appartenance du fichier * @param type $typage Le typage correspond aux éléments statiques définis dans PHPExcel_Cell_DataType.php, la syntaxe de passage d'argument est donc sous la forme PHPExcel_Cell_DataType::TYPE_STRING */ function writingArrayWithLetterToExcel5WithType($fichier, $numeroFeuille, $nomFeuille, $data, $attributsFichiers, $typage) { $object = new PHPExcel(); $object->getProperties()->setCreator($attributsFichiers[0]) ->setLastModifiedBy($attributsFichiers[1]) ->setTitle($attributsFichiers[2]) ->setSubject($attributsFichiers[3]) ->setDescription($attributsFichiers[4]) ->setKeywords($attributsFichiers[5]) ->setCategory($attributsFichiers[6]); foreach ($data as $key => $ligne) { foreach ($ligne as $colonne => $valeur) { //if($fichier=="upload/filexls/99999_11_sortie.xls"){ //echo "j"; //exit(); $object->setActiveSheetIndex($numeroFeuille)->setCellValueExplicit('' . $colonne . ($key + 1), utf8_encode($valeur), $typage); //}else{ //$object->setActiveSheetIndex($numeroFeuille)->setCellValueExplicit('' . $colonne . ($key + 1), $valeur, $typage); //} } } $object->getActiveSheet()->setTitle($nomFeuille); $writer = new PHPExcel_Writer_Excel5($object); $writer->save($fichier); } /** * Permet d'extraire une quantité déterminée de ligne d'un fichier puis des les charger en mémoire sous forme de tableau ayant pour colonne des nombres * @param type $fichier Le chemin absolu vers le fichier * @param type $numeroFeuille Le numéro de la feuille à étudier * @param type $nombreLigneExtraite Le nombre de ligne voulu en mémoire. Attention la selection commence à la ligne 0 qui contiendra les entêtes * @return type data[][] Un tableau à deux dimensions possédant les caracteristiques suivantes : data[numéro de ligne][numéro de colonne] */ function readingExtractOfExcelToArrayWithNumber($fichier, $numeroFeuille, $nombreLigneExtraite) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $feuille = $objetPHPExcel->getSheet($numeroFeuille); $data = array(); $compteurColonne = 0; $compteurLigne = 0; // Parcours des lignes foreach ($feuille->getRowIterator() as $ligne) { // Parcours des colonnes $nullData = 0; $compteurColonne = 0; foreach ($ligne->getCellIterator() as $cellule) { $contenu = trim($cellule->getValue()); //if (!empty($contenu)) { $data[$compteurLigne][$compteurColonne] = trim(stripslashes($contenu)); $data[$compteurLigne][$compteurColonne] = str_replace("'","_",$data[$compteurLigne][$compteurColonne]); $data[$compteurLigne][$compteurColonne] = str_replace(CHR(10), "", $data[$compteurLigne][$compteurColonne]); $data[$compteurLigne][$compteurColonne] = str_replace(CHR(13), "", $data[$compteurLigne][$compteurColonne]); $compteurColonne++; //} else { // $nullData++; //} } //if ($nullData != $compteurColonne) { $compteurLigne++; //} if($compteurLigne > $nombreLigneExtraite) { break; } } return $data; } //Permet de compléter le fichier pour les action sans ciblage (une ligne de libellé avec une ligne de contenu function overwrittingArrayWithLetterToExcel5WithTypeNoCiblage($fichier, $numeroFeuille, $data, $typage) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $sheet = $objetPHPExcel->getSheet($numeroFeuille); $nombreColonne = 0; $nombreLigne = 2; for($k = 1; $k <= $nombreLigne; $k++) { $parcoursData = 0; for($j = $nombreColonne; $j < ($nombreColonne + sizeof($data[0])); $j++) { if($k == 1 ) { //$objetPHPExcel->setActiveSheetIndex($numeroFeuille)->setCellValueByColumnAndRow($j, $k, "Test", $typage); $objetPHPExcel->setActiveSheetIndex($numeroFeuille)->setCellValueByColumnAndRow($j, $k, $data[0][$parcoursData], $typage); } else { $objetPHPExcel->setActiveSheetIndex($numeroFeuille)->setCellValueByColumnAndRow($j, $k, $data[1][$parcoursData], $typage); } $parcoursData++; } } $writer = new PHPExcel_Writer_Excel5($objetPHPExcel); $writer->save($fichier); } function overwrittingArrayWithLetterToExcel5WithType($fichier, $numeroFeuille, $data, $typage) { $objetPHPExcel = PHPExcel_IOFactory::load($fichier); $sheet = $objetPHPExcel->getSheet($numeroFeuille); $nombreColonne = getNombreColonne($fichier, $numeroFeuille); $nombreLigne = getNombreLigne($fichier, $numeroFeuille); for($k = 1; $k <= $nombreLigne; $k++) { $parcoursData = 0; for($j = $nombreColonne; $j < ($nombreColonne + sizeof($data[0])); $j++) { if($k == 1 ) { //$objetPHPExcel->setActiveSheetIndex($numeroFeuille)->setCellValueByColumnAndRow($j, $k, "Test", $typage); $objetPHPExcel->setActiveSheetIndex($numeroFeuille)->setCellValueByColumnAndRow($j, $k, $data[0][$parcoursData], $typage); } else { //$objetPHPExcel->setActiveSheetIndex($numeroFeuille)->setCellValueByColumnAndRow($j, $k, $data[1][$parcoursData], $typage); $objetPHPExcel->setActiveSheetIndex($numeroFeuille)->getCellByColumnAndRow($j, $k)->setValueExplicit($data[1][$parcoursData], $typage); } $parcoursData++; } } $writer = new PHPExcel_Writer_Excel5($objetPHPExcel); $writer->save($fichier); } ?>