PHPExcel - kodundan düzenlerken Biçimlendirme kaybolursa

2 Cevap php

I'm playing around with an PHP - MS Excel integration these days. My task is to open an existing spreadsheet, add some data and save the filled spreadsheet as a new file. Basically sort of a template filling engine, eventhough xlsx files are used as templates.

I looked into PHPExcel which seems to be fairly nice framework. In order to implement a proof of concept I did the following (reduced to the minimum required to illustrate what I need to do):

$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');

Running this I found that a new file is created, my daat is inserted but sadly with all of the existing formatting is lost.

So the question is, is there a way to make PHPExcel keep those formattigs in the new file? Or to go even further: is it possible to keep charts etc. in a template file and fill those the way I tried?

Deneyim paylaşılan tüm için şimdiden teşekkürler!

K

2 Cevap

Hum, bir yeni çalışma sayfası oluştururken, wich varsayılan olarak hiçbir biçimi vardır. Ben mevcut sayfasına kendi değerlerini eklemek zorunda düşünüyorum?

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

Formatting is lost because of this line $objReader->setReadDataOnly(true); which tells the reader to read only the data from your template workbook, not the formatting.

Ayrıca, mevcut çalışma sayfalarındaki verileri değiştirmek gerekir. Yeni bir çalışma sayfası oluşturma biçimlendirilmemiş bir çalışma sayfası yaratacaktır. Alternatif olarak, PHPExcel_WorkSheet kopyasını () yöntemini kullanabilirsiniz