<?php
$this->layout = false;

use CrmSpreadsheet\CrmSpreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Style\Conditional;
use PhpOffice\PhpSpreadsheet\Chart\Chart;
use PhpOffice\PhpSpreadsheet\Chart\DataSeries;
use PhpOffice\PhpSpreadsheet\Chart\DataSeriesValues;
use PhpOffice\PhpSpreadsheet\Chart\Legend;
use PhpOffice\PhpSpreadsheet\Chart\PlotArea;
use PhpOffice\PhpSpreadsheet\Chart\Title;

$spreadsheet = new CrmSpreadsheet();
$spreadsheet->setDefaults();
$spreadsheet->getDefaultStyle()->getFont()->setSize(8);
$spreadsheet->getDefaultStyle()
            ->getAlignment()
            ->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
$spreadsheet->getProperties()->setTitle("{$ano} - Metas x Realizado");

$styles = array(
    0 => array(
        'font' => [
            'bold' => true,
            'size' => 10,
            'color' => [
                'rgb' => 'FFFFFF'
            ]
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '38761D',
            ],
        ],
    ),
    1 => array(
        'font' => [
            'bold' => true,
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '6AA84F',
            ],
        ],
    ),
    2 => array(
        'font' => [
            'bold' => true,
            // 'size' => '10'
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '93C47D',
            ],
        ],
    ),
    3 => array(
        'font' => [
            'bold' => true,
            // 'size' => '10'
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => 'B6D7A8',
            ],
        ],
    ),
    4 => array(
        'font' => [
            'bold' => true,
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '00B050',
            ],
        ],
    ),
    5 => array(
        'font' => [
            'bold' => true,
            'size' => 10
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '3C78D8',
            ],
        ],
    ),
    6 => array(
        'font' => [
            'bold' => true,
            // 'size' => '10'
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '6D9EEB',
            ],
        ],
    ),
    7 => array(
        'font' => [
            'bold' => true,
            // 'size' => '10'
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => '3D85C6',
            ],
        ],
    ),
    8 => array(
        'font' => [
            'bold' => true,
        ],
        'alignment' => [
            'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER,
        ],
        'borders' => [
            'allBorders' => [
                'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
                'color' => ['rgb' => '000000'],
            ],
        ],
        'fill' => [
            'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,
            'rotation' => 90,
            'startColor' => [
                'rgb' => 'FFDF00',
            ],
        ],
    ),
);
$condicaoMenorQuePorcentagem = new Conditional();
$condicaoMenorQuePorcentagem->setConditionType(Conditional::CONDITION_CELLIS);
$condicaoMenorQuePorcentagem->setOperatorType(Conditional::OPERATOR_LESSTHAN);
$condicaoMenorQuePorcentagem->addCondition(1);
$condicaoMenorQuePorcentagem->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);

$condicaoMenorQueZero = new Conditional();
$condicaoMenorQueZero->setConditionType(Conditional::CONDITION_CELLIS);
$condicaoMenorQueZero->setOperatorType(Conditional::OPERATOR_LESSTHAN);
$condicaoMenorQueZero->addCondition(0);
$condicaoMenorQueZero->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);

$meses = Util::getMeses();

$abaAnaliseGeral = $spreadsheet->getActiveSheet();
$abaAnaliseGeral->setTitle("Análise Geral");

# Aba análise geral
    $linha = 1;

    $abaAnaliseGeral->getColumnDimensionByColumn(1)->setWidth(5);
    $abaAnaliseGeral->getColumnDimensionByColumn(2)->setWidth(45);
    $abaAnaliseGeral->getColumnDimensionByColumn(3)->setWidth(15);
    for ($i=4; $i <= 9; $i++) {
        $abaAnaliseGeral->getColumnDimensionByColumn($i)->setWidth(18);
    }
    $abaAnaliseGeral->getColumnDimensionByColumn(6)->setWidth(5);
    $abaAnaliseGeral->getColumnDimensionByColumn(7)->setWidth(13);

    # Motivos
        $valor = "VENDAS POR MOTIVOS - {$ano}";
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 8, $linha);
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 8, $linha)->applyFromArray($styles[0]);
        $linha++;

        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Motivo");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 2, ($linha+1));

        $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, "Quantidade");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(3, $linha, 3, ($linha+1));
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 3, $linha)->applyFromArray($styles[1]);

        $columnLetter = Coordinate::stringFromColumnIndex(3);
        $abaAnaliseGeral->getStyle($columnLetter)
                        ->getAlignment()
                        ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
        ###
        $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, "Mensalidades");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(4, $linha, 5, $linha);

        $abaAnaliseGeral->setCellValueByColumnAndRow(4, ($linha+1), "Valor");

        $abaAnaliseGeral->setCellValueByColumnAndRow(5, ($linha+1), "Média");

        $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha, 5, ($linha+1))->applyFromArray($styles[2]);
        ###
        $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, "Implantações");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 8, $linha);

        $abaAnaliseGeral->setCellValueByColumnAndRow(6, ($linha+1), "Valor");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(6, ($linha+1), 7, ($linha+1));

        $abaAnaliseGeral->setCellValueByColumnAndRow(8, ($linha+1), "Média");

        $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha, 8, ($linha+1))->applyFromArray($styles[3]);

        $linha += 2;

        Util::arraySortByColumn($analiseGeral['Motivos'], 'name', SORT_ASC);

        $linhaInicial = $linha;
        foreach ($analiseGeral['Motivos'] as $key => $motivo) {
            $coluna = 2;

            $valor = ExcelUtil::parseValue($motivo['name']);
            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $motivo['qtd']);
            $coluna++;

            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $motivo['mensalidade']);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coluna++;

            $valor = "=D{$linha} / C{$linha}";
            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coluna++;

            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $motivo['implantacao']);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $abaAnaliseGeral->mergeCellsByColumnAndRow($coluna, $linha, ($coluna+1), $linha);
            $coluna += 2;

            $valor = "=F{$linha} / C{$linha}";
            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');

            $linha++;
        }
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Total de Contratos Novos");

        $linhaInicialTotal = $linha;

        // Total
            // Quantidade
                $valor = "=SUM(C{$linhaInicial}:C" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
                $coordenadaQtdContratosNovos = "C{$linha}";

            // Mensalidade
                $valor = "=SUM(D{$linhaInicial}:D" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                // $coordenadaValorContratosNovos = "D{$linha}";

                $valor = "=D{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(5, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(5, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            // Implantação
                $valor = "=SUM(F{$linhaInicial}:F" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 7, $linha);
                $coordenadaValorVendidoNoAno = "D{$linha}";

                $valor = "=F{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(8, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(8, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
            $linha++;

        // Reativações
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Reativações");
            // Quantidade
                $valor = $analiseGeral['Reativacoes']['qtd'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
                $coordenadaQtdReativacoes = "C{$linha}";

            // Mensalidade
                $valor = $analiseGeral['Reativacoes']['mensalidade'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                // $coordenadaValorReativacoes = "D{$linha}";

                $valor = "=D{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(5, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(5, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            // Implantação
                $valor = $analiseGeral['Reativacoes']['implantacao'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 7, $linha);

                $valor = "=F{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(8, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(8, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            $linha++;

        // Adendos
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Adendos vendidos no período");
            // Quantidade
                $valor = $analiseGeral['Adendos']['qtd'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);

            // Mensalidade
                $valor = $analiseGeral['Adendos']['mensalidade'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $valor = "=D{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(5, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(5, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            // Implantação
                $valor = $analiseGeral['Adendos']['implantacao'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 7, $linha);

                $valor = "=F{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(8, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(8, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            $linha++;

        // Transferências
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Diferença de Transferências");
            // Quantidade
                $valor = $analiseGeral['Transferencias']['qtd'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);

            // Mensalidade
                $valor = $analiseGeral['Transferencias']['mensalidade'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $valor = "=D{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(5, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(5, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            // Implantação
                $valor = $analiseGeral['Transferencias']['implantacao'];
                $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 7, $linha);

                $valor = "=F{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(8, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(8, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
            $linha++;

        // Total de Negociações
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Total de Negociações");

            // Quantidade
                $valor = "=SUM(C" . ($linhaInicialTotal) . ":C" . ($linha - 1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);

            // Mensalidade
                $valor = "=SUM(D" . ($linhaInicialTotal) . ":D" . ($linha - 1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaTotalVendido = "D{$linha}";

                $valor = "=D{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(5, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(5, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 5, $linha)->getFont()->getColor()->setRGB('0000FF');

            // Implantação
                $valor = "=SUM(F" . ($linhaInicialTotal) . ":F" . ($linha - 1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 7, $linha);

                $valor = "=F{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(8, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(8, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 8, $linha)->getFont()->getColor()->setRGB('0000FF');

            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicialTotal, 8, $linha)->getFont()->setBold(true);

            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicial, 8, $linha)
                            ->getBorders()
                            ->getAllBorders()
                            ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
        $linha += 2;

    # Produtos
        $valor = "PRODUTOS MAIS VENDIDOS EM {$ano}";
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 8, $linha);
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 8, $linha)->applyFromArray($styles[0]);
        $linha++;

        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Produto");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 2, ($linha+1));

        $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, "Quantidade");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(3, $linha, 3, ($linha+1));
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 3, ($linha+1))->applyFromArray($styles[1]);
        ###
        $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, "Mensalidades");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(4, $linha, 5, $linha);

        $abaAnaliseGeral->setCellValueByColumnAndRow(4, ($linha+1), "Valor");
        $abaAnaliseGeral->setCellValueByColumnAndRow(5, ($linha+1), "Média");
        $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha, 5, ($linha+1))->applyFromArray($styles[2]);
        ###
        $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, "Implantações");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 8, $linha);

        $abaAnaliseGeral->setCellValueByColumnAndRow(6, ($linha+1), "Valor");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(6, ($linha+1), 7, ($linha+1));

        $abaAnaliseGeral->setCellValueByColumnAndRow(8, ($linha+1), "Média");

        $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha, 8, ($linha+1))->applyFromArray($styles[3]);

        $linha += 2;

        $linhaInicial = $linha;
        foreach ($analiseGeral['Produtos'] as $key => $produto) {
            $coluna = 2;

            $valor = ExcelUtil::parseValue($produto['name']);
            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $produto['qtd']);
            $coluna++;

            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $produto['mensalidade']);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coluna++;

            $valor = "=D{$linha} / C{$linha}";
            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coluna++;

            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $produto['implantacao']);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $abaAnaliseGeral->mergeCellsByColumnAndRow($coluna, $linha, ($coluna+1), $linha);
            $coluna += 2;

            $valor = "=F{$linha} / C{$linha}";
            $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');

            $linha++;
        }
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Total de Contratos");

        // Total
            // Quantidade
                $valor = "=SUM(C{$linhaInicial}:C" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);

            // Mensalidade
                $valor = "=SUM(D{$linhaInicial}:D" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $valor = "=D{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(5, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(5, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

            // Implantação
                $valor = "=SUM(F{$linhaInicial}:F" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow(6, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(6, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $abaAnaliseGeral->mergeCellsByColumnAndRow(6, $linha, 7, $linha);

                $valor = "=F{$linha} / C{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow(8, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow(8, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 8, $linha)->getFont()->setBold(true);

        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicial, 8, $linha)
                        ->getBorders()
                        ->getAllBorders()
                        ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
        $linha += 2;

    # Cancelamentos
        $valor = "CANCELAMENTOS POR MOTIVO - {$ano}";
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 9, $linha);
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 9, $linha)->applyFromArray($styles[0]);
        $linha++;

        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Motivo");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 2, ($linha+1));

        $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, "Motivo informado pelo cliente");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(3, $linha, 5, $linha);

        $abaAnaliseGeral->setCellValueByColumnAndRow(3, ($linha+1), "Quantidade");
        $abaAnaliseGeral->setCellValueByColumnAndRow(4, ($linha+1), "Mensalidades");
        $abaAnaliseGeral->setCellValueByColumnAndRow(5, ($linha+1), "Média");
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 5, ($linha+1))->applyFromArray($styles[2]);

        $abaAnaliseGeral->setCellValueByColumnAndRow(7, $linha, "Motivo informado pelo vendedor");
        $abaAnaliseGeral->mergeCellsByColumnAndRow(7, $linha, 9, $linha);

        $abaAnaliseGeral->setCellValueByColumnAndRow(7, ($linha+1), "Quantidade");
        $abaAnaliseGeral->setCellValueByColumnAndRow(8, ($linha+1), "Mensalidades");
        $abaAnaliseGeral->setCellValueByColumnAndRow(9, ($linha+1), "Média");
        $abaAnaliseGeral->getStyleByColumnAndRow(7, $linha, 9, ($linha+1))->applyFromArray($styles[3]);

        $linha += 2;

        Util::arraySortByColumn($analiseGeral['Cancelamentos'], 'name', SORT_ASC);

        $linhaInicial = $linha;

        if (!empty($analiseGeral['Cancelamentos'])) {
            foreach ($analiseGeral['Cancelamentos'] as $motivo) {
                $coluna = 2;

                $contadorCliente  = $motivo['motivoCliente'];
                $contadorVendedor = $motivo['motivoVendedor'];

                $valor = ExcelUtil::parseValue($motivo['name']);
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $contadorCliente['qtd']);
                $colunaQtdCliente = Coordinate::stringFromColumnIndex($coluna);
                $coluna++;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $contadorCliente['valor']);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $colunaVlrCliente = Coordinate::stringFromColumnIndex($coluna);
                $coluna++;

                $valor = "={$colunaVlrCliente}{$linha} / {$colunaQtdCliente}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $coluna += 2;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $contadorVendedor['qtd']);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getAlignment()
                                ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                $colunaQtdVendedor = Coordinate::stringFromColumnIndex($coluna);
                $coluna++;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $contadorVendedor['valor']);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $colunaVlrVendedor = Coordinate::stringFromColumnIndex($coluna);
                $coluna++;

                $valor = "={$colunaVlrVendedor}{$linha} / {$colunaQtdVendedor}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $linha++;
            }

            $linhaInicialRodape = $linha;
            // Total
                $coluna = 2;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, "TOTAL - CANCELAMENTOS");
                $coluna++;

                $valor = "=SUM({$colunaQtdCliente}{$linhaInicial}:{$colunaQtdCliente}" . ($linha-1) . ")";
                $coordenadaQtdPerdidoNoAno = "{$colunaQtdCliente}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

                $valor = "=SUM({$colunaVlrCliente}{$linhaInicial}:{$colunaVlrCliente}" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaValorPerdidoNoAno = "{$colunaVlrCliente}{$linha}";
                $coluna++;

                $valor = "={$coordenadaValorPerdidoNoAno} / {$coordenadaQtdPerdidoNoAno}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $coluna += 2;

                ##########################################################################
                $valor = "=SUM({$colunaQtdVendedor}{$linhaInicial}:{$colunaQtdVendedor}" . ($linha-1) . ")";
                $coordenadaQtdPerdidoNoAnoVendedor = "{$colunaQtdVendedor}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getAlignment()
                                ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                $coluna++;

                $valor = "=SUM({$colunaVlrVendedor}{$linhaInicial}:{$colunaVlrVendedor}" . ($linha-1) . ")";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaValorPerdidoNoAnoVendedor = "{$colunaVlrVendedor}{$linha}";
                $coluna++;

                $valor = "={$coordenadaValorPerdidoNoAnoVendedor} / {$coordenadaQtdPerdidoNoAnoVendedor}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 9, $linha)->getFont()->getColor()->setRGB('FF0000');

                $linha++;

            // Reativados
                $coluna = 2;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, "Reativados destes cancelamentos");
                $coluna++;

                $valor = $analiseGeral['ReativacoesCancelamentos']['qtd'];
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

                $valor = $analiseGeral['ReativacoesCancelamentos']['valor'];
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

                $valor = "={$colunaVlrCliente}{$linha} / {$colunaQtdCliente}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $coluna += 2;
                #####################################################################
                $valor = $analiseGeral['ReativacoesCancelamentos']['qtdVendedor'];
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getAlignment()
                                ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                $coluna++;

                $valor = $analiseGeral['ReativacoesCancelamentos']['valorVendedor'];
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

                $valor = "={$colunaVlrVendedor}{$linha} / {$colunaQtdVendedor}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $linha++;

            // Efetivamente perdido
                $coluna = 2;

                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, "TOTAL - EFETIVAMENTE PERDIDO");
                $coluna++;

                $valor = "={$colunaQtdCliente}{$linhaInicialRodape} - {$colunaQtdCliente}" . ($linha - 1);
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

                $valor = "={$colunaVlrCliente}{$linhaInicialRodape} - {$colunaVlrCliente}" . ($linha - 1);
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

                $valor = "={$colunaVlrCliente}{$linha} / {$colunaQtdCliente}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coluna += 2;
                ########################################################################
                $valor = "={$colunaQtdVendedor}{$linhaInicialRodape} - {$colunaQtdVendedor}" . ($linha - 1);
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getAlignment()
                                ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                $coluna++;

                $valor = "={$colunaVlrVendedor}{$linhaInicialRodape} - {$colunaVlrVendedor}" . ($linha - 1);
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

                $valor = "={$colunaVlrVendedor}{$linha} / {$colunaQtdVendedor}{$linha}";
                $abaAnaliseGeral->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaAnaliseGeral->getStyleByColumnAndRow($coluna, $linha)
                                ->getNumberFormat()
                                ->setFormatCode('"R$ "#,##0.00_-');

                $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 9, $linha)->getFont()->getColor()->setRGB('FF0000');

            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicialRodape, 9, $linha)->getFont()->setBold(true);
        } else {
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Nenhum dado disponível");
            $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 9, $linha);

            $coordenadaQtdPerdidoNoAno = "A1";
            $coordenadaValorPerdidoNoAno = "A1";
            $coordenadaValorPerdidoNoAnoVendedor = "A1";
        }

        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicial, 5, $linha)
                            ->getBorders()
                            ->getAllBorders()
                            ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
        $abaAnaliseGeral->getStyleByColumnAndRow(7, $linhaInicial, 9, $linha)
                            ->getBorders()
                            ->getAllBorders()
                            ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

        $linha += 2;

    # Análise do ciclo
        $linhaInicial = $linha;

        $valor = "ANÁLISE DO CICLO - {$ano}";
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 4, $linha);
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 4, $linha)->applyFromArray($styles[0]);
        $linha++;

        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Item");
        $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, "Quantidade");
        $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, "Mensalidades");
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 4, $linha)->applyFromArray($styles[2]);
        $linha++;

        // Vendido no ano
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Vendido no ano");
            $valor = "={$coordenadaQtdContratosNovos} + {$coordenadaQtdReativacoes}";
            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
            $coordenadaQtdVendidoNoAno = "C{$linha}";

            // $valor = "={$coordenadaValorContratosNovos} + {$coordenadaValorReativacoes}";
            $valor = "={$coordenadaTotalVendido}";
            $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coordenadaValorVendidoNoAno = "D{$linha}";

            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 4, $linha)->getFont()->getColor()->setRGB('0000FF');
            $linha++;

        // Perdido no ano
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Perdido no ano");

            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, "={$coordenadaQtdPerdidoNoAno}");
            $coordenadaQtdPerdidoNoAno = "C{$linha}";

            $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, "={$coordenadaValorPerdidoNoAno}");
            $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $coordenadaValorPerdidoNoAno = "D{$linha}";

            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 4, $linha)->getFont()->getColor()->setRGB('FF0000');
            $linha++;

        // Saldo
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Saldo");

            $valor = "={$coordenadaQtdVendidoNoAno} - {$coordenadaQtdPerdidoNoAno}";
            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);

            $valor = "={$coordenadaValorVendidoNoAno} - {$coordenadaValorPerdidoNoAno}";
            $abaAnaliseGeral->setCellValueByColumnAndRow(4, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow(4, $linha)
                            ->getNumberFormat()
                            ->setFormatCode('"R$ "#,##0.00_-');
            $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 4, $linha)->getFont()->setBold(true);

        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicial, 4, $linha)
                        ->getBorders()
                        ->getAllBorders()
                        ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

    $linha += 2;

    # Análise geral
        $valor = "ANÁLISE GERAL - {$ano}";
        $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaAnaliseGeral->mergeCellsByColumnAndRow(2, $linha, 3, $linha);
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linha, 3, $linha)->applyFromArray($styles[0]);
        $linha++;

        $linhaInicial = $linha;
        // Clientes ativos ano anterior
            if (!empty($clientesAtivosAnoAnterior)) {
                $dataAnoAnterior = $clientesAtivosAnoAnterior->FEC_DATA;
                $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Clientes ativos em {$dataAnoAnterior}");
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $clientesAtivosAnoAnterior->FEC_VALOR);
            } else {
                $dataAnoAnterior = "31/12/" . ($ano-1);
                $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Clientes ativos em {$dataAnoAnterior}");
                $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, "-");
            }
            $coordenadaAtivosAnterior = "C{$linha}";
            $linha++;

        // Cliente ativos atualmente
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Clientes ativos na carteira");
            $valor = "={$coordenadaAtivosAnterior} + {$coordenadaQtdVendidoNoAno} - {$coordenadaQtdPerdidoNoAno}";
            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
            $coordenadaAtivosAtual = "C{$linha}";
            $linha++;

        // Média perdidos por mês
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "Perdido por mês - média");
            $valor = "={$coordenadaQtdPerdidoNoAno} / " . count($mesesRelatorio);
            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow(3, $linha)
                            ->getNumberFormat()
                            ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_00);
            $mediaPerdas = "C{$linha}";
            $linha++;

        // % Perdido da carteira
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "% Perdido da carteira");
            $valor = "={$mediaPerdas} / {$coordenadaAtivosAtual}";
            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow(3, $linha)
                            ->getNumberFormat()
                            ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_PERCENTAGE_00);
            $linha++;

        // % de Perda aceitável
            $abaAnaliseGeral->setCellValueByColumnAndRow(2, $linha, "% de Perda aceitável");
            $valor = 0.02;
            $abaAnaliseGeral->setCellValueByColumnAndRow(3, $linha, $valor);
            $abaAnaliseGeral->getStyleByColumnAndRow(3, $linha)
                            ->getNumberFormat()
                            ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_PERCENTAGE_00);

        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicial, 3, $linha)
                        ->getBorders()
                        ->getAllBorders()
                        ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
        $abaAnaliseGeral->getStyleByColumnAndRow(2, $linhaInicial, 3, $linha)->applyFromArray($styles[3]);
/////

$linhaInicialGrafico = array(
    'MENSALIDADE' => 1,
    'IMPLANTACAO' => 2,
);
$linhaFinalGrafico = array(
    'MENSALIDADE' => 1,
    'IMPLANTACAO' => 2,
);
# Aba Total
    $abaTotal = $spreadsheet->createSheet();
    $titleAbaTotal = "Total";
    $abaTotal->setTitle($titleAbaTotal);
    $spreadsheet->setActiveSheetIndexByName($titleAbaTotal);
    $abaTotal = $spreadsheet->getActiveSheet();

    $abaTotal->getColumnDimensionByColumn(1)->setWidth(5);
    $abaTotal->getColumnDimensionByColumn(2)->setWidth(12);
    for ($i=3; $i <= 20; $i++) {
        $abaTotal->getColumnDimensionByColumn($i)->setWidth(18);
    }

    $linha = 1;

    $valor = ExcelUtil::parseValue("TOTAL DE VENDAS - {$revenda->REV_FANTASIA}");
    $abaTotal->setCellValueByColumnAndRow(2, $linha, $valor);
    $abaTotal->getStyleByColumnAndRow(2, $linha, 17, $linha)->applyFromArray($styles[0]);
    $abaTotal->mergeCellsByColumnAndRow(2, $linha, 17, $linha);
    $abaTotal->getRowDimension($linha)->setRowHeight(25);
    $linha++;

    $colunaMeta = "A";
    $colunaRealizado = "A";
    $colunaMes = "A";
    if (!empty($metasVsRealizado['SALDOS'])) {
        foreach ($metasVsRealizado['SALDOS'] as $tipo => $saldos) {
            $nomeTipo = ($tipo == "MENSALIDADE") ? "Mensalidades" : "Implantações";
            $tipoMeta = "METAS_{$tipo}";

            if ($tipo == "MENSALIDADE") {
                $style1 = $styles[1];
                $style2 = $styles[2];
                $style3 = $styles[3];

                $style4 = $styles[8];
            } else {
                $style1 = $styles[6];
                $style2 = $styles[7];
            }

            // Mensalidades
                $abaTotal->setCellValueByColumnAndRow(2, $linha, $nomeTipo);
                $abaTotal->mergeCellsByColumnAndRow(2, $linha, 5, $linha);

                $abaTotal->setCellValueByColumnAndRow(2, ($linha + 1), "Mês");
                $colunaMes = Coordinate::stringFromColumnIndex(2);

                $abaTotal->setCellValueByColumnAndRow(3, ($linha + 1), "Meta");
                $colunaMeta = Coordinate::stringFromColumnIndex(3);

                $abaTotal->setCellValueByColumnAndRow(4, ($linha + 1), "Realizado");
                $colunaRealizado = Coordinate::stringFromColumnIndex(4);

                $abaTotal->setCellValueByColumnAndRow(5, ($linha + 1), "%");
                $colunaPorcentagem = Coordinate::stringFromColumnIndex(5);

                $abaTotal->getStyleByColumnAndRow(2, $linha, 5, ($linha+1))->applyFromArray($style1);

            // Acumulado
                $abaTotal->setCellValueByColumnAndRow(6, $linha, "ACUMULADO - {$nomeTipo}");
                $abaTotal->mergeCellsByColumnAndRow(6, $linha, 9, $linha);

                $abaTotal->setCellValueByColumnAndRow(6, ($linha + 1), "Meta");
                $colunaMetaAcumulado = Coordinate::stringFromColumnIndex(6);

                $abaTotal->setCellValueByColumnAndRow(7, ($linha + 1), "Realizado");
                $colunaRealizadoAcumulado = Coordinate::stringFromColumnIndex(7);

                $abaTotal->setCellValueByColumnAndRow(8, ($linha + 1), "%");
                $colunaPorcentagemAcumulado = Coordinate::stringFromColumnIndex(8);

                $abaTotal->setCellValueByColumnAndRow(9, ($linha + 1), "Saldo");
                $colunaSaldoAcumulado = Coordinate::stringFromColumnIndex(9);

                $abaTotal->getStyleByColumnAndRow(6, $linha, 9, ($linha+1))->applyFromArray($style2);

            if ($tipo == "MENSALIDADE") {
                // Impacto
                    $abaTotal->setCellValueByColumnAndRow(10, $linha, "Impacto no Faturamento");
                    $abaTotal->mergeCellsByColumnAndRow(10, $linha, 13, $linha);

                    $abaTotal->setCellValueByColumnAndRow(10, ($linha + 1), "Impacto esperado (Meta)");
                    $abaTotal->getStyleByColumnAndRow(10, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaMetaImpacto = Coordinate::stringFromColumnIndex(10);

                    $abaTotal->setCellValueByColumnAndRow(11, ($linha + 1), "Impacto realizado (Resultado)");
                    $abaTotal->getStyleByColumnAndRow(11, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaRealizadoImpacto = Coordinate::stringFromColumnIndex(11);

                    $abaTotal->setCellValueByColumnAndRow(12, ($linha + 1), "Saldo Mensal");
                    $abaTotal->getStyleByColumnAndRow(12, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaSaldoImpacto = Coordinate::stringFromColumnIndex(12);

                    $abaTotal->setCellValueByColumnAndRow(13, ($linha + 1), "Saldo Acumulado");
                    $abaTotal->getStyleByColumnAndRow(13, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaSaldoAcumuladoImpacto = Coordinate::stringFromColumnIndex(13);

                    $abaTotal->getStyleByColumnAndRow(10, $linha, 13, ($linha+1))->applyFromArray($style3);

                $abaTotal->getColumnDimensionByColumn(14)->setWidth(5);

                // Resumo
                    $abaTotal->setCellValueByColumnAndRow(15, $linha, "Resumo");
                    $abaTotal->mergeCellsByColumnAndRow(15, $linha, 17, $linha);

                    $abaTotal->setCellValueByColumnAndRow(15, ($linha + 1), "Vendas");
                    $abaTotal->getStyleByColumnAndRow(15, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaVendas = Coordinate::stringFromColumnIndex(15);

                    $abaTotal->setCellValueByColumnAndRow(16, ($linha + 1), "Cancelamentos");
                    $abaTotal->getStyleByColumnAndRow(16, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaCancelamentosResumo = Coordinate::stringFromColumnIndex(16);

                    $abaTotal->setCellValueByColumnAndRow(17, ($linha + 1), "Saldo");
                    $abaTotal->getStyleByColumnAndRow(17, ($linha + 1))->getAlignment()->setWrapText(true);
                    $colunaSaldoResumo = Coordinate::stringFromColumnIndex(17);

                    $abaTotal->getStyleByColumnAndRow(15, $linha, 17, ($linha+1))->applyFromArray($style4);
            }

            $linha++;
            $abaTotal->getRowDimension($linha)->setRowHeight(30);
            $linha++;

            $linhaInicialGrafico[$tipo] = $linha;
            $linhaInicial = $linha;
            foreach ($meses as $mes => $nomeMes) {
                $idMes = substr($nomeMes, 0, 3);
                $coluna = 2;

                $valor = ExcelUtil::parseValue($nomeMes);
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;
                ###
                $valorMeta = $metasVsRealizado[$tipoMeta][$mes];
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valorMeta);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                         ->getNumberFormat()
                         ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaMeta = $colunaMeta . $linha;
                $coluna++;
                ###
                $valorRealizado = $saldos[$mes];
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valorRealizado);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                         ->getNumberFormat()
                         ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaRealizado = $colunaRealizado . $linha;
                // $colunasSoma[$idMes][] = $coordenadaRealizado;
                $coluna++;
                ###
                $valor = "";
                if ($valorMeta > 0) {
                    $valor = "={$coordenadaRealizado} / {$coordenadaMeta}";
                }
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                         ->getNumberFormat()
                         ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_PERCENTAGE_00);
                $coluna++;
                ###
                $valor = "={$coordenadaMeta}";
                if ($mes > 1) {
                    $metaAnterior = Coordinate::stringFromColumnIndex($coluna) . ($linha - 1);
                    $valor .= " + {$metaAnterior}";
                }
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                         ->getNumberFormat()
                         ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaMetaAcumulado = $colunaMetaAcumulado . $linha;
                $coluna++;
                ###
                $valor = "={$coordenadaRealizado}";
                if ($mes > 1) {
                    $metaAnterior = Coordinate::stringFromColumnIndex($coluna) . ($linha - 1);
                    $valor .= " + {$metaAnterior}";
                }
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                         ->getNumberFormat()
                         ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaRealizadoAcumulado = $colunaRealizadoAcumulado . $linha;
                $coluna++;
                ###
                $valor = "";
                if ($valorMeta > 0) {
                    $valor = "={$coordenadaRealizadoAcumulado} / {$coordenadaMetaAcumulado}";
                }
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                      ->getNumberFormat()
                      ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_PERCENTAGE_00);
                $coluna++;
                ###
                $valor = "={$coordenadaRealizadoAcumulado} - {$coordenadaMetaAcumulado}";
                $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                      ->getNumberFormat()
                      ->setFormatCode('"R$ "#,##0.00_-');

                $coluna++;

                if ($tipo == "MENSALIDADE") {
                    // IMPACTO
                        $multiplicador = 13 - $mes;

                        // Impacto esperado (meta)
                            $valor = "={$coordenadaMeta} * {$multiplicador}";
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $coordenadaMetaAcumulado = $colunaMetaImpacto . $linha;
                            $coluna++;
                        // Impacto realizado (Resultado)
                            $valor = "={$coordenadaRealizado} * {$multiplicador}";
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $coordenadaRealizadoAcumulado = $colunaRealizadoImpacto . $linha;
                            $coluna++;
                        // Saldo Mensal
                            $valor = "={$coordenadaRealizadoAcumulado} - {$coordenadaMetaAcumulado}";
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $coordenadaSaldoMensal = $colunaSaldoImpacto . $linha;
                            $coluna++;
                        // Saldo acumulado
                            $valor = "={$coordenadaSaldoMensal}";
                            if ($mes > 1) {
                                $metaAnterior = Coordinate::stringFromColumnIndex($coluna) . ($linha - 1);
                                $valor .= " + {$metaAnterior}";
                            }
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $coordenadaSaldoAcumuladoImpacto = "{$colunaSaldoAcumuladoImpacto}{$linha}";

                            // $coordenadasImpactos[$mes] += [$codRevenda => $coordenadaSaldoAcumuladoImpacto];
                            $coluna++;

                    $coluna++;
                    // RESUMO
                        // Vendas
                            $valor = "={$coordenadaRealizado}";
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $coordenadaVendas = $colunaVendas . $linha;
                            $coluna++;
                        // Cancelamentos
                            if (isset($metasVsRealizado['CANCELAMENTOS']['meses'][$mes]['valor'])) {
                                $valor = $metasVsRealizado['CANCELAMENTOS']['meses'][$mes]['valor'];
                            } else {
                                $valor = 0;
                            }
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $coordenadaCancelamentos = $colunaCancelamentosResumo . $linha;
                            $coluna++;
                        // Saldo
                            $valor = "={$coordenadaVendas} - {$coordenadaCancelamentos}";
                            $abaTotal->setCellValueByColumnAndRow($coluna, $linha, $valor);
                            $abaTotal->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                            $colunaSaldoResumo = Coordinate::stringFromColumnIndex($coluna);
                            $coluna++;
                }

                $linha++;
            }
            $linhaFinalGrafico[$tipo] = $linha - 1;

            $abaTotal->setCellValueByColumnAndRow(2, $linha, "Total");

            // Mensalidades
                // Meta
                    $valor = "=SUM({$colunaMeta}{$linhaInicial}:{$colunaMeta}" . ($linha - 1) . ")";
                    $abaTotal->setCellValue("{$colunaMeta}{$linha}", $valor);
                    $abaTotal->getStyle("{$colunaMeta}{$linha}")
                             ->getNumberFormat()
                             ->setFormatCode('"R$ "#,##0.00_-');
                    $coordenadaSomaMetaMensalidade = "{$colunaMeta}{$linha}";

                // Realizado
                    $valor = "=SUM({$colunaRealizado}{$linhaInicial}:{$colunaRealizado}" . ($linha - 1) . ")";
                    $abaTotal->setCellValue("{$colunaRealizado}{$linha}", $valor);
                    $abaTotal->getStyle("{$colunaRealizado}{$linha}")
                             ->getNumberFormat()
                             ->setFormatCode('"R$ "#,##0.00_-');
                    $coordenadaSomaRealizadoMensalidade = "{$colunaRealizado}{$linha}";

                // %
                    $abaTotal->setCellValueByColumnAndRow(5, $linha, "=D{$linha} / C{$linha}");
                    $abaTotal->getStyleByColumnAndRow(5, $linha)
                             ->getNumberFormat()
                             ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_PERCENTAGE_00);

            if ($tipo == "MENSALIDADE") {
                // IMPACTO
                    // Total impacto esperado
                        $valor = "=SUM({$colunaMetaImpacto}{$linhaInicial}:{$colunaMetaImpacto}" . ($linha - 1) . ")";
                        $abaTotal->setCellValue("{$colunaMetaImpacto}{$linha}", $valor);
                        $abaTotal->getStyle("{$colunaMetaImpacto}{$linha}")
                                 ->getNumberFormat()
                                 ->setFormatCode('"R$ "#,##0.00_-');

                    // Total impacto realizado
                        $valor = "=SUM({$colunaRealizadoImpacto}{$linhaInicial}:{$colunaRealizadoImpacto}" . ($linha - 1) . ")";
                        $abaTotal->setCellValue("{$colunaRealizadoImpacto}{$linha}", $valor);
                        $abaTotal->getStyle("{$colunaRealizadoImpacto}{$linha}")
                                 ->getNumberFormat()
                                 ->setFormatCode('"R$ "#,##0.00_-');

                    // Saldo mensal
                        $valor = "=SUM({$colunaSaldoImpacto}{$linhaInicial}:{$colunaSaldoImpacto}" . ($linha - 1) . ")";
                        $abaTotal->setCellValue("{$colunaSaldoImpacto}{$linha}", $valor);
                        $abaTotal->getStyle("{$colunaSaldoImpacto}{$linha}")
                                 ->getNumberFormat()
                                 ->setFormatCode('"R$ "#,##0.00_-');
            }
            $abaTotal->getStyleByColumnAndRow(2, $linha, ($coluna-1), $linha)->getFont()->setBold(true);

            $abaTotal->getStyleByColumnAndRow(2, $linhaInicial, ($coluna-1), $linha)
                     ->getBorders()
                     ->getAllBorders()
                     ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

            $range = "{$colunaPorcentagem}{$linhaInicial}:{$colunaPorcentagem}{$linha}";
            $spreadsheet->setConditionalStyle($range, $condicaoMenorQuePorcentagem);
            ###
            $range = "{$colunaPorcentagemAcumulado}{$linhaInicial}:{$colunaPorcentagemAcumulado}{$linha}";
            $spreadsheet->setConditionalStyle($range, $condicaoMenorQuePorcentagem);
            ###
            $range = "{$colunaSaldoAcumulado}{$linhaInicial}:{$colunaSaldoAcumulado}{$linha}";
            $spreadsheet->setConditionalStyle($range, $condicaoMenorQueZero);
            ###
            $range = "{$colunaSaldoAcumuladoImpacto}{$linhaInicial}:{$colunaSaldoAcumuladoImpacto}{$linha}";
            $spreadsheet->setConditionalStyle($range, $condicaoMenorQueZero);
            ###
            $range = "{$colunaSaldoResumo}{$linhaInicial}:{$colunaSaldoResumo}{$linha}";
            $spreadsheet->setConditionalStyle($range, $condicaoMenorQueZero);

            $linha += 2;
        }
    } else {
        $abaTotal->setCellValueByColumnAndRow(2, $linha, "Nenhum dado disponível");
        $abaTotal->mergeCellsByColumnAndRow(2, $linha, 17, $linha);
    }

# Aba gráfico
    $abaGrafico = $spreadsheet->createSheet();
    $title = "Gráfico";
    $abaGrafico->setTitle($title);
    $spreadsheet->setActiveSheetIndexByName($title);
    $abaGrafico = $spreadsheet->getActiveSheet();

    $valor = "Metas x Realizado {$ano} - {$revenda->REV_FANTASIA}";
    $abaGrafico->setCellValueByColumnAndRow(2, 1, $valor);
    $abaGrafico->mergeCellsByColumnAndRow(2, 1, 16, 1);
    $abaGrafico->getStyleByColumnAndRow(2, 1, 16, 1)->applyFromArray($styles[0]);
    $abaGrafico->getRowDimension(1)->setRowHeight(25);

    $abaGrafico->getColumnDimensionByColumn(1)->setWidth(5);

    // Dados gráfico mensalidades
        $dataSeriesLabels = [
            new DataSeriesValues(
                DataSeriesValues::DATASERIES_TYPE_STRING,
                "{$titleAbaTotal}!{$colunaMeta}" . ($linhaInicialGrafico['MENSALIDADE'] - 1),
                null,
                1
            ), // Meta
            new DataSeriesValues(
                DataSeriesValues::DATASERIES_TYPE_STRING,
                "{$titleAbaTotal}!{$colunaRealizado}" . ($linhaInicialGrafico['MENSALIDADE'] - 1),
                null,
                1
            ), // Realizado
        ];

        $xAxisTickValues = [
            new DataSeriesValues(
                DataSeriesValues::DATASERIES_TYPE_STRING,
                "{$titleAbaTotal}!{$colunaMes}{$linhaInicialGrafico['MENSALIDADE']}:{$colunaMes}{$linhaFinalGrafico['MENSALIDADE']}",
                null,
                4
            ),
        ];

        $dataSeriesValues = [
            new DataSeriesValues(
                DataSeriesValues::DATASERIES_TYPE_NUMBER,
                "{$titleAbaTotal}!{$colunaMeta}{$linhaInicialGrafico['MENSALIDADE']}:{$colunaMeta}{$linhaFinalGrafico['MENSALIDADE']}",
                '"R$ "#,##0.00_-',
                4
            ),
            new DataSeriesValues(
                DataSeriesValues::DATASERIES_TYPE_NUMBER,
                "{$titleAbaTotal}!{$colunaRealizado}{$linhaInicialGrafico['MENSALIDADE']}:{$colunaRealizado}{$linhaFinalGrafico['MENSALIDADE']}",
                '"R$ "#,##0.00_-',
                1
            ),
        ];

        $series = new DataSeries(
            DataSeries::TYPE_LINECHART, // plotType
            DataSeries::GROUPING_CLUSTERED, // plotGrouping
            range(0, count($dataSeriesValues) - 1), // plotOrder
            $dataSeriesLabels, // plotLabel
            $xAxisTickValues, // plotCategory
            $dataSeriesValues        // plotValues
        );

        $plotArea = new PlotArea(null, [$series]);
        $legend = new Legend(Legend::POSITION_RIGHT, null, false);

        $title = new Title("Mensalidades");
        $yAxisLabel = new Title('Valores');

        $chart = new Chart(
            'chart1', // name
            $title, // title
            $legend, // legend
            $plotArea, // plotArea
            true, // plotVisibleOnly
            0, // displayBlanksAs
            null, // xAxisLabel
            $yAxisLabel  // yAxisLabel
        );

        $chart->setTopLeftPosition('B2');
        $chart->setBottomRightPosition('Q32');

        $abaGrafico->addChart($chart);

    if ($revenda->REV_TIPO != 3) {
        // Dados gráfico implantações
            $dataSeriesLabels = [
                new DataSeriesValues(
                    DataSeriesValues::DATASERIES_TYPE_STRING,
                    "{$titleAbaTotal}!{$colunaMeta}" . ($linhaInicialGrafico['IMPLANTACAO'] - 1),
                    null,
                    1
                ), // Meta
                new DataSeriesValues(
                    DataSeriesValues::DATASERIES_TYPE_STRING,
                    "{$titleAbaTotal}!{$colunaRealizado}" . ($linhaInicialGrafico['IMPLANTACAO'] - 1),
                    null,
                    1
                ), // Realizado
            ];

            $xAxisTickValues = [
                new DataSeriesValues(
                    DataSeriesValues::DATASERIES_TYPE_STRING,
                    "{$titleAbaTotal}!{$colunaMes}{$linhaInicialGrafico['IMPLANTACAO']}:{$colunaMes}{$linhaFinalGrafico['IMPLANTACAO']}",
                    null,
                    4
                ),
            ];

            $dataSeriesValues = [
                new DataSeriesValues(
                    DataSeriesValues::DATASERIES_TYPE_NUMBER,
                    "{$titleAbaTotal}!{$colunaMeta}{$linhaInicialGrafico['IMPLANTACAO']}:{$colunaMeta}{$linhaFinalGrafico['IMPLANTACAO']}",
                    '"R$ "#,##0.00_-',
                    4
                ),
                new DataSeriesValues(
                    DataSeriesValues::DATASERIES_TYPE_NUMBER,
                    "{$titleAbaTotal}!{$colunaRealizado}{$linhaInicialGrafico['IMPLANTACAO']}:{$colunaRealizado}{$linhaFinalGrafico['IMPLANTACAO']}",
                    '"R$ "#,##0.00_-',
                    1
                ),
            ];

            $series = new DataSeries(
                DataSeries::TYPE_LINECHART, // plotType
                DataSeries::GROUPING_CLUSTERED, // plotGrouping
                range(0, count($dataSeriesValues) - 1), // plotOrder
                $dataSeriesLabels, // plotLabel
                $xAxisTickValues, // plotCategory
                $dataSeriesValues        // plotValues
            );

            $plotArea = new PlotArea(null, [$series]);
            $legend = new Legend(Legend::POSITION_RIGHT, null, false);

            $title = new Title("Implantações");
            $yAxisLabel = new Title('Valores');

            $chart = new Chart(
                'chart2', // name
                $title, // title
                $legend, // legend
                $plotArea, // plotArea
                true, // plotVisibleOnly
                0, // displayBlanksAs
                null, // xAxisLabel
                $yAxisLabel  // yAxisLabel
            );

            $chart->setTopLeftPosition('B34');
            $chart->setBottomRightPosition('Q62');

            $abaGrafico->addChart($chart);
    }

# Aba vendas
    $abaVendas = $spreadsheet->createSheet();
    $title = "Vendas";
    $abaVendas->setTitle($title);
    $spreadsheet->setActiveSheetIndexByName($title);
    $abaVendas = $spreadsheet->getActiveSheet();

    $abaVendas->getColumnDimensionByColumn(1)->setWidth(5);
    $abaVendas->getColumnDimensionByColumn(2)->setWidth(10);
    $abaVendas->getColumnDimensionByColumn(3)->setWidth(15);
    $abaVendas->getColumnDimensionByColumn(4)->setWidth(30);
    $abaVendas->getColumnDimensionByColumn(5)->setWidth(15);
    $abaVendas->getColumnDimensionByColumn(6)->setWidth(15);
    $abaVendas->getColumnDimensionByColumn(7)->setWidth(12);
    $abaVendas->getColumnDimensionByColumn(8)->setWidth(16);
    $abaVendas->getColumnDimensionByColumn(9)->setWidth(5);
    $abaVendas->getColumnDimensionByColumn(10)->setWidth(20);
    $abaVendas->getColumnDimensionByColumn(11)->setWidth(15);
    $abaVendas->getColumnDimensionByColumn(12)->setWidth(20);
    $abaVendas->getColumnDimensionByColumn(13)->setWidth(25);

    $linha = 1;

    $valor = ExcelUtil::parseValue("VENDAS - {$revenda->REV_FANTASIA}");
    $abaVendas->setCellValueByColumnAndRow(2, $linha, $valor);
    $abaVendas->getStyleByColumnAndRow(2, $linha, 13, $linha)->applyFromArray($styles[0]);
    $abaVendas->mergeCellsByColumnAndRow(2, $linha, 13, $linha);
    $abaVendas->getRowDimension($linha)->setRowHeight(20);
    $linha++;
    ###
    $abaVendas->setCellValueByColumnAndRow(2, $linha, "Mês");
    $abaVendas->setCellValueByColumnAndRow(3, $linha, "Tipo");
    $abaVendas->setCellValueByColumnAndRow(4, $linha, "Razão social");
    $abaVendas->setCellValueByColumnAndRow(5, $linha, "Implantação");
    $abaVendas->setCellValueByColumnAndRow(6, $linha, "Mensalidade");
    $abaVendas->setCellValueByColumnAndRow(7, $linha, "Nº usuários");
    $abaVendas->setCellValueByColumnAndRow(8, $linha, "Cidade");
    $abaVendas->setCellValueByColumnAndRow(9, $linha, "UF");
    $abaVendas->setCellValueByColumnAndRow(10, $linha, "Unidade de Negócios");
    $abaVendas->setCellValueByColumnAndRow(11, $linha, "Vendedor");
    $abaVendas->setCellValueByColumnAndRow(12, $linha, "Forma de Venda");
    $abaVendas->setCellValueByColumnAndRow(13, $linha, "Produto");

    $abaVendas->setAutoFilterByColumnAndRow(2, $linha, 13, $linha);

    $abaVendas->getStyleByColumnAndRow(2, $linha, 13, $linha)->applyFromArray($styles[2]);
    $abaVendas->getStyleByColumnAndRow(2, $linha, 13, $linha)->getAlignment()->setWrapText(true);
    $abaVendas->getRowDimension($linha)->setRowHeight(30);
    $linha++;

    $linhaInicial = $linha;

    if (!empty($metasVsRealizado['NEGOCIACOES'])) {
        foreach ($metasVsRealizado['NEGOCIACOES'] as $negociacao) {
            $cliente = $negociacao->Cliente;
            $contrato = $negociacao->Contrato;

            $coluna = 2;

            # Mês
                $valor = ExcelUtil::parseValue($negociacao->FEN_DTCONTRATACAO);
                $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaVendas->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_XLSX17);
                $coluna++;

            # Tipo
                switch ($negociacao->FEN_TIPO_NEGOCIACAO) {
                    case 'CLIENTES_NOVOS':
                        $valor = "Contrato";
                        break;
                    case 'ADENDOS_COM_ACRESCIMO':
                        $valor = "Adendo";
                        break;
                    case 'TRANSFERENCIAS_COM_ACRESCIMO':
                        $valor = "Transferência";
                        break;
                    case 'REATIVACOES_CLIENTES':
                        $valor = "Reativação";
                        break;
                    default:
                        $valor = "-";
                        break;
                }
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Razão social
                $valor = ExcelUtil::parseValue($cliente->CLI_NOME);
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Valor implantação
                $valor = $negociacao->FEN_VLRIMPLANTACAO;
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaVendas->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

            # Valor mensalidade
                // contratos, reativação => valor mensal, adendos e transf => diferença
                if (in_array($negociacao->FEN_TIPO_NEGOCIACAO, ['CLIENTES_NOVOS', 'REATIVACOES_CLIENTES'])) {
                    $valor = $negociacao->FEN_VLRNEGOCIADO;
                } else {
                    $valor = $negociacao->FEN_VLRDIFERENCA;
                }
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaVendas->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

            # Usuários
                $valor = $negociacao->FEN_NROUSUARIOS;
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Cidade
                $valor = ExcelUtil::parseValue($cliente->Cidade->CID_DESCRICAO);
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # UF
                $valor = $cliente->Cidade->CID_UF;
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Unidade de negócios
                $valor = ExcelUtil::parseValue($negociacao->Revenda);
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Vendedor
                $valor = ExcelUtil::parseValue($negociacao->Vendedor);
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Forma de venda
                $valor = ExcelUtil::parseValue($negociacao->Motivo);
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Produto
                if (empty($contrato) || $negociacao->FEN_TIPO_NEGOCIACAO == "REATIVACOES_CLIENTES") {
                    $valor = ExcelUtil::parseValue($negociacao->Produto);
                } else {
                    $valor = ExcelUtil::parseValue($contrato->getProdutoComModulos());
                }
                $abaVendas->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaVendas->getStyleByColumnAndRow($coluna, $linha)->getAlignment()->setWrapText(true);
                $coluna++;

            $linha++;
        }
        $abaVendas->getStyleByColumnAndRow(2, $linhaInicial, ($coluna-1), ($linha-1))
                  ->getBorders()
                  ->getAllBorders()
                  ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
    } else {
        $abaVendas->setCellValueByColumnAndRow(2, $linha, "Nenhum dado disponível");
        $abaVendas->mergeCellsByColumnAndRow(2, $linha, 13, $linha);
    }
    $linha++;

# Aba cancelamentos
    $abaCancelamentos = $spreadsheet->createSheet();
    $title = "Cancelamentos";
    $abaCancelamentos->setTitle($title);
    $spreadsheet->setActiveSheetIndexByName($title);
    $abaCancelamentos = $spreadsheet->getActiveSheet();

    $abaCancelamentos->getColumnDimensionByColumn(1)->setWidth(5);
    $abaCancelamentos->getColumnDimensionByColumn(2)->setWidth(10);
    $abaCancelamentos->getColumnDimensionByColumn(3)->setWidth(15);
    $abaCancelamentos->getColumnDimensionByColumn(4)->setWidth(30);
    $abaCancelamentos->getColumnDimensionByColumn(5)->setWidth(15);
    $abaCancelamentos->getColumnDimensionByColumn(6)->setWidth(15);
    $abaCancelamentos->getColumnDimensionByColumn(7)->setWidth(12);
    $abaCancelamentos->getColumnDimensionByColumn(8)->setWidth(16);
    $abaCancelamentos->getColumnDimensionByColumn(9)->setWidth(5);
    $abaCancelamentos->getColumnDimensionByColumn(10)->setWidth(20);
    $abaCancelamentos->getColumnDimensionByColumn(11)->setWidth(20);
    $abaCancelamentos->getColumnDimensionByColumn(12)->setWidth(20);
    $abaCancelamentos->getColumnDimensionByColumn(13)->setWidth(15);
    $abaCancelamentos->getColumnDimensionByColumn(14)->setWidth(25);

    $linha = 1;

    $valor = ExcelUtil::parseValue("CANCELAMENTOS - {$revenda->REV_FANTASIA}");
    $abaCancelamentos->setCellValueByColumnAndRow(2, $linha, $valor);
    $abaCancelamentos->getStyleByColumnAndRow(2, $linha, 14, $linha)->applyFromArray($styles[0]);
    $abaCancelamentos->mergeCellsByColumnAndRow(2, $linha, 14, $linha);
    $abaCancelamentos->getRowDimension($linha)->setRowHeight(20);
    $linha++;
    ###
    $abaCancelamentos->setCellValueByColumnAndRow(2, $linha, "Mês");
    $abaCancelamentos->setCellValueByColumnAndRow(3, $linha, "Reativado");
    $abaCancelamentos->setCellValueByColumnAndRow(4, $linha, "Razão social");
    $abaCancelamentos->setCellValueByColumnAndRow(5, $linha, "Data de Contratação");
    $abaCancelamentos->setCellValueByColumnAndRow(6, $linha, "Mensalidade");
    $abaCancelamentos->setCellValueByColumnAndRow(7, $linha, "Nº usuários");
    $abaCancelamentos->setCellValueByColumnAndRow(8, $linha, "Cidade");
    $abaCancelamentos->setCellValueByColumnAndRow(9, $linha, "UF");
    $abaCancelamentos->setCellValueByColumnAndRow(10, $linha, "Unidade de Negócios");
    $abaCancelamentos->setCellValueByColumnAndRow(11, $linha, "Motivo Cancelamento");
    $abaCancelamentos->setCellValueByColumnAndRow(12, $linha, "Motivo Cancelamento Vendedor");
    $abaCancelamentos->setCellValueByColumnAndRow(13, $linha, "Data Reativação");
    $abaCancelamentos->setCellValueByColumnAndRow(14, $linha, "Observações");

    $abaCancelamentos->setAutoFilterByColumnAndRow(2, $linha, 14, $linha);

    $abaCancelamentos->getStyleByColumnAndRow(2, $linha, 14, $linha)->applyFromArray($styles[2]);
    $abaCancelamentos->getStyleByColumnAndRow(2, $linha, 14, $linha)->getAlignment()->setWrapText(true);
    $abaCancelamentos->getRowDimension($linha)->setRowHeight(30);
    $linha++;

    $dataLimite = "{$ano}-12-31";
    $linhaInicial = $linha;

    if (!empty($metasVsRealizado['CANCELAMENTOS']['negociacoes'])) {
        foreach ($metasVsRealizado['CANCELAMENTOS']['negociacoes'] as $negociacao) {
            $cliente = $negociacao->Cliente;
            $reativado = $negociacao->foiReativado($dataLimite);

            $coluna = 2;

            # Mês
                $valor = ExcelUtil::parseValue($negociacao->FEN_DTRESCISAO);
                $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaCancelamentos->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_XLSX17);
                $coluna++;

            # Tipo
                $valor = $reativado ? "Sim" : "Não";
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Razão social
                $valor = ExcelUtil::parseValue($cliente->CLI_NOME);
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Data de contratação
                $valor = ExcelUtil::parseValue($negociacao->FEN_DTCONTRATACAO);
                if ($valor != "-") {
                    $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
                }
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaCancelamentos->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode('dd/mm/yyyy');
                $coluna++;

            # Valor mensalidade
                $valor = $negociacao->FEN_VLRNEGOCIADO;
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaCancelamentos->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

            # Usuários
                $valor = $negociacao->FEN_NROUSUARIOS;
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Cidade
                $valor = ExcelUtil::parseValue($cliente->Cidade->CID_DESCRICAO);
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # UF
                $valor = $cliente->Cidade->CID_UF;
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Unidade de negócios
                $valor = ExcelUtil::parseValue($negociacao->Revenda);
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            # Motivo cancelamento
                $valor = ExcelUtil::parseValue($negociacao->Motivo);
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaCancelamentos->getStyleByColumnAndRow($coluna, $linha)->getAlignment()->setWrapText(true);
                $coluna++;

            # Motivo cancelamento informado pelo vendedor
                $valor = "-";
                if (!empty($negociacao->SolicitacaoCancelamento)) {
                    $motivo = $negociacao->SolicitacaoCancelamento->MotivoVendedor;
                    $valor = ExcelUtil::parseValue($motivo);
                }
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaCancelamentos->getStyleByColumnAndRow($coluna, $linha)->getAlignment()->setWrapText(true);
                $coluna++;

            # Data reativação
                $valor = ($reativado) ? $reativado->Contrato->COT_DTATIVACAO : "-";
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaCancelamentos->getStyleByColumnAndRow($coluna, $linha)
                          ->getNumberFormat()
                          ->setFormatCode('dd/mm/yyyy');
                $coluna++;

            # Observações
                $valor = "";
                $abaCancelamentos->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

            if ($reativado) {
                $abaCancelamentos->getStyleByColumnAndRow(2, $linha, ($coluna-1), $linha)
                                 ->getFill()
                                 ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID);

                $abaCancelamentos->getStyleByColumnAndRow(2, $linha, ($coluna-1), $linha)
                                 ->getFill()
                                 ->getStartColor()
                                 ->setRGB('C2E0AE');
            }

            $linha++;
        }
        $abaCancelamentos->getStyleByColumnAndRow(2, $linhaInicial, ($coluna-1), ($linha-1))
                         ->getBorders()
                         ->getAllBorders()
                         ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
    } else {
        $abaCancelamentos->setCellValueByColumnAndRow(2, $linha, "Nenhum dado disponível");
        $abaCancelamentos->mergeCellsByColumnAndRow(2, $linha, 14, $linha);
    }

$dadosRanking = array(
    'MENSALIDADES' => array(),
    'IMPLANTACOES' => array(),
);
# Aba Vendedores
    $abaVendedores = $spreadsheet->createSheet();
    $titleAbaVendedores = "Vendas por vendedor";
    $abaVendedores->setTitle($titleAbaVendedores);
    $spreadsheet->setActiveSheetIndexByName($titleAbaVendedores);
    $abaVendedores = $spreadsheet->getActiveSheet();

    $linha = 1;

    $abaVendedores->getColumnDimensionByColumn(1)->setWidth(5);
    $abaVendedores->getColumnDimensionByColumn(2)->setWidth(10);
    for ($i=3; $i <= 9; $i++) {
        $abaVendedores->getColumnDimensionByColumn($i)->setWidth(18);
    }
    $abaVendedores->getColumnDimensionByColumn(10)->setWidth(5);
    $abaVendedores->getColumnDimensionByColumn(11)->setWidth(30);
    for ($i=12; $i <= 16; $i++) {
        $abaVendedores->getColumnDimensionByColumn($i)->setWidth(15);
    }

    $valor = ExcelUtil::parseValue("VENDAS POR VENDEDOR - {$revenda->REV_FANTASIA}");
    $abaVendedores->setCellValueByColumnAndRow(2, $linha, $valor);
    $abaVendedores->getStyleByColumnAndRow(2, $linha, 14, $linha)->applyFromArray($styles[0]);
    $abaVendedores->mergeCellsByColumnAndRow(2, $linha, 14, $linha);
    $abaVendedores->getRowDimension($linha)->setRowHeight(20);

    $linha += 2;

    foreach ($metasVsRealizado['VENDEDORES'] as $codVendedor => $dados) {
        if (!empty($dados['Motivos']) && !empty($dados['Produtos'])) {
            $vendedor = $dados['dadosVendedor'];

            $valor = ExcelUtil::parseValue($vendedor->FUN_NOME);
            $abaVendedores->setCellValueByColumnAndRow(2, $linha, $valor);
            $abaVendedores->getStyleByColumnAndRow(2, $linha, 16, $linha)->applyFromArray($styles[0]);
            $abaVendedores->mergeCellsByColumnAndRow(2, $linha, 16, $linha);
            $abaVendedores->getRowDimension($linha)->setRowHeight(20);
            $linha++;

            $linhaInicialVendedor = $linha;
            $mensalidades = $fechamentosNegociacoes->buildTableIndicadores(
                $spreadsheet,
                'Mensalidades',
                $dados['MENSALIDADE'],
                $linha,
                [$styles[2], $styles[3]]
            );

            if ($revenda->REV_TIPO != 3) {
                $implantacoes = $fechamentosNegociacoes->buildTableIndicadores(
                    $spreadsheet,
                    'Implantações',
                    $dados['IMPLANTACAO'],
                    $linha,
                    [$styles[6], $styles[7]]
                );
            }
            $linhaFinalMetasVsResultados = $linha;

            $linha = $linhaInicialVendedor;

            // Motivos
                $valor = "VENDAS POR MOTIVOS - {$ano}";
                $abaVendedores->setCellValueByColumnAndRow(11, $linha, $valor);
                $abaVendedores->getStyleByColumnAndRow(11, $linha, 16, $linha)->applyFromArray($styles[4]);
                $abaVendedores->mergeCellsByColumnAndRow(11, $linha, 16, $linha);
                $linha++;
                /////
                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Motivo");
                $abaVendedores->mergeCellsByColumnAndRow(11, $linha, 11, ($linha+1));

                $abaVendedores->setCellValueByColumnAndRow(12, $linha, "Quantidade");
                $abaVendedores->mergeCellsByColumnAndRow(12, $linha, 12, ($linha+1));
                $abaVendedores->getStyleByColumnAndRow(11, $linha, 12, $linha)->applyFromArray($styles[1]);
                ###
                $abaVendedores->setCellValueByColumnAndRow(13, $linha, "Mensalidades");
                $abaVendedores->mergeCellsByColumnAndRow(13, $linha, 14, $linha);

                $abaVendedores->setCellValueByColumnAndRow(13, ($linha+1), "Valor");

                $abaVendedores->setCellValueByColumnAndRow(14, ($linha+1), "Média");

                $abaVendedores->getStyleByColumnAndRow(13, $linha, 14, ($linha+1))->applyFromArray($styles[2]);
                ###
                $abaVendedores->setCellValueByColumnAndRow(15, $linha, "Implantações");
                $abaVendedores->mergeCellsByColumnAndRow(15, $linha, 16, $linha);

                $abaVendedores->setCellValueByColumnAndRow(15, ($linha+1), "Valor");

                $abaVendedores->setCellValueByColumnAndRow(16, ($linha+1), "Média");

                $abaVendedores->getStyleByColumnAndRow(15, $linha, 16, ($linha+1))->applyFromArray($styles[3]);

                $linha += 2;
                $linhaInicial = $linha;

                $totalMensalidades = 0.00;
                $totalImplantacoes = 0.00;

                Util::arraySortByColumn($dados['Motivos'], 'name', SORT_ASC);
                foreach ($dados['Motivos'] as $motivo) {
                    $coluna = 11;

                    $valor = ExcelUtil::parseValue($motivo['name']);
                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $valor);
                    $coluna++;

                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $motivo['qtd']);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getAlignment()
                                  ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                    $coluna++;

                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $motivo['mensalidade']);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                    $totalMensalidades += $motivo['mensalidade'];
                    $coluna++;

                    $valor = "=M{$linha} / L{$linha}";
                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $valor);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                    $totalImplantacoes += $motivo['implantacao'];
                    $coluna++;

                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $motivo['implantacao']);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                    $coluna++;

                    $valor = "=O{$linha} / L{$linha}";
                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $valor);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');

                    $linha++;
                }

                $linhaInicialTotal = $linha;

                // Total
                    $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Total de Contratos Novos");
                    // Quantidade
                        $valor = "=SUM(L{$linhaInicial}:L" . ($linha-1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(12, $linha)
                                      ->getAlignment()
                                      ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                        $coordenadaQtdVendidoNoAno = "L{$linha}";

                    // Mensalidade
                        $valor = "=SUM(M{$linhaInicial}:M" . ($linha-1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(13, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(13, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $coordenadaValorVendidoNoAno = "M{$linha}";

                        $valor = "=M{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(14, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(14, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    // Implantação
                        $valor = "=SUM(O{$linhaInicial}:O" . ($linha-1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(15, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(15, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $coordenadaValorVendidoNoAno = "N{$linha}";

                        $valor = "=O{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(16, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(16, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                    $linha++;

                // Reativações
                    $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Reativações");
                    // Quantidade
                        $valor = $dados['Reativacoes']['qtd'];
                        $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(12, $linha)
                                      ->getAlignment()
                                      ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);

                    // Mensalidade
                        $valor = $dados['Reativacoes']['mensalidade'];
                        $abaVendedores->setCellValueByColumnAndRow(13, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(13, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $totalMensalidades += $valor;

                        $valor = "=M{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(14, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(14, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    // Implantação
                        $valor = $dados['Reativacoes']['implantacao'];
                        $abaVendedores->setCellValueByColumnAndRow(15, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(15, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $totalImplantacoes += $valor;
                        $coordenadaValorVendidoNoAno = "M{$linha}";

                        $valor = "=O{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(16, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(16, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    $linha++;

                // Adendos
                    $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Adendos vendidos no período");
                    // Quantidade
                        $valor = $dados['Adendos']['qtd'];
                        $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(12, $linha)
                                      ->getAlignment()
                                      ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);

                    // Mensalidade
                        $valor = $dados['Adendos']['mensalidade'];
                        $abaVendedores->setCellValueByColumnAndRow(13, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(13, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $totalMensalidades += $valor;

                        $valor = "=M{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(14, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(14, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    // Implantação
                        $valor = $dados['Adendos']['implantacao'];
                        $abaVendedores->setCellValueByColumnAndRow(15, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(15, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $totalImplantacoes += $valor;
                        $coordenadaValorVendidoNoAno = "D{$linha}";

                        $valor = "=O{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(16, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(16, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    $linha++;

                // Transferências
                    $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Diferença de Transferências");
                    // Quantidade
                        $valor = $dados['Transferencias']['qtd'];
                        $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(12, $linha)
                                      ->getAlignment()
                                      ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);

                    // Mensalidade
                        $valor = $dados['Transferencias']['mensalidade'];
                        $abaVendedores->setCellValueByColumnAndRow(13, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(13, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $totalMensalidades += $valor;

                        $valor = "=M{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(14, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(14, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    // Implantação
                        $valor = $dados['Transferencias']['implantacao'];
                        $abaVendedores->setCellValueByColumnAndRow(15, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(15, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $totalImplantacoes += $valor;
                        $coordenadaValorVendidoNoAno = "M{$linha}";

                        $valor = "=O{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(16, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(16, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    $linha++;

                // Total de Negociações
                    $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Total de Negociações");

                    // Quantidade
                        $valor = "=SUM(L" . ($linhaInicialTotal) . ":L" . ($linha - 1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(12, $linha)
                                      ->getAlignment()
                                      ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);

                    // Mensalidade
                        $valor = "=SUM(M" . ($linhaInicialTotal) . ":M" . ($linha - 1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(13, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(13, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $coordenadaTotalMensalidade = "M{$linha}";

                        $valor = "=M{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(14, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(14, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $abaVendedores->getStyleByColumnAndRow(13, $linha, 16, $linha)->getFont()->getColor()->setRGB('0000FF');

                    // Implantação
                        $valor = "=SUM(O" . ($linhaInicialTotal) . ":O" . ($linha - 1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(15, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(15, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $coordenadaTotalImplantacao = "O{$linha}";

                        $valor = "=O{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(16, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(16, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    $abaVendedores->getStyleByColumnAndRow(11, $linha, 16, $linha)->getFont()->getColor()->setRGB('0000FF');

                $abaVendedores->getStyleByColumnAndRow(11, $linhaInicialTotal, 16, $linha)->getFont()->setBold(true);

                $abaVendedores->getStyleByColumnAndRow(11, $linhaInicial, 16, $linha)
                              ->getBorders()
                              ->getAllBorders()
                              ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

            // Produtos
                $linha += 2;

                $valor = "PRODUTOS MAIS VENDIDOS - {$ano}";
                $abaVendedores->setCellValueByColumnAndRow(11, $linha, $valor);
                $abaVendedores->getStyleByColumnAndRow(11, $linha, 16, $linha)->applyFromArray($styles[4]);
                $abaVendedores->mergeCellsByColumnAndRow(11, $linha, 16, $linha);
                $linha++;
                /////
                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Produto");
                $abaVendedores->mergeCellsByColumnAndRow(11, $linha, 11, ($linha+1));

                $abaVendedores->setCellValueByColumnAndRow(12, $linha, "Quantidade");
                $abaVendedores->mergeCellsByColumnAndRow(12, $linha, 12, ($linha+1));
                $abaVendedores->getStyleByColumnAndRow(11, $linha, 12, $linha)->applyFromArray($styles[1]);

                $abaVendedores->setCellValueByColumnAndRow(13, $linha, "Mensalidades");
                $abaVendedores->mergeCellsByColumnAndRow(13, $linha, 14, $linha);

                $abaVendedores->setCellValueByColumnAndRow(13, ($linha+1), "Valor");

                $abaVendedores->setCellValueByColumnAndRow(14, ($linha+1), "Média");

                $abaVendedores->getStyleByColumnAndRow(13, $linha, 14, ($linha+1))->applyFromArray($styles[2]);
                ###
                $abaVendedores->setCellValueByColumnAndRow(15, $linha, "Implantações");
                $abaVendedores->mergeCellsByColumnAndRow(15, $linha, 16, $linha);

                $abaVendedores->setCellValueByColumnAndRow(15, ($linha+1), "Valor");

                $abaVendedores->setCellValueByColumnAndRow(16, ($linha+1), "Média");

                $abaVendedores->getStyleByColumnAndRow(15, $linha, 16, ($linha+1))->applyFromArray($styles[3]);

                $linha += 2;

                $linhaInicial = $linha;
                foreach ($dados['Produtos'] as $key => $produto) {
                    $coluna = 11;

                    $valor = ExcelUtil::parseValue($produto['name']);
                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $valor);
                    $coluna++;

                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $produto['qtd']);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getAlignment()
                                  ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                    $coluna++;

                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $produto['mensalidade']);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                    ->getNumberFormat()
                                    ->setFormatCode('"R$ "#,##0.00_-');
                    $coluna++;

                    $valor = "=K{$linha} / J{$linha}";
                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $valor);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                    $coluna++;

                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $produto['implantacao']);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');
                    $coluna++;

                    $valor = "=M{$linha} / J{$linha}";
                    $abaVendedores->setCellValueByColumnAndRow($coluna, $linha, $valor);
                    $abaVendedores->getStyleByColumnAndRow($coluna, $linha)
                                  ->getNumberFormat()
                                  ->setFormatCode('"R$ "#,##0.00_-');

                    $linha++;
                }

                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Total");
                // Total
                    // Quantidade
                        $valor = "=SUM(L{$linhaInicial}:L" . ($linha-1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(12, $linha)
                                      ->getAlignment()
                                      ->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
                        $coordenadaQtdVendidoNoAno = "C{$linha}";

                    // Mensalidade
                        $valor = "=SUM(M{$linhaInicial}:M" . ($linha-1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(13, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(13, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $coordenadaValorVendidoNoAno = "M{$linha}";

                        $valor = "=M{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(14, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(14, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    // Implantação
                        $valor = "=SUM(O{$linhaInicial}:O" . ($linha-1) . ")";
                        $abaVendedores->setCellValueByColumnAndRow(15, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(15, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');
                        $coordenadaValorVendidoNoAno = "O{$linha}";

                        $valor = "=O{$linha} / L{$linha}";
                        $abaVendedores->setCellValueByColumnAndRow(16, $linha, $valor);
                        $abaVendedores->getStyleByColumnAndRow(16, $linha)
                                      ->getNumberFormat()
                                      ->setFormatCode('"R$ "#,##0.00_-');

                    $abaVendedores->getStyleByColumnAndRow(11, $linha, 16, $linha)->getFont()->setBold(true);

                    $abaVendedores->getStyleByColumnAndRow(11, $linhaInicial, 16, ($linha-2))->getFont()->setBold(false);
                    $abaVendedores->getStyleByColumnAndRow(11, $linhaInicial, 16, $linha)
                                  ->getBorders()
                                  ->getAllBorders()
                                  ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

            $linha += 2;

            // Média Mensal
                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Média mensal de vendas");
                $abaVendedores->mergeCellsByColumnAndRow(11, $linha, 12, $linha);
                $abaVendedores->getStyleByColumnAndRow(11, $linha, 12, $linha)->applyFromArray($styles[4]);
                $linha++;

                $linhaInicial = $linha;

                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Meses de Atividades");
                $abaVendedores->setCellValueByColumnAndRow(12, $linha, $dados['MesesAtividade']);
                $coordenadaMesesAtividade = "L{$linha}";
                $linha++;

                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Mensalidades");
                $valor = "={$coordenadaTotalMensalidade} / {$coordenadaMesesAtividade}";
                $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                $abaVendedores->getStyleByColumnAndRow(12, $linha)
                              ->getNumberFormat()
                              ->setFormatCode('"R$ "#,##0.00_-');
                $linha++;

                $abaVendedores->setCellValueByColumnAndRow(11, $linha, "Implantações");
                $valor = "={$coordenadaTotalImplantacao} / {$coordenadaMesesAtividade}";
                $abaVendedores->setCellValueByColumnAndRow(12, $linha, $valor);
                $abaVendedores->getStyleByColumnAndRow(12, $linha)
                              ->getNumberFormat()
                              ->setFormatCode('"R$ "#,##0.00_-');

                $abaVendedores->getStyleByColumnAndRow(11, $linhaInicial, 12, $linha)
                              ->getBorders()
                              ->getAllBorders()
                              ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

                // dados para o ranking
                    $dadosRanking['MENSALIDADES'][$codVendedor] = array(
                        'Vendedor' => $vendedor->FUN_NOME,
                        'Valor' => $totalMensalidades,
                        'Media' => ($totalMensalidades / $dados['MesesAtividade']),
                        'CoordenadaValor' => $coordenadaTotalMensalidade,
                        'CoordenadaMeses' => $coordenadaMesesAtividade,
                    );

                    $dadosRanking['IMPLANTACOES'][$codVendedor] = array(
                        'Vendedor' => $vendedor->FUN_NOME,
                        'Valor' => $totalImplantacoes,
                        'Media' => ($totalImplantacoes / $dados['MesesAtividade']),
                        'CoordenadaValor' => $coordenadaTotalImplantacao,
                        'CoordenadaMeses' => $coordenadaMesesAtividade,
                    );

            $linhaFinalLateral = $linha;

            if ($linhaFinalMetasVsResultados > $linhaFinalLateral) {
                $linha = $linhaFinalMetasVsResultados;
            }
            $linha += 2;
        }
    }

# Aba ranking vendas
    Util::arraySortByColumn($dadosRanking['MENSALIDADES'], 'Media', SORT_DESC);
    Util::arraySortByColumn($dadosRanking['IMPLANTACOES'], 'Media', SORT_DESC);

    $abaRanking = $spreadsheet->createSheet();
    $title = "Ranking de vendas";
    $abaRanking->setTitle($title);
    $spreadsheet->setActiveSheetIndexByName($title);
    $abaRanking = $spreadsheet->getActiveSheet();

    $linha = 1;

    $valor = ExcelUtil::parseValue("RANKING DE VENDAS - {$revenda->REV_FANTASIA}");
    $abaRanking->setCellValueByColumnAndRow(2, $linha, $valor);
    $abaRanking->getStyleByColumnAndRow(2, $linha, 5, $linha)->applyFromArray($styles[0]);
    $abaRanking->mergeCellsByColumnAndRow(2, $linha, 5, $linha);
    $abaRanking->getRowDimension($linha)->setRowHeight(20);

    $abaRanking->getColumnDimensionByColumn(1)->setWidth(5);

    // $linha += 2;
    $linha++;

    // Mensalidades
        $valor = "MENSALIDADES";
        $abaRanking->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaRanking->mergeCellsByColumnAndRow(2, $linha, 5, $linha);
        $abaRanking->getStyleByColumnAndRow(2, $linha, 5, $linha)->applyFromArray($styles[1]);
        $linha++;

        $abaRanking->setCellValueByColumnAndRow(2, $linha, "Vendedor");
        $abaRanking->getColumnDimensionByColumn(2)->setWidth(35);

        $abaRanking->setCellValueByColumnAndRow(3, $linha, "Total");
        $abaRanking->getColumnDimensionByColumn(3)->setWidth(15);

        $abaRanking->setCellValueByColumnAndRow(4, $linha, "Meses");
        $abaRanking->getColumnDimensionByColumn(4)->setWidth(15);

        $abaRanking->setCellValueByColumnAndRow(5, $linha, "Média");
        $abaRanking->getColumnDimensionByColumn(5)->setWidth(15);
        $abaRanking->getStyleByColumnAndRow(2, $linha, 5, $linha)->applyFromArray($styles[3]);

        $linha++;

        $linhaInicial = 1;

        if (!empty($dadosRanking['MENSALIDADES'])) {
            foreach ($dadosRanking['MENSALIDADES'] as $valor => $dados) {
                $coluna = 2;

                $valor = ExcelUtil::parseValue($dados['Vendedor']);
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

                $valor = "='{$titleAbaVendedores}'!{$dados['CoordenadaValor']}";
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaRanking->getStyleByColumnAndRow($coluna, $linha)
                           ->getNumberFormat()
                           ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaValor = Coordinate::stringFromColumnIndex($coluna) . $linha;
                $coluna++;

                $valor = "='{$titleAbaVendedores}'!{$dados['CoordenadaMeses']}";
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coordenadaMeses = Coordinate::stringFromColumnIndex($coluna) . $linha;
                $coluna++;

                $valor = "={$coordenadaValor} / {$coordenadaMeses}";
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaRanking->getStyleByColumnAndRow($coluna, $linha)
                           ->getNumberFormat()
                           ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

                $linha++;
            }


            $abaRanking->getStyleByColumnAndRow(2, $linhaInicial, ($coluna-1), ($linha-1))
                       ->getBorders()
                       ->getAllBorders()
                       ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);

            $abaRanking->getStyleByColumnAndRow(2, $linha, ($coluna-1), $linha)
                       ->getBorders()
                       ->getAllBorders()
                       ->getColor()
                       ->setRGB('BABABA');
            $abaRanking->getStyleByColumnAndRow(2, $linha, ($coluna-1), $linha)
                       ->getBorders()
                       ->getTop()
                       ->getColor()
                       ->setRGB('000000');
        } else {
            $abaRanking->setCellValueByColumnAndRow(2, $linha, "Nenhum dado disponível");
            $abaRanking->mergeCellsByColumnAndRow(2, $linha, 5, $linha);
            $linha++;
        }

        $linha++;

    // Implantações
        $valor = "IMPLANTAÇÕES";
        $abaRanking->setCellValueByColumnAndRow(2, $linha, $valor);
        $abaRanking->mergeCellsByColumnAndRow(2, $linha, 5, $linha);
        $abaRanking->getStyleByColumnAndRow(2, $linha, 5, $linha)->applyFromArray($styles[1]);
        $linha++;

        $abaRanking->setCellValueByColumnAndRow(2, $linha, "Vendedor");
        $abaRanking->getColumnDimensionByColumn(2)->setWidth(35);

        $abaRanking->setCellValueByColumnAndRow(3, $linha, "Total");
        $abaRanking->getColumnDimensionByColumn(3)->setWidth(15);

        $abaRanking->setCellValueByColumnAndRow(4, $linha, "Meses");
        $abaRanking->getColumnDimensionByColumn(4)->setWidth(15);

        $abaRanking->setCellValueByColumnAndRow(5, $linha, "Média");
        $abaRanking->getColumnDimensionByColumn(5)->setWidth(15);
        $abaRanking->getStyleByColumnAndRow(2, $linha, 5, $linha)->applyFromArray($styles[3]);

        $linha++;

        if (!empty($dadosRanking['IMPLANTACOES'])) {
            foreach ($dadosRanking['IMPLANTACOES'] as $valor => $dados) {
                $coluna = 2;

                $valor = ExcelUtil::parseValue($dados['Vendedor']);
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coluna++;

                $valor = "='{$titleAbaVendedores}'!{$dados['CoordenadaValor']}";
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaRanking->getStyleByColumnAndRow($coluna, $linha)
                           ->getNumberFormat()
                           ->setFormatCode('"R$ "#,##0.00_-');
                $coordenadaValor = Coordinate::stringFromColumnIndex($coluna) . $linha;
                $coluna++;

                $valor = "='{$titleAbaVendedores}'!{$dados['CoordenadaMeses']}";
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $coordenadaMeses = Coordinate::stringFromColumnIndex($coluna) . $linha;
                $coluna++;

                $valor = "={$coordenadaValor} / {$coordenadaMeses}";
                $abaRanking->setCellValueByColumnAndRow($coluna, $linha, $valor);
                $abaRanking->getStyleByColumnAndRow($coluna, $linha)
                           ->getNumberFormat()
                           ->setFormatCode('"R$ "#,##0.00_-');
                $coluna++;

                $linha++;
            }

            $abaRanking->getStyleByColumnAndRow(2, $linhaInicial, ($coluna-1), ($linha-1))
                       ->getBorders()
                       ->getAllBorders()
                       ->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
        } else {
            $abaRanking->setCellValueByColumnAndRow(2, $linha, "Nenhum dado disponível");
            $abaRanking->mergeCellsByColumnAndRow(2, $linha, 5, $linha);
        }

$spreadsheet->setActiveSheetIndex(0);

$writer = new Xlsx($spreadsheet);

$writer->setIncludeCharts(true);

$writer->save('php://output');
