Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
 
3
namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx;
4
 
5
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
6
use PhpOffice\PhpSpreadsheet\Reader\Xlsx\Namespaces;
7
use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
8
use PhpOffice\PhpSpreadsheet\Worksheet\Table as WorksheetTable;
9
 
10
class Table extends WriterPart
11
{
12
    /**
13
     * Write Table to XML format.
14
     *
15
     * @param int $tableRef Table ID
16
     *
17
     * @return string XML Output
18
     */
19
    public function writeTable(WorksheetTable $table, $tableRef): string
20
    {
21
        // Create XML writer
22
        $objWriter = null;
23
        if ($this->getParentWriter()->getUseDiskCaching()) {
24
            $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
25
        } else {
26
            $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
27
        }
28
 
29
        // XML header
30
        $objWriter->startDocument('1.0', 'UTF-8', 'yes');
31
 
32
        // Table
33
        $name = 'Table' . $tableRef;
34
        $range = $table->getRange();
35
 
36
        $objWriter->startElement('table');
37
        $objWriter->writeAttribute('xml:space', 'preserve');
38
        $objWriter->writeAttribute('xmlns', Namespaces::MAIN);
39
        $objWriter->writeAttribute('id', (string) $tableRef);
40
        $objWriter->writeAttribute('name', $name);
41
        $objWriter->writeAttribute('displayName', $table->getName() ?: $name);
42
        $objWriter->writeAttribute('ref', $range);
43
        $objWriter->writeAttribute('headerRowCount', $table->getShowHeaderRow() ? '1' : '0');
44
        $objWriter->writeAttribute('totalsRowCount', $table->getShowTotalsRow() ? '1' : '0');
45
 
46
        // Table Boundaries
47
        [$rangeStart, $rangeEnd] = Coordinate::rangeBoundaries($table->getRange());
48
 
49
        // Table Auto Filter
50
        if ($table->getShowHeaderRow() && $table->getAllowFilter() === true) {
51
            $objWriter->startElement('autoFilter');
52
            $objWriter->writeAttribute('ref', $range);
53
            $objWriter->endElement();
54
            foreach (range($rangeStart[0], $rangeEnd[0]) as $offset => $columnIndex) {
55
                $column = $table->getColumnByOffset($offset);
56
 
57
                if (!$column->getShowFilterButton()) {
58
                    $objWriter->startElement('filterColumn');
59
                    $objWriter->writeAttribute('colId', (string) $offset);
60
                    $objWriter->writeAttribute('hiddenButton', '1');
61
                    $objWriter->endElement();
62
                } else {
63
                    $column = $table->getAutoFilter()->getColumnByOffset($offset);
64
                    AutoFilter::writeAutoFilterColumn($objWriter, $column, $offset);
65
                }
66
            }
67
        }
68
 
69
        // Table Columns
70
        $objWriter->startElement('tableColumns');
71
        $objWriter->writeAttribute('count', (string) ($rangeEnd[0] - $rangeStart[0] + 1));
72
        foreach (range($rangeStart[0], $rangeEnd[0]) as $offset => $columnIndex) {
73
            $worksheet = $table->getWorksheet();
74
            if (!$worksheet) {
75
                continue;
76
            }
77
 
78
            $column = $table->getColumnByOffset($offset);
79
            $cell = $worksheet->getCell([$columnIndex, $rangeStart[1]]);
80
 
81
            $objWriter->startElement('tableColumn');
82
            $objWriter->writeAttribute('id', (string) ($offset + 1));
83
            $objWriter->writeAttribute('name', $table->getShowHeaderRow() ? $cell->getValue() : 'Column' . ($offset + 1));
84
 
85
            if ($table->getShowTotalsRow()) {
86
                if ($column->getTotalsRowLabel()) {
87
                    $objWriter->writeAttribute('totalsRowLabel', $column->getTotalsRowLabel());
88
                }
89
                if ($column->getTotalsRowFunction()) {
90
                    $objWriter->writeAttribute('totalsRowFunction', $column->getTotalsRowFunction());
91
                }
92
            }
93
            if ($column->getColumnFormula()) {
94
                $objWriter->writeElement('calculatedColumnFormula', $column->getColumnFormula());
95
            }
96
 
97
            $objWriter->endElement();
98
        }
99
        $objWriter->endElement();
100
 
101
        // Table Styles
102
        $objWriter->startElement('tableStyleInfo');
103
        $objWriter->writeAttribute('name', $table->getStyle()->getTheme());
104
        $objWriter->writeAttribute('showFirstColumn', $table->getStyle()->getShowFirstColumn() ? '1' : '0');
105
        $objWriter->writeAttribute('showLastColumn', $table->getStyle()->getShowLastColumn() ? '1' : '0');
106
        $objWriter->writeAttribute('showRowStripes', $table->getStyle()->getShowRowStripes() ? '1' : '0');
107
        $objWriter->writeAttribute('showColumnStripes', $table->getStyle()->getShowColumnStripes() ? '1' : '0');
108
        $objWriter->endElement();
109
 
110
        $objWriter->endElement();
111
 
112
        // Return
113
        return $objWriter->getData();
114
    }
115
}