4 votes

Impossible d'afficher correctement la date, l'heure et les chiffres à l'aide de PHPExcel

Voici ma première question sur stackoverflow. J'essaie d'utiliser PHPExcel pour créer un tableau HTML à partir d'un fichier .xlsx. Vous pouvez trouver mon projet sur : http://rahulr92.x10.mx/excel/index.php Connectez-vous avec le nom d'utilisateur 'admin' et vous trouverez une option pour 'Voir le tableau'. Cette page affiche un tableau à partir d'un fichier .xlsx précédemment téléchargé. Je suis nouveau sur PHPExcel et j'ai utilisé un code standard trouvé en ligne. Le voici :

setReadDataOnly(true);
$objPHPExcel = $objReader->load("..\excel.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow(); 
$highestColumn = $objWorksheet->getHighestColumn(); 
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); 
$user=strtolower($_GET['user']);
$r_count=0;
echo '' . "\n";
for ($row = 5; $row <= $highestRow; ++$row) {
if ($row <7 || $user=="admin" || strstr(strtolower($objWorksheet->getCellByColumnAndRow(8, $row)->getValue()),$user ))
 { 
 if($row>7)$r_count++;
 for ($col = 0; $col <= $highestColumnIndex; ++$col) {
      if(PHPExcel_Shared_Date::isDateTime($objWorksheet->getCellByColumnAndRow($col,$row)))
        echo '' ;
      else
        echo '' . "\n";
  }
   echo '' . "\n";
}
}
 echo '' . date("d M Y",PHPExcel_Shared_Date::ExcelToPHP($objWorksheet->getCellByColumnAndRow($col, $row))) . '' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '' . "\n";
 echo "Nombre d'entrées : ".$r_count;
?>

Désolé pour le code sub-optimal. Lorsque j'exécute le fichier php, j'obtiens un tableau et toutes les chaînes y sont affichées correctement, mais les champs de date et de nombre sont remplis avec des caractères apparemment aléatoires. Veuillez y jeter un œil depuis le lien ci-dessus. J'ai fait quelques recherches et découvert la fonction isDateTime() de cette manière. Mais cela ne fonctionne pas ou est peut-être utilisé de manière incorrecte. J'ai une date limite serrée pour ce projet, donc ce serait génial si quelqu'un pouvait me guider dans la bonne direction. Vraiment désolé si la réponse était très évidente. Merci beaucoup d'avance. Rahul

4voto

Mark Baker Points 90240

Ne définissez pas $objReader->setReadDataOnly(true); si vous voulez pouvoir identifier les valeurs de date/heure... Excel stocke les dates/heure en tant que nombres à virgule flottante, et la seule façon de différencier un nombre d'une date/heure est d'utiliser le masquage de format : isDateTime() utilise ce masquage de format pour identifier si une valeur est un nombre ou une date/heure... $objReader->setReadDataOnly(true) indique au lecteur de fichier de lire uniquement les données (les nombres) et d'ignorer les masques de format, il lit donc uniquement les données brutes.

Cependant, je ne suis pas sûr de comprendre exactement ce que vous voulez dire par "n'importe quoi"... les nombres devraient toujours s'afficher comme des nombres... pouvez-vous donner un exemple s'il vous plaît.

MODIFICATION

Remarquez que les méthodes de cellule telles que getFormattedValue() renverront des nombres tels qu'ils sont masqués dans le classeur, donc les valeurs de date/heure seront formatées en tant que dates/heures, les nombres seront affichés avec le nombre approprié de décimales, séparateurs de milliers ou devises ou pourcentages (s'ils avaient le formatage approprié dans le fichier Excel), donc vous n'avez pas besoin de tester isDateTime()... tant que $objReader->setReadDataOnly(true) n'a pas été défini pour le lecteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X