Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
<?php
2
 
3
namespace PhpOffice\PhpSpreadsheet\Writer\Ods;
4
 
5
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
6
use PhpOffice\PhpSpreadsheet\Spreadsheet;
7
use PhpOffice\PhpSpreadsheet\Worksheet\AutoFilter;
8
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
9
 
10
class AutoFilters
11
{
12
    private XMLWriter $objWriter;
13
 
14
    private Spreadsheet $spreadsheet;
15
 
16
    public function __construct(XMLWriter $objWriter, Spreadsheet $spreadsheet)
17
    {
18
        $this->objWriter = $objWriter;
19
        $this->spreadsheet = $spreadsheet;
20
    }
21
 
22
    public function write(): void
23
    {
24
        $wrapperWritten = false;
25
        $sheetCount = $this->spreadsheet->getSheetCount();
26
        for ($i = 0; $i < $sheetCount; ++$i) {
27
            $worksheet = $this->spreadsheet->getSheet($i);
28
            $autofilter = $worksheet->getAutoFilter();
29
            if (!empty($autofilter->getRange())) {
30
                if ($wrapperWritten === false) {
31
                    $this->objWriter->startElement('table:database-ranges');
32
                    $wrapperWritten = true;
33
                }
34
                $this->objWriter->startElement('table:database-range');
35
                $this->objWriter->writeAttribute('table:orientation', 'column');
36
                $this->objWriter->writeAttribute('table:display-filter-buttons', 'true');
37
                $this->objWriter->writeAttribute(
38
                    'table:target-range-address',
39
                    $this->formatRange($worksheet, $autofilter)
40
                );
41
                $this->objWriter->endElement();
42
            }
43
        }
44
 
45
        if ($wrapperWritten === true) {
46
            $this->objWriter->endElement();
47
        }
48
    }
49
 
50
    protected function formatRange(Worksheet $worksheet, AutoFilter $autofilter): string
51
    {
52
        $title = $worksheet->getTitle();
53
        $range = $autofilter->getRange();
54
 
55
        return "'{$title}'.{$range}";
56
    }
57
}