5 Stimmen

PHPExcel - Formatierung geht beim Bearbeiten aus dem Code verloren

Ich spiele dieser Tage mit einer PHP - MS Excel Integration herum. Meine Aufgabe ist es, ein bestehendes Tabellenblatt zu öffnen, einige Daten hinzuzufügen und die gefüllten Tabellenkalkulation als neue Datei zu speichern. Im Grunde genommen eine Art Template-Füllmaschine, auch wenn xlsx-Dateien als Vorlagen verwendet werden.

Ich habe mir PHPExcel was ein ziemlich guter Rahmen zu sein scheint. Um Konzept zu implementieren, habe ich das Folgende getan (reduziert auf das Minimum erforderlich, um zu veranschaulichen, was ich tun muss):

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);  
$objPHPExcel = $objReader->load("myTemplateToFill.xlsx");

    //Here comes the actual filling
$objWorksheet = $objPHPExcel->createSheet();
$objWorksheet->setTitle('Apple')    ;
$objWorksheet->setCellValue('A1', 'Banana');    
$objPHPExcel->setActiveSheetIndex(0);

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save('myFilledTemplate.xlsx');

Wenn ich dies ausführe, wird eine neue Datei erstellt, meine Datei wird eingefügt, aber leider mit alle vorhandenen Formatierungen verloren gehen.

Die Frage ist also, ob es einen Weg gibt, PHPExcel dazu zu bringen, diese Formatierungen in der neuen Datei zu behalten? Oder um noch weiter zu gehen: Ist es möglich, Diagramme usw. in einer Vorlagendatei zu speichern und diese so zu füllen, wie ich es versucht habe?

Vielen Dank im Voraus für alle Ihre Erfahrungen, die Sie uns mitgeteilt haben!

K

9voto

Mark Baker Punkte 204969

Die Formatierung geht wegen dieser Zeile verloren $objReader->setReadDataOnly(true); die dem Leser sagt, dass er Folgendes lesen soll sólo die Daten aus Ihrer Vorlagen-Arbeitsmappe, nicht die Formatierung.

Sie müssen auch die Daten in den vorhandenen Arbeitsblättern ändern. Wenn Sie ein neues Arbeitsblatt erstellen, wird ein unformatiertes Arbeitsblatt erzeugt. Alternativ dazu können Sie die Methode PHPExcel_WorkSheet copy() verwenden

4voto

opHASnoNAME Punkte 19426

Hum, Sie erstellen ein neues Arbeitsblatt, das standardmäßig kein Format hat. Ich denke, Sie müssen Ihre Werte in das bestehende Blatt einfügen.

$objPHPExcel->setActiveSheetIndex(0); // index of sheet
$workSheet = $objPHPExcel->getActiveSheet();
$workSheet->setTitle('Pflaume');

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X