PHPExcel, Datum wird falsch analysiert
Derzeit mache ich ein Programm für meine Arbeit verwendet, PHPexcel, um im Grunde nehmen die sich alle die Daten aus einer excel-Tabelle, erstellen Sie eine neue excel-Tabelle und formatieren Sie text, und übertragen Sie die Daten aus dem alten excel-Blatt.
Meine php muss in der Lage sein in der Werte aus der alten excel-sheet und analysieren Sie Sie korrekt vor allem Daten/zahlen/etc.
Alles ist in Ordnung, außer für die Termine. Aus irgendeinem Grund, wenn ich den formatierten Wert der Zelle; es entspricht nicht der Datum-format in das erste Blatt. Insbesondere ein Wert wie dieser: 12/31/2099 . Aus irgendeinem Grund liest er den formatcode fälschlicherweise als mm-dd-yy und Ausgänge 12-31-99. Das ist extrem frustrierend und ich habe durchforstet halbe internet nach einer Antwort. Hilfe bitte; ich bin mir nicht sicher, was das Problem ist! 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 ist eine Zelle mit Datumsformat und ein Wert von 12/31/2099. Dieser code druckt 12-31-99...
getValue() liefert den raw-Daten Wert von Zelle und gibt einen float.
Was ich sagen kann, hier (phpexcel.codeplex.com/discussions/371418) Sie sollten in der Lage sein, dann verwenden Sie Datum: Zeit zum konvertieren von Datum-format, das Sie möchten.
Ja, aber wenn ich den format-code aus der Zelle, gibt es eine format-code von mm-dd-yy, anstatt das richtige format... Also, wenn ich versuche, so etwas zu tun, funktioniert es nicht: $s= $sheet->getCell("D9")->getValue(); $d=PHPExcel_Shared_Date::ExcelToPHP($s); $form=$sheet->getStyle("D9")->getNumberFormat()->getFormatCode(); var_dump(date($form,$d));
das ist Teil des Problems, ich kann es nicht explizit definieren Sie das format für die Benutzer, ich brauche das format um in der Lage sein, um ein Allgemeines basierend auf was der Benutzer gegeben hat, die über excel.
InformationsquelleAutor Joseph Amato | 2013-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung von PHPExcel v1.7.9
Datei öffnen
"PHPExcel\Style\NumberFormat.php"
Gehe zu Zeile 278:
ersetzen mit
oder welchem format auch immer Sie wollen.
Ich nicht finden können, eine effiziente Möglichkeit, es zu ändern on the fly, und ich habe keinen Grund, immer das Datum zu formatieren, in keiner Weise anders als diese, so dass diese Lösung funktioniert für mich.
Vielen Dank für solch nette Antwort @steve, aber bei mir funktioniert der Linie 270 self::$_builtInFormats[14] = 'mm-dd-yy';: self::$_builtInFormats[14] = 'yyyy-mm-dd'
InformationsquelleAutor steve
Mit v1.7.8 und vorausgesetzt, Excel2007 aka
.xlsx
DateiLassen Sie mich erklären, jede Zeile.
Bist du Links, mit der Entscheidung, was Datumsformate schreiben Sie den Wert in die Ziel-excel-Datei. Mein Vorschlag ist, dass Sie sich entscheiden, mit den Akteuren, die ALLE Daten im Ziel-excel-Dateien werden in einem bestimmten format.
Dies ist die sauberste Art, wie ich denken kann.
P. S. Wenn Sie eine leere Zelle, und Sie versuchen, die
PHPExcel_Shared_Date::ExcelToPHP
auf die Zelle mit dem Wert, erhalten Sie das aktuelle Datum.UPDATE
Einfach gemerkt, dass Ihre Kommentare erwähnen, Sie können nicht willkürlich entscheiden das format. Tut mir Leid, dass. Wenn ich auf etwas stoßen, das hilft, werde ich auf diese Antwort.
InformationsquelleAutor Kim Stacks
Ich kam gerade über Ihre Frage.
wenn Sie wissen in welchem format die excel speichert das Datum, dann können Sie mit der PHP-Klasse
DateTime
als Zwischenprodukt Datum Darstellungwo
$format
ist ein beliebiges format Sie möchtenInformationsquelleAutor Nashwan