2009-12-07 10 views
3

Je joue avec une intégration PHP - MS Excel ces jours-ci. Ma tâche consiste à ouvrir une feuille de calcul existante, à ajouter des données et à enregistrer la feuille de calcul en tant que nouveau fichier. Fondamentalement sorte d'un moteur de remplissage de modèle, même si les fichiers xlsx sont utilisés comme modèles. J'ai regardé dans PHPExcel qui semble être cadre assez agréable. Afin de mettre en œuvre une preuve de concept que je ne les éléments suivants (réduit au minimum requis pour illustrer ce que je dois faire):PHPExcel - Le formatage est perdu lors de l'édition à partir du code

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

L'exécution de ce que j'ai trouvé qu'un nouveau fichier est créé, mon Daat est inséré mais malheureusement avec tout le formatage existant est perdu. Donc, la question est, est-il possible de faire en sorte que PHPExcel conserve ces formats dans le nouveau fichier ? Ou pour aller encore plus loin: est-il possible de conserver des graphiques, etc. dans un fichier modèle et de les remplir comme j'ai essayé?

Merci d'avance pour toute votre expérience partagée!

K

Répondre

2

Hum, vous créez une nouvelle feuille de calcul, Wich n'a pas le format par défaut. Je pense que vous devez ajouter vos valeurs à la feuille existante?

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

Bonjour, et merci pour la réponse! Fondamentalement, le problème est que la mise en forme des pages existantes est perdue. Mon insertion de données fonctionne correctement. – KB22

+0

Oui, parce que vous créez une nouvelle feuille de calcul, je pense que vous devez utiliser la feuille de calcul existante où vous souhaitez ajouter vos valeurs? – opHASnoNAME

6

Le formatage est perdu à cause de cette ligne $ objReader-> setReadDataOnly (true); qui indique au lecteur de lire seulement les données de votre classeur de modèle, pas la mise en forme.

Vous devez également modifier les données dans les feuilles de calcul existantes. Créer une nouvelle feuille de calcul créera une feuille de calcul non formatée. Vous pouvez également utiliser la méthode copy() PHPExcel_WorkSheet