J'ai besoin de fusionner des cellules dans Excel (xlsx) par lignes et à nouveau par colonnes à l'aide de PHPExcel
. J'ai essayé le suivant.
$sheet->mergeCells("G".($row_count+1).":G".($row_count+4));
$sheet->mergeCells("H".($row_count+1).":H".($row_count+4));
$sheet->mergeCells("I".($row_count+1).":I".($row_count+4));
Où la variable $row_count
a une valeur dynamique imprévisible comme 25, 50, 75 et ainsi de suite (pas de modèle régulier).
Il fusionne les cellules comme indiqué dans le précédent instantané comme on peut le voir immédiatement sous la cellule Note. Après avoir fusionné ces cellules par rangées, j'essaie de les fusionner par colonnes comme suit.
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
mais ça ne marche pas. Lorsque j'essaie d'ouvrir le fichier Excel, il me demande une confirmation (avec une boîte de confirmation)
Excel a trouvé du contenu illisible dans 'report.xlsx'. Veux-tu récupérer le contenu de ce classeur? Si vous faites confiance à la source de ceci classeur, cliquez sur Oui.
Comment fusionner des cellules par lignes et par colonnes dans Excel?
La fusion nécessite simplement une plage valide de cellules comme A1: B2, de sorte que votre
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
devrait fonctionner sans aucun problème.
Pouvez-vous s'il vous plaît expérimenter avec un cas de test simple pour prouver que cela vous cause un problème, et non quelque chose d'autre dans votre script
MODIFIER
Après avoir relu votre question: Votre problème peut être que vous essayez de fusionner des cellules qui font déjà partie d’une plage de fusion, plutôt que de fusionner chaque ligne, puis de fusionner par colonne, essayez de fusionner la plage complète en une fois.
$sheet->mergeCells("G".($row_count+1).":I".($row_count+4));
Il existe une méthode supplémentaire pour la fusion de cellules
/**
* Set merge on a cell range by using numeric cell coordinates
*
* @param int $pColumn1 Numeric column coordinate of the first cell
* @param int $pRow1 Numeric row coordinate of the first cell
* @param int $pColumn2 Numeric column coordinate of the last cell
* @param int $pRow2 Numeric row coordinate of the last cell
* @throws Exception
* @return PHPExcel_Worksheet
*/
public function mergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1)
function cellsToMergeByColsRow($start = -1, $end = -1, $row = -1){
$merge = 'A1:A1';
if($start>=0 && $end>=0 && $row>=0){
$start = PHPExcel_Cell::stringFromColumnIndex($start);
$end = PHPExcel_Cell::stringFromColumnIndex($end);
$merge = "$start{$row}:$end{$row}";
}
return $merge;
}
Ajout à l'affaire:
$objPHPExcel->getActiveSheet()->mergeCells(cellsToMergeByColsRow(0,2,3))
Je crée une fonction simple pour calculer les cellules à fusionner par colonnes et par rangées.
function cellsToMergeByColsRow($start = NULL, $end = NULL, $row = NULL){
$merge = 'A1:A1';
if($start && $end && $row){
$start = PHPExcel_Cell::stringFromColumnIndex($start);
$end = PHPExcel_Cell::stringFromColumnIndex($end);
$merge = "$start{$row}:$end{$row}";
}
return $merge;
}
Et appeler
$sheet->mergeCells(cellsToMergeByColsRow($col, $col+5, $row));
Merci @ Baker Baker
Je cherchais aussi une solution à cette question. où je veux fusionner la cellule et mettre le contenu (valeur) sur cela. Après quelques recherches, j'ai eu une solution à ce sujet. mais n'a pas vérifié parce que j'utilise Maatawebsite pour obtenir le fichier Excel.
Mais tout le monde peut essayer quelque chose. La solution est basée sur PHPExcel Nit, cela fonctionnera sur Maatawebsite.
Fusionner de la colonne A ligne 1 à la colonne E ligne 1
$objPHPExcel->getActiveSheet()->mergeCells('A1:E1');
// add some text
$objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.');
Fusion de la colonne A de la ligne 1 à la colonne E ligne 3
$objPHPExcel->getActiveSheet()->mergeCells('A1:E3');
// add some text
$objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.');
J'ai vérifié le document maatawebsite et ils ont la même méthode mergeCells. donc je pense que je serais un travail.
Cette solution de Maatawebste.
$sheet->cells('A1:C1', function($cells) {
$cells->setBorder('thin', 'thin', 'thin', 'thin');
});
$sheet->mergeCells('A1:C1');
2ème solution
$sheet->setMergeColumn(array(
'columns' => array('A','B','C','D'),
'rows' => array(
array(2,3),
array(5,11),
)
));