363 lines
15 KiB
PHP
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("'","´",$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);
|
||
|
|
}
|
||
|
|
|
||
|
|
?>
|