Saltar al contenido

PHPExcel: creación de varias hojas por iteración

Es fundamental entender el código de forma correcta antes de utilizarlo a tu trabajo y si tquieres aportar algo puedes decirlo en los comentarios.

Solución:

no necesitas llamar addSheet() método. Después de crear la hoja, ya se agrega a Excel. Aquí arreglé algunos códigos:

    //First sheet
    $sheet = $objPHPExcel->getActiveSheet();

    //Start adding next sheets
    $i=0;
    while ($i < 10) 

      // Add new sheet
      $objWorkSheet = $objPHPExcel->createSheet($i); //Setting index when creating

      //Write cells
      $objWorkSheet->setCellValue('A1', 'Hello'.$i)
                   ->setCellValue('B2', 'world!')
                   ->setCellValue('C1', 'Hello')
                   ->setCellValue('D2', 'world!');

      // Rename sheet
      $objWorkSheet->setTitle("$i");

      $i++;
    

Complementando el comentario de @Mark Baker.
Haz lo siguiente:

$titles = array('title 1', 'title 2');
$sheet = 0;
foreach($array as $value)
    if($sheet > 0)
        $objPHPExcel->createSheet();
        $sheet = $objPHPExcel->setActiveSheetIndex($sheet);
        $sheet->setTitle("$value");
        //Do you want something more here
    else
        $objPHPExcel->setActiveSheetIndex(0)->setTitle("$value");
    
    $sheet++;
  

Esto funcionó para mí. ¡Y espero que funcione para aquellos que lo necesitan! 🙂

Cuando crea una instancia de $objPHPExcel por primera vez, ya tiene una sola hoja (hoja 0); luego está agregando una nueva hoja (que se convertirá en la hoja 1), pero configurando la hoja activa en la hoja $i (cuando $i es 0) … entonces está cambiando el nombre y llenando la hoja de trabajo original creada cuando instanciaste $objPHPExcel en lugar del que acaba de agregar… este es su título “0”.

También está utilizando el método createSheet(), que crea una nueva hoja de trabajo y la agrega al libro de trabajo… pero también la está agregando nuevamente, lo que efectivamente está agregando la hoja en dos posiciones.

Entonces, en la primera iteración, ya tiene la hoja 0, agrega una nueva hoja en ambos índices 1 y 2, y edita/titula la hoja 0. Segunda iteración, agrega una nueva hoja en ambos índices 3 y 4, y edita/titula la hoja 1, pero debido a que tiene la misma hoja en los índices 1 y 2, esto efectivamente escribe en la hoja en el índice 2. Tercera iteración, agrega una nueva hoja en los índices 5 y 6, y edita/titula la hoja 2, sobrescribiendo su anterior edición/título de la hoja 1 que actuó contra la hoja 2 en su lugar…. y así sucesivamente

Ten en cuenta comunicar esta crónica si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *