PluginProbe
wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin / 6.5.1.7
wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin v6.5.1.7
6.5.1.7 6.5.1.6 6.5.1.5 6.5.1.4 6.5.1.3 6.5.1.2 6.5.1.1 6.5.0.9 6.5.0.8 6.5.0.7 6.5.0.6 trunk 3.4.2.40 3.4.2.41 3.4.2.42 3.4.2.43 3.4.2.44 3.4.2.45 3.4.2.46 3.4.2.47 3.4.2.48 3.4.2.49 3.4.2.50 6.3.2 6.3.3.1 All 47 releases
wpdatatables / lib / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Writer / Xlsx / Workbook.php

Workbook.php in wpDataTables – WordPress Data Table, Dynamic Tables & Table Charts Plugin 6.5.1.7, at lib/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php

215 lines 7.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx;
4
5 use PhpOffice\PhpSpreadsheet\Reader\Xlsx\Namespaces;
6 use PhpOffice\PhpSpreadsheet\Shared\Date;
7 use PhpOffice\PhpSpreadsheet\Shared\XMLWriter;
8 use PhpOffice\PhpSpreadsheet\Spreadsheet;
9 use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException;
10 use PhpOffice\PhpSpreadsheet\Writer\Xlsx\DefinedNames as DefinedNamesWriter;
11
12 class Workbook extends WriterPart
13 {
14 /**
15 * Write workbook to XML format.
16 *
17 * @param bool $recalcRequired Indicate whether formulas should be recalculated before writing
18 *
19 * @return string XML Output
20 */
21 public function writeWorkbook(Spreadsheet $spreadsheet, $recalcRequired = false)
22 {
23 // Create XML writer
24 if ($this->getParentWriter()->getUseDiskCaching()) {
25 $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
26 } else {
27 $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
28 }
29
30 // XML header
31 $objWriter->startDocument('1.0', 'UTF-8', 'yes');
32
33 // workbook
34 $objWriter->startElement('workbook');
35 $objWriter->writeAttribute('xml:space', 'preserve');
36 $objWriter->writeAttribute('xmlns', Namespaces::MAIN);
37 $objWriter->writeAttribute('xmlns:r', Namespaces::SCHEMA_OFFICE_DOCUMENT);
38
39 // fileVersion
40 $this->writeFileVersion($objWriter);
41
42 // workbookPr
43 $this->writeWorkbookPr($objWriter);
44
45 // workbookProtection
46 $this->writeWorkbookProtection($objWriter, $spreadsheet);
47
48 // bookViews
49 if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
50 $this->writeBookViews($objWriter, $spreadsheet);
51 }
52
53 // sheets
54 $this->writeSheets($objWriter, $spreadsheet);
55
56 // definedNames
57 (new DefinedNamesWriter($objWriter, $spreadsheet))->write();
58
59 // calcPr
60 $this->writeCalcPr($objWriter, $recalcRequired);
61
62 $objWriter->endElement();
63
64 // Return
65 return $objWriter->getData();
66 }
67
68 /**
69 * Write file version.
70 */
71 private function writeFileVersion(XMLWriter $objWriter): void
72 {
73 $objWriter->startElement('fileVersion');
74 $objWriter->writeAttribute('appName', 'xl');
75 $objWriter->writeAttribute('lastEdited', '4');
76 $objWriter->writeAttribute('lowestEdited', '4');
77 $objWriter->writeAttribute('rupBuild', '4505');
78 $objWriter->endElement();
79 }
80
81 /**
82 * Write WorkbookPr.
83 */
84 private function writeWorkbookPr(XMLWriter $objWriter): void
85 {
86 $objWriter->startElement('workbookPr');
87
88 if (Date::getExcelCalendar() === Date::CALENDAR_MAC_1904) {
89 $objWriter->writeAttribute('date1904', '1');
90 }
91
92 $objWriter->writeAttribute('codeName', 'ThisWorkbook');
93
94 $objWriter->endElement();
95 }
96
97 /**
98 * Write BookViews.
99 */
100 private function writeBookViews(XMLWriter $objWriter, Spreadsheet $spreadsheet): void
101 {
102 // bookViews
103 $objWriter->startElement('bookViews');
104
105 // workbookView
106 $objWriter->startElement('workbookView');
107
108 $objWriter->writeAttribute('activeTab', (string) $spreadsheet->getActiveSheetIndex());
109 $objWriter->writeAttribute('autoFilterDateGrouping', ($spreadsheet->getAutoFilterDateGrouping() ? 'true' : 'false'));
110 $objWriter->writeAttribute('firstSheet', (string) $spreadsheet->getFirstSheetIndex());
111 $objWriter->writeAttribute('minimized', ($spreadsheet->getMinimized() ? 'true' : 'false'));
112 $objWriter->writeAttribute('showHorizontalScroll', ($spreadsheet->getShowHorizontalScroll() ? 'true' : 'false'));
113 $objWriter->writeAttribute('showSheetTabs', ($spreadsheet->getShowSheetTabs() ? 'true' : 'false'));
114 $objWriter->writeAttribute('showVerticalScroll', ($spreadsheet->getShowVerticalScroll() ? 'true' : 'false'));
115 $objWriter->writeAttribute('tabRatio', (string) $spreadsheet->getTabRatio());
116 $objWriter->writeAttribute('visibility', $spreadsheet->getVisibility());
117
118 $objWriter->endElement();
119
120 $objWriter->endElement();
121 }
122
123 /**
124 * Write WorkbookProtection.
125 */
126 private function writeWorkbookProtection(XMLWriter $objWriter, Spreadsheet $spreadsheet): void
127 {
128 if ($spreadsheet->getSecurity()->isSecurityEnabled()) {
129 $objWriter->startElement('workbookProtection');
130 $objWriter->writeAttribute('lockRevision', ($spreadsheet->getSecurity()->getLockRevision() ? 'true' : 'false'));
131 $objWriter->writeAttribute('lockStructure', ($spreadsheet->getSecurity()->getLockStructure() ? 'true' : 'false'));
132 $objWriter->writeAttribute('lockWindows', ($spreadsheet->getSecurity()->getLockWindows() ? 'true' : 'false'));
133
134 if ($spreadsheet->getSecurity()->getRevisionsPassword() != '') {
135 $objWriter->writeAttribute('revisionsPassword', $spreadsheet->getSecurity()->getRevisionsPassword());
136 }
137
138 if ($spreadsheet->getSecurity()->getWorkbookPassword() != '') {
139 $objWriter->writeAttribute('workbookPassword', $spreadsheet->getSecurity()->getWorkbookPassword());
140 }
141
142 $objWriter->endElement();
143 }
144 }
145
146 /**
147 * Write calcPr.
148 *
149 * @param bool $recalcRequired Indicate whether formulas should be recalculated before writing
150 */
151 private function writeCalcPr(XMLWriter $objWriter, $recalcRequired = true): void
152 {
153 $objWriter->startElement('calcPr');
154
155 // Set the calcid to a higher value than Excel itself will use, otherwise Excel will always recalc
156 // If MS Excel does do a recalc, then users opening a file in MS Excel will be prompted to save on exit
157 // because the file has changed
158 $objWriter->writeAttribute('calcId', '999999');
159 $objWriter->writeAttribute('calcMode', 'auto');
160 // fullCalcOnLoad isn't needed if we've recalculating for the save
161 $objWriter->writeAttribute('calcCompleted', ($recalcRequired) ? '1' : '0');
162 $objWriter->writeAttribute('fullCalcOnLoad', ($recalcRequired) ? '0' : '1');
163 $objWriter->writeAttribute('forceFullCalc', ($recalcRequired) ? '0' : '1');
164
165 $objWriter->endElement();
166 }
167
168 /**
169 * Write sheets.
170 */
171 private function writeSheets(XMLWriter $objWriter, Spreadsheet $spreadsheet): void
172 {
173 // Write sheets
174 $objWriter->startElement('sheets');
175 $sheetCount = $spreadsheet->getSheetCount();
176 for ($i = 0; $i < $sheetCount; ++$i) {
177 // sheet
178 $this->writeSheet(
179 $objWriter,
180 $spreadsheet->getSheet($i)->getTitle(),
181 ($i + 1),
182 ($i + 1 + 3),
183 $spreadsheet->getSheet($i)->getSheetState()
184 );
185 }
186
187 $objWriter->endElement();
188 }
189
190 /**
191 * Write sheet.
192 *
193 * @param string $worksheetName Sheet name
194 * @param int $worksheetId Sheet id
195 * @param int $relId Relationship ID
196 * @param string $sheetState Sheet state (visible, hidden, veryHidden)
197 */
198 private function writeSheet(XMLWriter $objWriter, $worksheetName, $worksheetId = 1, $relId = 1, $sheetState = 'visible'): void
199 {
200 if ($worksheetName != '') {
201 // Write sheet
202 $objWriter->startElement('sheet');
203 $objWriter->writeAttribute('name', $worksheetName);
204 $objWriter->writeAttribute('sheetId', (string) $worksheetId);
205 if ($sheetState !== 'visible' && $sheetState != '') {
206 $objWriter->writeAttribute('state', $sheetState);
207 }
208 $objWriter->writeAttribute('r:id', 'rId' . $relId);
209 $objWriter->endElement();
210 } else {
211 throw new WriterException('Invalid parameters passed.');
212 }
213 }
214 }
215