Completed
Push — master ( 829924...fb7d68 )
by Stefan
09:58
created

Writer::setFreezePaneCellId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
namespace OneSheet;
4
5
use OneSheet\Style\Style;
6
use OneSheet\Style\Styler;
7
use OneSheet\Width\WidthCalculator;
8
use OneSheet\Width\WidthCollection;
9
10
/**
11
 * Class Writer
12
 *
13
 * @package OneSheet
14
 */
15
class Writer
16
{
17
    /**
18
     * @var SheetFile
19
     */
20
    private $sheetFile;
21
22
    /**
23
     * @var Styler
24
     */
25
    private $styler;
26
27
    /**
28
     * @var Sheet
29
     */
30
    private $sheet;
31
32
    /**
33
     * Writer constructor.
34
     */
35 6
    public function __construct()
36
    {
37 6
        $this->initialize();
38 6
    }
39
40
    /**
41
     * All cells _above_ this cell will be frozen/fixed.
42
     *
43
     * @param int $cellId
44
     */
45 1
    public function setFreezePaneCellId($cellId)
46
    {
47 1
        $this->sheet->setFreezePaneCellId($cellId);
48 1
    }
49
50
    /**
51
     * Set fixed column widths per cell (no ranges) and array index
52
     * 0 being the first column.
53
     * If used alongside cell autosizing, these should be set
54
     * after the last row has been added.
55
     *
56
     * @param array $columnWidths
57
     * @throws \InvalidArgumentException
58
     */
59 1
    public function setFixedColumnWidths(array $columnWidths)
60
    {
61 1
        $this->sheet->setFixedColumnWidths($columnWidths);
62 1
    }
63
64
    /**
65
     * Start recording row specs for column autosizing.
66
     *
67
     *  @return Writer
68
     */
69 3
    public function enableCellAutosizing()
70
    {
71 3
        $this->sheet->enableCellAutosizing();
72 3
        return $this;
73
    }
74
75
    /**
76
     * Stop recording row specs for column autosizing.
77
     *
78
     *  @return Writer
79
     */
80 1
    public function disableCellAutosizing()
81
    {
82 1
        $this->sheet->disableCellAutosizing();
83 1
        return $this;
84
    }
85
86
    /**
87
     * Initialize writer defaults.
88
     */
89 6
    private function initialize()
90
    {
91 6
        $this->sheetFile = new SheetFile();
92 6
        $this->sheetFile->fwrite(str_repeat(' ', pow(2, 20)) . '<sheetData>');
93 6
        $this->styler = new Styler();
94 6
        $this->sheet = new Sheet(new CellBuilder(), new WidthCalculator(new WidthCollection()));
95 6
    }
96
97
    /**
98
     * @param array $rows
99
     * @param Style $style
100
     * @throws \InvalidArgumentException
101
     */
102 2
    public function addRows(array $rows, Style $style = null)
103
    {
104 2
        if (count($rows) === count($rows, COUNT_RECURSIVE)) {
105 1
            throw new \InvalidArgumentException('Array must contain arrays!');
106
        }
107
108 1
        foreach ($rows as $row) {
109 1
            $this->addRow($row, $style);
110 1
        }
111 1
    }
112
113
    /**
114
     * @param array $row
115
     * @param Style $style
116
     */
117 1
    public function addRow(array $row, Style $style = null)
118
    {
119 1
        $style = $style instanceof Style ? $style : $this->styler->getDefaultStyle();
120 1
        $this->styler->addStyle($style);
121 1
        $this->sheetFile->fwrite($this->sheet->addRow($row, $style));
122 1
    }
123
124
    /**
125
     * Wrap things up and write/output xlsx.
126
     *
127
     * @param string $fileName
128
     */
129 1
    public function writeToFile($fileName = 'dummy.xlsx')
130
    {
131 1
        $finalizer = new Finalizer($this->sheet, $this->styler, $this->sheetFile);
132 1
        $finalizer->finalize($fileName);
133 1
    }
134
}
135