PHPExcel, Date être analysé de manière incorrecte
Actuellement, je suis en train de faire un programme pour mon travail qui utilise PHPexcel essentiellement de prendre toutes les données d'une feuille excel, créez une nouvelle feuille excel et au format texte, et le transfert de toutes les données de la vieille feuille excel.
Mon php doit être en mesure de prendre dans les valeurs de la vieille feuille excel et de les interpréter correctement, en particulier les dates de/nombre de/etc.
Tout fonctionne bien sauf pour les dates. Pour une raison quelconque, quand je reçois la valeur mise en forme de la cellule; il ne correspond pas au format de la date dans la première feuille. Plus spécifiquement, une valeur comme ceci: 12/31/2099 . Pour une raison quelconque, il lit le formatcode incorrectement comme mm-jj-aa et sorties 12-31-99. C'est extrêmement frustrant et j'ai parcouru la moitié de l'internet pour une réponse. De l'aide s'il vous plaît; je ne suis pas sûr de ce qu'est la question! Code:
<?php
$spreadSheet=$_FILES["filebrowser"]["tmp_name"];
/** PHPExcel_IOFactory */
require_once 'Classes/PHPExcel/IOFactory.php';
require_once 'Classes/PHPExcel/Shared/Date.php';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
//Create temporary sheet from uploaded file data
$objPHPExcel = $objReader->load($spreadSheet);
$sheet = $objPHPExcel->getActiveSheet();
$sheet->setTitle("Original Data");
$data=$sheet->getCell("D9")->getFormattedValue();
var_dump($data);
exit;?>
D9 est une cellule avec le format de DATE et d'une valeur de 12/31/2099. Ce code imprime 12-31-99...
getValue() récupère les données brutes de la valeur de la cellule et renvoie un float.
À partir de ce que je peux dire ici (phpexcel.codeplex.com/discussions/371418), vous devez être en mesure d'utiliser Date: le Temps de convertir le format de date que vous souhaitez.
Oui, mais quand je rentre le code du format de la cellule, il renvoie un code de format mm-jj-aa au lieu de le mettre au bon format... Donc si j'essaie de faire quelque chose comme cela, il ne fonctionne pas: $s= $feuille->getCell("D9")->getValue(); $d=PHPExcel_Shared_Date::ExcelToPHP($s); $form=$feuille->getStyle("D9")->getNumberFormat()->getFormatCode(); var_dump(date($form,$d));
c'est une partie du problème, je ne peux pas explicitement définir le format de l'utilisateur, j'ai besoin de la formater pour pouvoir être générique basé sur ce que l'utilisateur a donné via excel.
OriginalL'auteur Joseph Amato | 2013-07-11
Vous devez vous connecter pour publier un commentaire.
À l'aide de PHPExcel v1.7.9
Ouvrir le fichier
"PHPExcel\Style\NumberFormat.php"
Aller à la Ligne 278:
remplacer avec
ou n'importe quel format que vous voulez.
Je ne peux pas trouver un moyen efficace de changer à la volée et je n'ai aucune raison de jamais le format de la date dans toute autre façon que ce donc cette solution qui fonctionne pour moi.
Merci pour cette belle réponse @steve, mais pour moi œuvres ligne n ° 270 self::$_builtInFormats[14] = 'mm-jj-aa';: self::$_builtInFormats[14] = 'yyyy-mm-dd'
OriginalL'auteur steve
À l'aide v1.7.8 et en supposant Excel2007 aka
.xlsx
fichierLaissez-moi vous expliquer chaque ligne.
Vous êtes de gauche avec de décider ce que les formats de date pour écrire la valeur dans le fichier excel. Ma suggestion est que vous décider avec les parties prenantes que TOUTES les dates de destination des fichiers excel va suivre un format particulier.
C'est la façon la plus propre je pense.
P. S. Si vous avez une cellule vide, et vous essayez de faire la
PHPExcel_Shared_Date::ExcelToPHP
sur la valeur de la cellule, vous obtiendrez la date actuelle.Mise à JOUR
Viens de réaliser que vos commentaires mentionner vous ne pouvez pas décider arbitrairement le format. Désolé à ce sujet. Si je tombe sur quelque chose qui aide, je vais mettre à jour cette réponse.
OriginalL'auteur Kim Stacks
Je viens de tomber sur votre question.
si vous connaissez le format excel est l'enregistrement de la date, vous pouvez utiliser la classe PHP
DateTime
comme intermédiaire date de représentationoù
$format
est le format que vous souhaitezOriginalL'auteur Nashwan