entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

¿Cómo puedo agregar una hoja a excel por medio de phpexcel?

Estoy importando unos registros de php a excel pero requiero de agregar mas hojas para agregar otros registros.

Alguien e puede recomendar alguna pagina o algun ejemplo que tengan....

use

$objWorksheet1 = $objPHPExcel->createSheet();
$objWorksheet1->setTitle('Another sheet');

pero no me funciono

3 Respuestas

3votos

carlossevi Puntos63580

Te dejo la documentación al respecto. Te hago un resumen rápido:

Para crear una hoja nueva:

$objPHPExcel->createSheet();

El problema es que con ese método no tienes control sobre el nombre de la hoja creada. Sucede como en algunos programas de ofimática (ej. Excel) en los que la hoja coge el siguiente número libre (Ej. "Worksheet05").

Como alternativa proponen crear una hoja independiente para posteriormente adjuntársela al libro:

// Create a new worksheet called "My Data"
$myWorkSheet = new PHPExcel_Worksheet($objPHPExcel, 'My Data');

// Attach the "My Data" worksheet as the first worksheet in the PHPExcel object
$objPHPExcel->addSheet($myWorkSheet, 0);

Espero que te sirva.

0voto

dairon comentado

mano yo nunca he usado eso pero y si el primero elimina todas las hojas ?? para comenzar en un libro limpio, funcionaría ??

0voto

cind10 comentado

carlossevi gracias por tu aporte pero ya agregue esas lineas y no me genera la nueva hoja, qué hago?

0voto

carlossevi comentado

¿Puedes poner el código que tienes para ver si con algo de tiempo podemos montar un test y probar a reproducirlo?

0voto

cind10 comentado

claro este es el código que utilizo para generar el excel:

$objPHPExcel = new PHPExcel();
    // configuramos las propiedades del documento
    $this->phpexcel->getProperties()->setCreator("CIN10")
                                 ->setLastModifiedBy("INFORMATION")
                                 ->setTitle("Office 2007 XLSX Test Document")
                                 ->setSubject("Office 2007 XLSX Test Document")
                                 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                                 ->setKeywords("office 2007 openxml php")
                                 ->setCategory("Test result file");

$y = 7;
$this->phpexcel->setActiveSheetIndex(0)
    ->setCellValue("A".$y,'INF1')
    ->setCellValue("B".$y,'INF2')
    ->setCellValue("C".$y,'INF3')
    ->setCellValue("D".$y,'INF4')
    ->setCellValue("E".$y,'INF5')
    ->setCellValue("F".$y,'INF6')
    ->setCellValue("G".$y,'INF7')
    ->setCellValue("H".$y,'INF8')
    ->setCellValue("I".$y,'INF9')
    ->setCellValue("J".$y,'INF10')
    ->setCellValue("K".$y,'INF11')
    ->setCellValue("L".$y,'INF12')
    ->setCellValue("M".$y,'INF13')
    ->setCellValue("N".$y,'INF14');

$this->phpexcel->getActiveSheet()
    ->getStyle('A7:N7')
    ->getFill()
    ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
    ->getStartColor()->setARGB('FFEEEEEE');

$borders = array(
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_BORDER::BORDER_THIN,
            'color' => array('argb' => '00000000'),
            )
        ),
    );
$this->phpexcel->getActiveSheet()
->getStyle('A7:N7')
->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER)
->applyFromArray($borders);

    $this->phpexcel->setActiveSheetIndex(0)
                ->setCellValue('D3', 'INFORMATION');
                $this->phpexcel->getDefaultStyle()->getFont()->setSize(25);
                $this->phpexcel->getActiveSheet()->mergeCells('D3:L3');
                $this->phpexcel->getActiveSheet()->getStyle('D3:L3')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

      $this->phpexcel->getActiveSheet()->setTitle('Registro');

//Fuente
$this->phpexcel->getDefaultStyle()->getfont()->setName("Arial");
$this->phpexcel->getDefaultStyle()->getFont()->setSize(10);
//Tamaño deceldas
$this->phpexcel->getActiveSheet()->getRowDimension('7')->setRowHeight(20);
$this->phpexcel->getActiveSheet()->getColumnDimension('A')->setWidth(10)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('B')->setWidth(40)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('C')->setWidth(40)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('D')->setWidth(20)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('E')->setWidth(20)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('F')->setWidth(15)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('G')->setWidth(35)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('H')->setWidth(15)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('I')->setWidth(10)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('J')->setWidth(10)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('K')->setWidth(10)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('L')->setWidth(10)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('M')->setWidth(10)->setAutoSize(true);
$this->phpexcel->getActiveSheet()->getColumnDimension('N')->setWidth(10)->setAutoSize(true);

$borders = array(
    'borders' => array(
        'allborders' => array(
            'style' => PHPExcel_Style_BORDER::BORDER_THIN,
            'color' => array('argb' => '00000000'),
            )
        ),
    );
     $this->phpexcel->getActiveSheet()
            ->getStyle('A7:N7')
            ->applyFromArray($borders);

    $this->phpexcel->setActiveSheetIndex(0)
    ->getStyle('A'.$y.":N".$y)
    ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER)
    ->applyFromArray($borders);

     $sql = mysql_query("SELECT * FROM BD");
     while ($row = mysql_fetch_array($sql)) {
         $Id = $row['INFO1'];
         $Nombre = $row['INFO2'];
         $y++;
        // Bordes a celdas creadas porlaconsulta
         $this->phpexcel->setActiveSheetIndex(0)
            ->getStyle('A'.$y.":N".$y)
            ->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER)
            ->applyFromArray($borders);

        // Mostramos los valores
        $this->phpexcel->setActiveSheetIndex(0)
                 ->setCellValue('A'.$y, $Id)
                 ->setCellValue('B'.$y, $Nombre);
     }

    $this->phpexcel->setActiveSheetIndex(0);
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="ancho_banda.xlsx"');
    header('Cache-Control: max-age=0');

    $objWriter = PHPExcel_IOFactory::createWriter($this->phpexcel, 'Excel2007');
    $objWriter->save('php://output');

0voto

carlossevi comentado

¿Y en qué parte estás intentando crear una hoja nueva?

0voto

cind10 comentado

es lo que quiero saber, en que parte se debe hacer y cómo? @carlossevi gracias por seguir respondiendome :) ... ojala me puedas ayudar

2votos

white Puntos75880

Antes de esta linea:

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

agrega esto:

$nueva_hoja = $this->phpexcel->createSheet();

$this->phpexcel->setActiveSheetIndex(1); // marcar como activa la nueva hoja
$nueva_hoja->setTitle('nueva hoja ^^'); // definimos el titulo

$nueva_hoja->getColumnDimension('A')->setAutoSize(true);
$nueva_hoja->setCellValue('A1',' Mi nueva hoja creada :) ');

PD: $nueva_hoja te devuelve una instancia de la clase PHPExcel_Worksheet. es lo mismo que usar getActiveSheet() recuerda usar setActiveSheetIndex( n ) donde n es el indice de la nueva hoja.

saludos!

2votos

rach Puntos6010

hola, te dejo lo que yo ocupo con esta librería

    $objPHPExcel->removeSheetByIndex(0);
$index =0;

data($objPHPExcel,$index,"Data");
$index++;  
missing($objPHPExcel,$index,"Utilization");
$index++;
canceled($objPHPExcel,$index,$title);
$index++;
unsuc($objPHPExcel,$index,$Unsuccess);
$index++;
activity($objPHPExcel,$index,"Activity");

luego las mandas llamar y llenas tu info

    function data($objPHPExcel,$index,$title)
{
  global $ip,$connection;
  $currentSheet= createSheet($objPHPExcel);
  $currentSheet= $objPHPExcel->getSheet($index);
  $currentSheet->setTitle($title);
  $currentSheet ->setCellValue('A1', 'Team')
                ->setCellValue('B1', 'Successful')
                ->setCellValue('C1', 'Unsuccessful')
                ->setCellValue('D1', 'Signum')

                ->setCellValue('E1', 'Week')
                ->setCellValue('F1', 'Sum of Productive')
                ->setCellValue('G1', 'Sum of Non-Productive')

                ->setCellValue('H1', 'Team')
                ->setCellValue('I1', 'LM')
                ->setCellValue('J1', 'Resource Name')
                ->setCellValue('K1', 'signum');
  $currentSheet->getColumnDimension('A')->setWidth(20);
  $currentSheet->getColumnDimension('B')->setWidth(15); 
  $currentSheet->getColumnDimension('C')->setWidth(15);
  $currentSheet->getColumnDimension('D')->setWidth(15);
  $currentSheet->getColumnDimension('E')->setWidth(15);
  $currentSheet->getColumnDimension('F')->setWidth(20);
  $currentSheet->getColumnDimension('G')->setWidth(30);
  $currentSheet->getColumnDimension('H')->setWidth(20);
  $currentSheet->getColumnDimension('I')->setWidth(40);
  $currentSheet->getColumnDimension('J')->setWidth(40);
  $currentSheet->getColumnDimension('K')->setWidth(15);

  $currentSheet->getStyle("H1:K1")->getFont()->setBold(false)->getColor()->setRGB('FFFFFF');
  setBackground($objPHPExcel,$index,'H','K',1,0,1);
  setBackground($objPHPExcel,$index,'H','K',2,0,2); 
  $currentSheet->getStyle("D1:G1")->getFont()->setBold(false)->getColor()->setRGB('FFFFFF');
  setBackground($objPHPExcel,$index,'D','G',1,0,1);
  setBackground($objPHPExcel,$index,'D','G',2,0,2);
  $currentSheet->getStyle("A1:C1")->getFont()->setBold(false)->getColor()->setRGB('FFFFFF');
  setBackground($objPHPExcel,$index,'A','C',1,0,1);
  setBackground($objPHPExcel,$index,'A','C',2,0,2);

 ////Successful
  $query="exec [RIA].[dbo].[Test_Rachel]  2, '".$ip."','','Successful'";
  $r3=odbc_exec($connection,$query);
      while(odbc_fetch_row($r3)){
       $TotalS =odbc_result($r3,"Total");  
       $currentSheet   ->setCellValue('A2', 'Integration C4');
       $currentSheet   ->setCellValue('B2', odbc_result($r3,"Total")); 
  }
  ///UnSuccesful
  $query="exec [RIA].[dbo].[Test_Rachel]  2, '".$ip."','','Unsuccessful'";
  $r3=odbc_exec($connection,$query);
      while(odbc_fetch_row($r3)){
       $TotalS =odbc_result($r3,"Total");  
       $currentSheet   ->setCellValue('C2', odbc_result($r3,"Total")); 
  }

  /////
  $sql="exec [RIA].[dbo].[Test_Rachel]  1, '".$ip."','Integration C4',''";
  $rs=odbc_exec($connection,$sql);
  $ii=0;
  while(odbc_fetch_row($rs)){
    $aux=2+$ii; 
    if($aux%2==0){
      setBackground($objPHPExcel,$index,'H','K',$aux,0,2);
    }
    $currentSheet 

                  ->setCellValue('H'.$aux, odbc_result($rs,"team"))
                  ->setCellValue('I'.$aux, odbc_result($rs,"lmName"))
                  ->setCellValue('J'.$aux, odbc_result($rs,"name"))
                  ->setCellValue('K'.$aux, odbc_result($rs,"signum"));

    $ii++;
  }
  $sql4="exec [RIA].[dbo].[Test_4]  '".$ip."','1' ";
  $rs4=odbc_exec($connection,$sql4);
  $ii=0;
  while(odbc_fetch_row($rs4)){
    $aux=2+$ii; 
    if($aux%2==0){
      setBackground($objPHPExcel,$index,'D','G',$aux,0,2);
    }
    $currentSheet 

                  ->setCellValue('D'.$aux, odbc_result($rs4,"signum"))
                  ->setCellValue('E'.$aux, odbc_result($rs4,"week"))
                  ->setCellValue('F'.$aux, odbc_result($rs4,"hours1"))
                  ->setCellValue('G'.$aux, odbc_result($rs4,"hours2"));

    $ii++;

  }  
}

en este caso estoy llenando la primera pestaña que es data...Espero te sirva

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta