ExcelCanvasWriter::excelCoordinate()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 0
cts 4
cp 0
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
crap 2
1
<?php
2
namespace Mathielen\ReportWriteEngine\Output\Excel\CanvasWriter;
3
4
use Mathielen\ReportWriteEngine\Engine\Canvas;
5
use Mathielen\ReportWriteEngine\Engine\CanvasWriter\CanvasWriterInterface;
6
use Psr\Log\LoggerInterface;
7
use Psr\Log\NullLogger;
8
9
class ExcelCanvasWriter implements CanvasWriterInterface
10
{
11
12
    /**
13
     * @var \PHPExcel
14
     */
15
    private $output;
16
17
    /**
18
     * @var LoggerInterface
19
     */
20
    private $logger;
21
22
    /**
23
     * @var \PHPExcel_Worksheet
24
     */
25
    private $templateSheet;
26
27
    public function __construct(
28
        \PHPExcel $template,
29
        LoggerInterface $logger = null)
30
    {
31
        $this->logger = $logger ? $logger : new NullLogger();
32
33
        $templateSheet = $template->getSheetByName('TEMPLATE');
34
        if (!$templateSheet) {
35
            throw new \InvalidArgumentException("A sheet named 'TEMPLATE' must exist.");
36
        }
37
38
        $this->prepare($templateSheet);
39
    }
40
41
    private static function excelCoordinate($rowNum, $colNum)
42
    {
43
        return \PHPExcel_Cell::stringFromColumnIndex($colNum) . ($rowNum+1); //A1...
44
    }
45
46
    public function write(Canvas $canvas)
47
    {
48
        $this->output->setActiveSheetIndex(0);
49
50
        foreach ($canvas as $rowNum => $row) {
51
            foreach ($row as $colNum => $cell) {
52
                //even if cell value is empty, write the style
53
54
                $excelCor = self::excelCoordinate($rowNum, $colNum);
55
                $excelCell = $this->output->getActiveSheet()->getCell($excelCor);
56
57
                //$cellValue = FormulaHelper::processFormula($cellValue, $cellValue, $this->getCurrentRowNum(), $rangeRowNum);
58
59
                //set value
60
                $excelCell->setValue($cell['value']);
61
62
                //set style
63
                $excelCell->setXfIndex($cell['style']);
64
            }
65
        }
66
67
        $this->clean();
68
69
        return $this->output;
70
    }
71
72
    protected function prepare(\PHPExcel_Worksheet $templateSheet)
73
    {
74
        $this->output = new \PHPExcel();
75
        $outputSheet = $this->output->getActiveSheet();
76
        $outputSheet->setTitle('Report');
77
        $this->templateSheet = $this->output->addExternalSheet($templateSheet);
78
79
        foreach ($this->templateSheet->getColumnDimensions() as $col => $columnDimension) {
80
            $outputSheet->getColumnDimension($col)->setWidth($columnDimension->getWidth());
81
        }
82
    }
83
84
    public function getTemplateSheet()
85
    {
86
        return $this->templateSheet;
87
    }
88
89
    protected function clean()
90
    {
91
        $this->output->setActiveSheetIndexByName('TEMPLATE');
92
        $this->output->removeSheetByIndex($this->output->getActiveSheetIndex());
93
    }
94
95
}
96