2012-06-06 137 views
14

Necesito unir celdas en Excel (xlsx) por filas y otra por columnas usando PHPExcel. Intenté lo siguiente.Fusionando celdas en Excel por filas y columnas usando PHPExcel

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

donde la variable $row_count tiene algún valor dinámico impredecible como 25, 50, 75 y así sucesivamente (sin patrón regular).

enter image description here

se une a las células como se muestra en la snap shot anterior como puede verse inmediatamente debajo de la celular Nota. Después de fusionar estas celdas por filas, intento fusionarlas por columnas de la siguiente manera.

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));    

pero no funciona. Cuando trato de abrir el archivo Excel, solicita una confirmación (con un cuadro de confirmación)

Excel encontró contenido ilegible en 'report.xlsx'. ¿Desea recuperar el contenido de este libro de trabajo? Si confía en el origen de este libro de trabajo , haga clic en Sí.

¿Cómo combinar las celdas por filas y columnas juntas en Excel?

Respuesta

20

La fusión requiere simplemente un rango válido de las células como A1: B2, por lo que su

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1)); 

debería funcionar sin ningún problema.

¿Puede usted por favor experimentar con un caso simple prueba para demostrar que esto es lo que causa un problema, y ​​no otra cosa en su script

EDITAR

Después de volver a leer su pregunta: su problema puede ya sea que esté intentando fusionar celdas que ya forman parte de un rango de fusión, en lugar de fusionar cada fila, luego intente combinarlas por columna, intente fusionar toda la gama de una sola vez.

$sheet->mergeCells("G".($row_count+1).":I".($row_count+4));    
+0

Funcionó como se esperaba. Gracias. – Tiny

+0

@markBaker, ya utilicé PHPExcel y solo tengo detalles para contar sobre esta biblioteca.Ahora estoy trabajando con Aspose para un proyecto de Java y hay una limitación para esta biblioteca que parece que PHPExcel también tiene ... No podemos fusionar las celdas ya fusionadas con una nueva. ¿Sabes por qué? – periback2

+0

Principalmente porque es doloroso manejar el código y agrega una sobrecarga para cada combinación, probando si es parte de una combinación existente y amalgamando las dos si es ... y que no puede proporcionar ningún comentario cuando lo hace –

2

Realizo una función simple para calcular las células para fusionarlas por cols y row.

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; 
} 

Y llama

$sheet->mergeCells(cellsToMergeByColsRow($col, $col+5, $row)); 

Gracias @ Marcos panadero

+0

Es posible que desee utilizar las funciones auxiliares integradas PHPExcel_Cell :: columnIndexFromString() y PHPExcel_Cell :: stringFromColumnIndex() en lugar de su propio chr/floor/etc porque ya están incorporados –

+0

Gracias a mencionar estos ayudantes – jashk

3
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; 
} 

Además del caso:

$objPHPExcel->getActiveSheet()->mergeCells(cellsToMergeByColsRow(0,2,3)) 
8

Hay otro método para la fusión celular

/** 
* 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) 
Cuestiones relacionadas