pv_project/site/config/lib_personal_PhPExcel.php
2025-07-17 10:15:19 +02:00

363 lines
15 KiB
PHP

<?php
/**
* Librairie d'utilisation de PHPExcel version 1.7.8, 2012-10-12
* Toute modification sur cette librairie peut entrainer des conséquences néfastes sur l'utilisation des fonctions suivantes.
* @version 1.0 - 13/11/2012
*/
// Librairies utilisées pour l'utilisabilité de la librairie présente
include('PHPExcel/Classes/PHPExcel/IOFactory.php');
include('PHPExcel/Classes/PHPExcel/Cell/DataType.php');
include('PHPExcel/Classes/PHPExcel/RichText.php');
include('PHPExcel/Classes/PHPExcel.php');
include('PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');
/**
* Retourne le nombre total de colonne présent d'ans la feuille'une feuille
* @param type $fichier Le chemin absolu vers le fichier
* @param type $numeroFeuille Le numéro de la feuille à étudier
* @return int Le nombre de colonne
*/
function getNombreColonne($fichier, $numeroFeuille) {
$objetPHPExcel = PHPExcel_IOFactory::load($fichier);
$feuille = $objetPHPExcel->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("'","&acute;",$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);
}
?>