web-dev-qa-db-fra.com

Fusion de cellules dans Excel par lignes et colonnes à l'aide de PHPExcel

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).

enter image description here

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?

16
Tiny

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));              
22
Mark Baker

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)
8
Darkhan ZD
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))
3
Alexej

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

3
jashk

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.

Lien source

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),
)
));
0
pankaj