2017-04-01 1 views
0

Entrez 12:00 dans une cellule ODS et obtenir par défaut Format heure, puis setReadDataOnly(true)getValue(), la valeur est 25569,5, si le format de la cellule numéro, puis getValue() , la valeur est 0,5. Comment puis-je voir 12:00 dans ODS et getValue() = 0,5?php - PHPExcel setReadDataOnly (true) ne fonctionne pas avec ODS

+0

Salut W. Nel, en posant des questions sur le SO, il se révèle utile visuellement boeuf vos questions au lieu d'écrire tout sans mise en forme. En outre, partager une image avec l'erreur * pourrait être utile aux autres. Le formatage de votre code (ou des formules dans votre cas) est aussi simple que de les "citer" ou d'utiliser un bloc de code en retrait seul. –

Répondre

0

Vous ne pouvez pas voir la date/heure en ODS (ou xlsx ou xls, etc.) à l'aide PHPExcel si vous avez utilisé setReadDataOnly(true) ....

Le point de setReadDataOnly(true) tout est qu'il ne lit que la le contenu brut d'une cellule, sans aucune information de mise en forme, telle que celle qui identifie la cellule comme contenant une valeur date/heure. Excel stocke les valeurs date/heure sous la forme d'un horodatage sérialisé, le nombre de jours depuis une date de début de base (1er janvier 1900 ou 1er janvier 1904, en fonction du paramètre de calendrier), en tant que valeur à virgule flottante. Ce qui identifie cela comme une valeur date/heure est le masque de format numérique, qui spécifie comment ce flottant doit être affiché.

PHPExcel reproduit ce comportement, et si vous chargez la feuille de calcul avec setReadDataOnly(false), puis getValue() retournera l'horodatage sérialisé, alors que getFormattedValue() appliquera le masque de format numérique et retourner une chaîne date/heure formatée. Inversement, si vous chargez le fichier avec setReadDataOnly(true), il est impossible que le code identifie ce flottant comme une valeur date/heure, ou sachez comment il doit être formaté autrement que comme flottant, car vous avez choisi de ne pas charger le formatage information qui permettrait cette identification aussi être faite.

TL/DR Ne pas utiliser setReadDataOnly(true) si vous voulez PHPExcel pour être en mesure d'identifier les valeurs date/heure que les dates/heures

+0

Permettez-moi de reformuler la question: J'entre "12:00" dans une cellule Excel2007, enregistrez le fichier sous test.xlsx, je vois "12:00" quand j'utilise Excel open test.xlsx, puis j'utilise PHP setReadDataOnly (true) et getValue(), le résultat est 0.5, cela fonctionne pour Excel2007. Je tape "12:00" dans une cellule Libre Calc, enregistre le fichier sous test.ods, je vois "12:00" quand j'utilise LibreOffice open test.ods, puis j'utilise setReadDataOnly (true) et getValue(), le le résultat est 25569.5, cela ne fonctionne pas pour ODS. Si je formate la cellule en tant que nombre dans test.ods, je vois "0.5" quand j'utilise LibreOffice, et getValue() est 0.5. –

+0

OK! Vous pouvez le signaler comme un bug dans le [PHPExcel] (https://github.com/PHPOffice/PHPExcel/issues) ODS Reader; il devrait lire la valeur comme 0.5, pas comme 25569.5. Cependant, il ne sera pas corrigé pour PHPExcel .... le développement de PHPExcel a été remplacé par le développement de la prochaine génération [PHPSpreadsheet] (https://github.com/PHPOffice/PhpSpreadsheet/issues); donc mieux de signaler le bug là. –

+0

Merci @Mark. J'ai ouvert un problème # 1172: PHPExcel ODS Reader getValue() renvoie un mauvais numéro pour Time. –