/** * Método que gera a planilha de acompnahamento do livro e disciplinas informadas * @param int $livro O código do livro * @param int $materia O código da máteria */ public function acompanhamento() { //Inicializando os filtros usados na página $this->filtro->initGets(array("livro", "disciplina")); //Inicializando os objeto básicos $sqlTopico = new SqlTopico(); //Buscando os tópicos $topicosLista = $sqlTopico->listarTodos($this->filtro); //Verificando se o livro é válido if (!$topicosLista->rowCount()) { echo Javascript::alert("Não foi encontrado conteúdo " . "associado ao livro e disciplina informados"); die(Javascript::close()); } $topicos = $topicosLista->fetchAll(); //Array com os contepudos do livro // $topicoInicia = $topicos[0]; //Primeiro item do array com os dados básicos //Variáveis iniciais básicas $xBase = 1; //Coluna inicial da impressão $yBase = 1; //Linha de início da impressão $nColunasCapitulos = 5; //Número de colunas da culuna inicial $nColunasPaginas = 1; //Número de colunas da culuna de páginas $nColunasAulas = 10; //Número de colunas referentes ao número máximo de aulas $nColunasMax = 0; //Define o número máximo de colunas da planilha $indiceUltColuna = 0; //Define o indice da ultima coluna da planilha $colecao = $topicoInicia->getCapitulo()->getLivro()->getColecao()->getNome(); //Nome da coleção a qual o livro pertence $tituloPlanilha = "PLANILHA DE ACOMPANHAMENTO PROGRAMÁTICO ({$this->data["ano_letivo"]})"; $textoAula = "Aula "; //Define o texto das celulas "aula" $textoData = "Data:"; //Define o texto das celulas "data" $alturaLinha = 40; //Define a autura minima das linhas $larguraLegenda = 5; //Define a largura de cada coluna das legendas em pixels $textoPaguinas = "PÁGINAS"; //Define o texto da coluna de páginas $textoPaguinasVertical = FALSE; //Define se o texto sobre a coluna páginas ficará na vertical ou não //Coluna da esquerda $arrayExplicativo = array("Preenchimento", "O status do andamento dos assuntos do livro da coleção {$colecao} " . "deve ser atualizado a cada aula ministrada pelo professor, " . "independente se na aula foi utilizado ou não o livro didático."); $arrayDadosProfessor = array("PROFESSOR:", "", "", "SÉRIE:", "TURMA:", "UNIDADE:"); //Coluna da direita $arrayDadosLivro = array("", "{$topicoInicia->getCapitulo()->getLivro()->getTitulo()} ({$topicoInicia->getSequencial()} º Bimestre)", $topicoInicia->getCapitulo()->getDisciplina()->getNome(), "Livro Didático: {$topicoInicia->getCapitulo()->getLivro()->getTitulo()}", ""); $arrayColunaAulaData = array($textoAula, $textoData, ""); // $arrayLegenda = array("A" => "EM ANDAMENTO", "C" => "CONCLUÍDO", "R" => "REVISADO"); //Início da execução //Verificação de erros de configuração if (count($arrayExplicativo) + count($arrayDadosProfessor) != count($arrayDadosLivro) + count($arrayColunaAulaData)) { //As somas de itens entre os pares de arrays acima devem ser iguais die("Planilha mal configurada"); } //Variaveis dinâmicas usadas na execução $x = $xBase; $y = $yBase + 1; $nColunasMax += $xBase + $nColunasCapitulos + $nColunasPaginas + $nColunasAulas * count($arrayLegenda); $indiceUltColuna += $xBase + $nColunasMax; //Inserindo os dados na planilha // $this->workSheet->setCellValueByColumnAndRow($x, $y, $tituloPlanilha); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(20); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($x + 1) . $y . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("font" => array("bold" => TRUE), "borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000")), "left" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000")), "right" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000")), "bottom" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("argb" => "000000"))))); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $indiceUltColuna, $y); $this->workSheet->getRowDimension($y++)->setRowHeight($alturaLinha); //Variaveis de indices e contadores $linhaExpl = 0; $linhaProf = 0; $linhaLivro = 0; $linhaAulaData = 0; $colunaLegenda = 0; $colunaLegendaChave = array_keys($arrayLegenda); foreach (range(0, count($arrayExplicativo) + count($arrayDadosProfessor) - 1) as $value) { $x = $xBase; //Preenchendo a coluna da esquerda if (isset($arrayExplicativo[$linhaExpl])) { $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayExplicativo[$linhaExpl++]); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(12); if ($linhaExpl == count($arrayExplicativo)) { $this->workSheet->getRowDimension($y)->setRowHeight($alturaLinha + 25); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($xBase + $nColunasCapitulos + 2) . $y)->applyFromArray(array("borders" => array("bottom" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); } } else { $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayDadosProfessor[$linhaProf++]); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); } $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "FFFFFF")))); $this->workSheet->getStyleByColumnAndRow($xBase + $nColunasCapitulos + 1, $y)->applyFromArray(array("borders" => array("right" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->mergeCellsByColumnAndRow($xBase, $y, $nColunasCapitulos + $xBase + 1, $y); //Preenchendo as colunas das legendas if (isset($colunaLegendaChave[$colunaLegenda])) { $x += $nColunasCapitulos + $nColunasPaginas + $colunaLegenda + $xBase; $this->workSheet->setCellValueByColumnAndRow($x, $y, $textoPaguinas); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); if ((bool) $textoPaguinasVertical) { $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setTextRotation(90); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } else { $this->workSheet->getColumnDimensionByColumn($x)->setWidth(13); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_BOTTOM)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); } $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array("font" => array("italic" => TRUE, "bold" => TRUE))); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $x, $y + count($arrayExplicativo) + count($arrayDadosProfessor) - 1); foreach ($arrayLegenda as $legenda) { $x = $xBase + $nColunasCapitulos + $nColunasPaginas + $colunaLegenda + 2; $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayLegenda[$colunaLegendaChave[$colunaLegenda]]); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "EFAC86")))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($x) . $y . ":" . ExcelAux::indiceParaColuna($x) . ($y + count($arrayDadosLivro) - 1))->applyFromArray(array("borders" => array("right" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))), "font" => array("italic" => TRUE))); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setTextRotation(90); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $x, $y + count($arrayDadosLivro) - 1); $colunaLegenda++; } } //Preenchendo a coluna da direita $x = $xBase; if (isset($arrayDadosLivro[$linhaLivro])) { $x += $nColunasCapitulos + $nColunasPaginas + count($arrayLegenda) + 2; $this->workSheet->setCellValueByColumnAndRow($x, $y, $arrayDadosLivro[$linhaLivro++]); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(18); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "FFFFFF")), "borders" => array("left" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))), "font" => array("bold" => TRUE))); $this->workSheet->mergeCellsByColumnAndRow($x, $y, $indiceUltColuna, $y); } else { $x = $xBase + $nColunasCapitulos + $nColunasPaginas - (count($arrayLegenda) - 2); $colorir = FALSE; foreach (range(1, $nColunasAulas) as $value) { $this->workSheet->setCellValueByColumnAndRow($x += count($arrayLegenda), $y, $arrayColunaAulaData[$linhaAulaData] . (!$linhaAulaData ? str_pad($value, 2, 0, STR_PAD_LEFT) : "")); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => ($colorir = !$colorir) ? "EFAC86" : "FFFFFF")), "borders" => array("left" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))), "font" => array("underline" => TRUE))); if (!$linhaAulaData) { //Centralizando a primeira palavra do bloco $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(16); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($x) . $y . ":" . ExcelAux::indiceParaColuna($x + count($arrayLegenda)) . $y)->applyFromArray(array('borders' => array('top' => array('style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'))), "font" => array("bold" => TRUE, "underline" => FALSE))); } $this->workSheet->mergeCellsByColumnAndRow($x, $y, $x + count($arrayLegenda) - 1, $y); } $linhaAulaData++; } $y++; } //Preenchendo o resto da planilha $capituloTitulo = ""; foreach ($topicos as $topico) { $x = $xBase; if ($capituloTitulo != $topico->getCapitulo()->getSequencial()) { $capituloTitulo = $topico->getCapitulo()->getSequencial(); $tituloCapitulo = "{$topico->getCapitulo()->getSequencial()}: {$topico->getCapitulo()->getNome()}"; $this->workSheet->setCellValueByColumnAndRow($x, $y, $tituloCapitulo); $this->workSheet->getRowDimension($y)->setRowHeight($alturaLinha); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(16); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($xBase + $nColunasCapitulos + $nColunasPaginas + 2) . $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "9BC2E6")), 'font' => array('bold' => true), "borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->mergeCellsByColumnAndRow($xBase, $y, $nColunasCapitulos + $xBase + 1, $y); $this->workSheet->mergeCellsByColumnAndRow($xBase + $nColunasCapitulos + 2, $y, $indiceUltColuna, $y++); } $topicoDesc = "Tópico {$topico->getSequencial()} : {$topico->getNome()}"; $pagina = "{$topico->getPaginaInicial()} a {$topico->getPaginaFinal()}"; $this->workSheet->setCellValueByColumnAndRow($x, $y, $topicoDesc); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . $y . ":" . ExcelAux::indiceParaColuna($xBase + $nColunasCapitulos + $nColunasPaginas + 2) . $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "F2F2F2")), 'font' => array("italic" => TRUE), "borders" => array("top" => array("style" => PHPExcel_Style_Border::BORDER_THIN, "color" => array("rgb" => "000000"))))); $this->workSheet->getRowDimension($y)->setRowHeight($alturaLinha); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setWrapText(TRUE); $this->workSheet->setCellValueByColumnAndRow($x += $nColunasCapitulos + $xBase + 1, $y, $pagina); $this->workSheet->getStyleByColumnAndRow($x, $y)->getFont()->setSize(14); $this->workSheet->getStyleByColumnAndRow($x, $y)->applyFromArray(array('fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => "FFFFFF")), 'borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'))))); $this->workSheet->getStyleByColumnAndRow($x, $y)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $this->workSheet->mergeCellsByColumnAndRow($xBase, $y, $nColunasCapitulos + $xBase + 1, $y); // $x++; $colorir = TRUE; foreach (range(1, $nColunasAulas) as $colAula) { foreach ($colunaLegendaChave as $value) { $this->workSheet->setCellValueByColumnAndRow($x + 1, $y, $value); $this->workSheet->getStyleByColumnAndRow($x + 1, $y)->getFont()->setSize(14); $this->workSheet->getStyleByColumnAndRow($x + 1, $y)->applyFromArray(array('borders' => array('allborders' => array('style' => PHPExcel_Style_Border::BORDER_THIN, 'color' => array('argb' => '000000'))), 'fill' => array('type' => PHPExcel_Style_Fill::FILL_SOLID, 'color' => array('rgb' => $colorir ? "EFAC86" : "FFFFFF")))); $this->workSheet->getStyleByColumnAndRow(++$x, $y)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER)->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); } $colorir = !$colorir; } $y++; } //Definindo a largura das páginas como autosize // $this->workSheet // ->getColumnDimensionByColumn($xBase + $nColunasCapitulos + $nColunasPaginas) // ->setAutoSize(TRUE); //Definindo a largura das colunas das legendas foreach (range($xBase + $nColunasCapitulos + $nColunasPaginas + 2, $indiceUltColuna) as $value) { $this->workSheet->getColumnDimensionByColumn($value)->setWidth($larguraLegenda); } //Definindo as bordas em volta da planilha $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . --$y . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("borders" => array("bottom" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000"))))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($xBase + 1) . ($yBase + 1) . ":" . ExcelAux::indiceParaColuna($xBase + 1) . $y)->applyFromArray(array("borders" => array("left" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000"))))); $this->workSheet->getStyle(ExcelAux::indiceParaColuna($indiceUltColuna + 1) . ($yBase + 1) . ":" . ExcelAux::indiceParaColuna($indiceUltColuna + 1) . $y)->applyFromArray(array("borders" => array("right" => array("style" => PHPExcel_Style_Border::BORDER_MEDIUM, "color" => array("argb" => "000000"))))); //Imprimindo a planilha $this->printPlanilha($colecao); }
$objPHPExcel->setActiveSheetIndex(0)->setCellValue(ExcelAux::indiceParaColuna($coluna + 20) . $linha, $ml4); //////////////////// ExcelAux::personalizarLinhaEspecial($objPHPExcel, $linha++, $coluna, $coluna + 20); /////////////////// $linha++; } /////////// $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna))->setWidth(30); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 1))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 2))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 3))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 4))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 5))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 6))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 7))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 8))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 9))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 10))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 11))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 12))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 13))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 14))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 15))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 16))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 17))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 18))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 19))->setWidth(8); $objPHPExcel->getActiveSheet()->getColumnDimension(ExcelAux::indiceParaColuna($coluna + 20))->setWidth(8); /////////// ExcelAux::cabecalho($objPHPExcel, "Notas");