226 parent::__construct();
229 $this->stringTotal = &$str_total;
230 $this->stringUnique = &$str_unique;
231 $this->stringTable = &$str_table;
237 $this->xlsStringMaxLength = 255;
238 $this->columnInfo = [];
239 $this->selection = [0, 0, 0, 0];
240 $this->activePane = 3;
242 $this->printHeaders = 0;
244 $this->outlineStyle =
false;
245 $this->outlineBelow =
true;
246 $this->outlineRight =
true;
247 $this->outlineOn =
true;
249 $this->fontHashIndex = [];
255 $maxR = $this->phpSheet->getHighestRow();
256 $maxC = $this->phpSheet->getHighestColumn();
259 $this->firstRowIndex = $minR;
260 $this->lastRowIndex = ($maxR > 65535) ? 65535 : $maxR;
265 if ($this->lastColumnIndex > 255) {
266 $this->lastColumnIndex = 255;
269 $this->countCellStyleXfs = count($phpSheet->getParent()->getCellStyleXfCollection());
278 public function close():
void 283 $selectedCells = $this->phpSheet->getSelectedCells();
284 $activeSheetIndex = $this->phpSheet->getParent()->getActiveSheetIndex();
302 if (($defaultWidth =
$phpSheet->getDefaultColumnDimension()->getWidth()) < 0) {
306 $columnDimensions =
$phpSheet->getColumnDimensions();
307 $maxCol = $this->lastColumnIndex - 1;
308 for (
$i = 0;
$i <= $maxCol; ++
$i) {
313 $width = $defaultWidth;
316 if (isset($columnDimensions[$columnLetter])) {
317 $columnDimension = $columnDimensions[$columnLetter];
318 if ($columnDimension->getWidth() >= 0) {
319 $width = $columnDimension->getWidth();
321 $hidden = $columnDimension->getVisible() ? 0 : 1;
322 $level = $columnDimension->getOutlineLevel();
323 $xfIndex = $columnDimension->getXfIndex() + 15;
333 $this->columnInfo[] = [
$i,
$i, $width, $xfIndex, $hidden, $level];
375 if (!empty($this->columnInfo)) {
376 $colcount = count($this->columnInfo);
377 for (
$i = 0;
$i < $colcount; ++
$i) {
381 $autoFilterRange =
$phpSheet->getAutoFilter()->getRange();
382 if (!empty($autoFilterRange)) {
391 foreach (
$phpSheet->getRowDimensions() as $rowDimension) {
392 $xfIndex = $rowDimension->getXfIndex() + 15;
394 $rowDimension->getRowIndex() - 1,
395 (int) $rowDimension->getRowHeight(),
397 !$rowDimension->getVisible(),
398 $rowDimension->getOutlineLevel()
403 foreach (
$phpSheet->getCoordinates() as $coordinate) {
405 $row = $cell->getRow() - 1;
409 if (
$row > 65535 || $column > 255) {
410 throw new WriterException(
'Rows or columns overflow! Excel5 has limit to 65535 rows and 255 columns. Use XLSX instead.');
414 $xfIndex = $cell->getXfIndex() + 15;
416 $cVal = $cell->getValue();
420 $elements = $cVal->getRichTextElements();
421 foreach ($elements as $element) {
423 if ($element instanceof
Run) {
424 $str_fontidx = $this->fontHashIndex[$element->getFont()->getHashCode()];
428 $arrcRun[] = [
'strlen' => $str_pos,
'fontidx' => $str_fontidx];
434 switch ($cell->getDatatype()) {
437 if ($cVal ===
'' || $cVal === null) {
449 $calculatedValue = $this->preCalculateFormulas ?
450 $cell->getCalculatedValue() : null;
451 if (self::WRITE_FORMULA_EXCEPTION == $this->
writeFormula(
$row, $column, $cVal, $xfIndex, $calculatedValue)) {
452 if ($calculatedValue === null) {
453 $calculatedValue = $cell->getCalculatedValue();
455 $calctype = gettype($calculatedValue);
492 $this->phpSheet->getParent()->setActiveSheetIndex($activeSheetIndex);
507 $this->phpSheet->setSelectedCells($selectedCells);
516 foreach (
$phpSheet->getHyperLinkCollection() as $coordinate => $hyperlink) {
519 $url = $hyperlink->getUrl();
521 if (strpos(
$url,
'sheet://') !==
false) {
523 $url = str_replace(
'sheet://',
'internal:',
$url);
524 } elseif (preg_match(
'/^(http:|https:|ftp:|mailto:)/',
$url)) {
541 $arrConditionalStyles =
$phpSheet->getConditionalStylesCollection();
542 if (!empty($arrConditionalStyles)) {
543 $arrConditional = [];
545 $cfHeaderWritten =
false;
547 foreach ($arrConditionalStyles as $cellCoordinate => $conditionalStyles) {
548 foreach ($conditionalStyles as $conditional) {
555 if ($cfHeaderWritten ===
false) {
557 $cfHeaderWritten =
true;
559 if (!isset($arrConditional[$conditional->getHashCode()])) {
561 $arrConditional[$conditional->getHashCode()] =
true;
585 $explodes = explode(
':', $range);
588 $firstCell = $explodes[0];
591 if (count($explodes) == 1) {
592 $lastCell = $firstCell;
594 $lastCell = $explodes[1];
600 return pack(
'vvvv', $firstCellCoordinates[1] - 1, $lastCellCoordinates[1] - 1, $firstCellCoordinates[0] - 1, $lastCellCoordinates[0] - 1);
612 if (isset($this->_data)) {
630 $this->printHeaders = $print;
642 public function setOutline($visible =
true, $symbols_below =
true, $symbols_right =
true, $auto_style =
false): void
644 $this->outlineOn = $visible;
645 $this->outlineBelow = $symbols_below;
646 $this->outlineRight = $symbols_right;
647 $this->outlineStyle = $auto_style;
671 $data = pack(
'vvv',
$row, $col, $xfIndex);
672 $xl_double = pack(
'd', $num);
673 if (self::getByteOrder()) {
674 $xl_double = strrev($xl_double);
712 if (!isset($this->stringTable[$str])) {
713 $this->stringTable[$str] = $this->stringUnique++;
718 $data = pack(
'vvvV',
$row, $col, $xfIndex, $this->stringTable[$str]);
740 if (!isset($this->stringTable[$str])) {
741 $this->stringTable[$str] = $this->stringUnique++;
746 $data = pack(
'vvvV',
$row, $col, $xfIndex, $this->stringTable[$str]);
774 $data = pack(
'vvv',
$row, $col, $xfIndex);
797 $data = pack(
'vvvCC',
$row, $col, $xfIndex, $value, $isError);
833 if (isset($calculatedValue)) {
836 if (is_bool($calculatedValue)) {
838 $num = pack(
'CCCvCv', 0x01, 0x00, (
int) $calculatedValue, 0x00, 0x00, 0xFFFF);
839 } elseif (is_int($calculatedValue) || is_float($calculatedValue)) {
841 $num = pack(
'd', $calculatedValue);
842 } elseif (is_string($calculatedValue)) {
844 if (isset($errorCodes[$calculatedValue])) {
846 $num = pack(
'CCCvCv', 0x02, 0x00,
ErrorCode::error($calculatedValue), 0x00, 0x00, 0xFFFF);
847 } elseif ($calculatedValue ===
'') {
849 $num = pack(
'CCCvCv', 0x03, 0x00, 0x00, 0x00, 0x00, 0xFFFF);
852 $stringValue = $calculatedValue;
853 $num = pack(
'CCCvCv', 0x00, 0x00, 0x00, 0x00, 0x00, 0xFFFF);
857 $num = pack(
'd', 0x00);
860 $num = pack(
'd', 0x00);
867 if ($formula[0] ==
'=') {
868 $formula = substr($formula, 1);
871 $this->
writeString(
$row, $col,
'Unrecognised character for formula', 0);
873 return self::WRITE_FORMULA_ERRORS;
878 $this->parser->parse($formula);
879 $formula = $this->parser->toReversePolish();
881 $formlen = strlen($formula);
886 $data = pack(
'vvv',
$row, $col, $xfIndex)
888 . pack(
'vVv', $grbit, $unknown, $formlen);
892 if ($stringValue !== null) {
896 return self::WRITE_FORMULA_NORMAL;
898 return self::WRITE_FORMULA_EXCEPTION;
956 if (preg_match(
'[^internal:]',
$url)) {
959 if (preg_match(
'[^external:]',
$url)) {
984 $unknown1 = pack(
'H*',
'D0C9EA79F9BACE118C8200AA004BA90B02000000');
985 $unknown2 = pack(
'H*',
'E0C9EA79F9BACE118C8200AA004BA90B');
991 $url = implode(
"\0", preg_split(
"''",
$url, -1, PREG_SPLIT_NO_EMPTY));
995 $url_len = pack(
'V', strlen(
$url));
1002 $data = pack(
'vvvv', $row1, $row2, $col1, $col2);
1024 $url = preg_replace(
'/^internal:/',
'',
$url);
1027 $unknown1 = pack(
'H*',
'D0C9EA79F9BACE118C8200AA004BA90B02000000');
1037 $url_len = pack(
'V', $url_len);
1046 $data = pack(
'vvvv', $row1, $row2, $col1, $col2);
1081 $url = preg_replace(
'/\//',
'\\',
$url);
1089 if (preg_match(
'/^[A-Z]:/',
$url)) {
1098 if (preg_match(
'/\\#/',
$url)) {
1121 $unknown1 = pack(
'H*',
'D0C9EA79F9BACE118C8200AA004BA90B02000000');
1123 $unknown3 = pack(
'H*',
'FFFFADDE000000000000000000000000000000000000000');
1127 $data = pack(
'vvvv', $row1, $row2, $col1, $col2) .
1160 private function writeRow(
$row, $height, $xfIndex, $hidden =
false, $level = 0): void
1177 if ($height !== null) {
1178 $miyRw = $height * 20;
1190 if ($hidden ===
true) {
1193 if ($height !== null) {
1196 if ($xfIndex !== 0xF) {
1202 $data = pack(
'vvvvvvvv',
$row, $colMic, $colMac, $miyRw, $irwMac, $reserved, $grbit, $ixfe);
1214 $data = pack(
'VVvvv', $this->firstRowIndex, $this->lastRowIndex + 1, $this->firstColumnIndex, $this->lastColumnIndex + 1, 0x0000);
1234 $fDspGrid = $this->phpSheet->getShowGridlines() ? 1 : 0;
1235 $fDspRwCol = $this->phpSheet->getShowRowColHeaders() ? 1 : 0;
1236 $fFrozen = $this->phpSheet->getFreezePane() ? 1 : 0;
1239 $fArabic = $this->phpSheet->getRightToLeft() ? 1 : 0;
1241 $fFrozenNoSplit = 0;
1243 $fSelected = ($this->phpSheet === $this->phpSheet->getParent()->getActiveSheet()) ? 1 : 0;
1244 $fPageBreakPreview = $this->phpSheet->getSheetView()->getView() === SheetView::SHEETVIEW_PAGE_BREAK_PREVIEW;
1247 $grbit |= $fDspGrid << 1;
1248 $grbit |= $fDspRwCol << 2;
1249 $grbit |= $fFrozen << 3;
1250 $grbit |= $fDspZeros << 4;
1251 $grbit |= $fDefaultHdr << 5;
1252 $grbit |= $fArabic << 6;
1253 $grbit |= $fDspGuts << 7;
1254 $grbit |= $fFrozenNoSplit << 8;
1255 $grbit |= $fSelected << 9;
1256 $grbit |= $fSelected << 10;
1257 $grbit |= $fPageBreakPreview << 11;
1260 $data = pack(
'vvv', $grbit, $rwTop, $colLeft);
1264 $zoom_factor_page_break = ($fPageBreakPreview ? $this->phpSheet->getSheetView()->getZoomScale() : 0x0000);
1265 $zoom_factor_normal = $this->phpSheet->getSheetView()->getZoomScaleNormal();
1267 $data .= pack(
'vvvvV', $rgbHdr, 0x0000, $zoom_factor_page_break, $zoom_factor_normal, 0x00000000);
1277 $defaultRowHeight = $this->phpSheet->getDefaultRowDimension()->getRowHeight();
1279 if ($defaultRowHeight < 0) {
1284 $defaultRowHeight = (int) 20 * $defaultRowHeight;
1290 $data = pack(
'vv', 1, $defaultRowHeight);
1299 $defaultColWidth = 8;
1305 $data = pack(
'v', $defaultColWidth);
1325 $colFirst = $col_array[0] ?? null;
1326 $colLast = $col_array[1] ?? null;
1327 $coldx = $col_array[2] ?? 8.43;
1328 $xfIndex = $col_array[3] ?? 15;
1329 $grbit = $col_array[4] ?? 0;
1330 $level = $col_array[5] ?? 0;
1340 $level = max(0, min($level, 7));
1341 $grbit |= $level << 8;
1344 $data = pack(
'vvvvvv', $colFirst, $colLast, $coldx, $ixfe, $grbit, $reserved);
1355 $selectedCells = $selectedCells[0];
1356 if (count($selectedCells) == 2) {
1357 [$first, $last] = $selectedCells;
1359 $first = $selectedCells[0];
1360 $last = $selectedCells[0];
1372 $colFirst = min($colFirst, 255);
1373 $colLast = min($colLast, 255);
1375 $rwFirst = min($rwFirst, 65535);
1376 $rwLast = min($rwLast, 65535);
1383 $colAct = $colFirst;
1388 if ($rwFirst > $rwLast) {
1389 [$rwFirst, $rwLast] = [$rwLast, $rwFirst];
1392 if ($colFirst > $colLast) {
1393 [$colFirst, $colLast] = [$colLast, $colFirst];
1397 $data = pack(
'CvvvvvvCC', $pnn, $rwAct, $colAct, $irefAct, $cref, $rwFirst, $rwLast, $colFirst, $colLast);
1406 $mergeCells = $this->phpSheet->getMergeCells();
1407 $countMergeCells = count($mergeCells);
1409 if ($countMergeCells == 0) {
1414 $maxCountMergeCellsPerRecord = 1027;
1429 foreach ($mergeCells as $mergeCell) {
1435 [$first, $last] = $range[0];
1439 $recordData .= pack(
'vvvv', $firstRow - 1, $lastRow - 1, $firstColumn - 1, $lastColumn - 1);
1442 if ($j == $maxCountMergeCellsPerRecord ||
$i == $countMergeCells) {
1443 $recordData = pack(
'v', $j) . $recordData;
1444 $length = strlen($recordData);
1460 if (!$this->phpSheet->isTabColorSet()) {
1471 $this->colors[$this->phpSheet->getTabColor()->getRGB()],
1475 $length = strlen($recordData);
1491 $options = (int) !$this->phpSheet->getProtection()->getObjects()
1492 | (int) !$this->phpSheet->getProtection()->getScenarios() << 1
1493 | (int) !$this->phpSheet->getProtection()->getFormatCells() << 2
1494 | (int) !$this->phpSheet->getProtection()->getFormatColumns() << 3
1495 | (int) !$this->phpSheet->getProtection()->getFormatRows() << 4
1496 | (int) !$this->phpSheet->getProtection()->getInsertColumns() << 5
1497 | (int) !$this->phpSheet->getProtection()->getInsertRows() << 6
1498 | (int) !$this->phpSheet->getProtection()->getInsertHyperlinks() << 7
1499 | (int) !$this->phpSheet->getProtection()->getDeleteColumns() << 8
1500 | (int) !$this->phpSheet->getProtection()->getDeleteRows() << 9
1501 | (int) !$this->phpSheet->getProtection()->getSelectLockedCells() << 10
1502 | (int) !$this->phpSheet->getProtection()->getSort() << 11
1503 | (int) !$this->phpSheet->getProtection()->getAutoFilter() << 12
1504 | (int) !$this->phpSheet->getProtection()->getPivotTables() << 13
1505 | (int) !$this->phpSheet->getProtection()->getSelectUnlockedCells() << 14;
1520 $length = strlen($recordData);
1534 foreach ($this->phpSheet->getProtectedCells() as $range =>
$password) {
1536 $cellRanges = explode(
' ', $range);
1537 $cref = count($cellRanges);
1553 foreach ($cellRanges as $cellRange) {
1558 $recordData .= pack(
1566 $length = strlen($recordData);
1582 if (!$this->phpSheet->getFreezePane()) {
1593 $rwTop = $topRow - 1;
1594 $colLeft = $leftMostColumn - 1;
1602 if ($x != 0 &&
$y != 0) {
1605 if ($x != 0 &&
$y == 0) {
1608 if ($x == 0 &&
$y != 0) {
1611 if ($x == 0 &&
$y == 0) {
1615 $this->activePane = $pnnAct;
1618 $data = pack(
'vvvvv', $x,
$y, $rwTop, $colLeft, $pnnAct);
1630 $iPaperSize = $this->phpSheet->getPageSetup()->getPaperSize();
1631 $iScale = $this->phpSheet->getPageSetup()->getScale() ?: 100;
1634 $iFitWidth = (int) $this->phpSheet->getPageSetup()->getFitToWidth();
1635 $iFitHeight = (int) $this->phpSheet->getPageSetup()->getFitToHeight();
1640 $numHdr = $this->phpSheet->getPageMargins()->getHeader();
1642 $numFtr = $this->phpSheet->getPageMargins()->getFooter();
1659 $grbit = $fLeftToRight;
1660 $grbit |= $fLandscape << 1;
1661 $grbit |= $fNoPls << 2;
1662 $grbit |= $fNoColor << 3;
1663 $grbit |= $fDraft << 4;
1664 $grbit |= $fNotes << 5;
1665 $grbit |= $fNoOrient << 6;
1666 $grbit |= $fUsePage << 7;
1668 $numHdr = pack(
'd', $numHdr);
1669 $numFtr = pack(
'd', $numFtr);
1670 if (self::getByteOrder()) {
1671 $numHdr = strrev($numHdr);
1672 $numFtr = strrev($numFtr);
1676 $data1 = pack(
'vvvvvvvv', $iPaperSize, $iScale, $iPageStart, $iFitWidth, $iFitHeight, $grbit, $iRes, $iVRes);
1677 $data2 = $numHdr . $numFtr;
1678 $data3 = pack(
'v', $iCopies);
1699 $length = strlen($recordData);
1723 $length = strlen($recordData);
1738 $fHCenter = $this->phpSheet->getPageSetup()->getHorizontalCentered() ? 1 : 0;
1741 $data = pack(
'v', $fHCenter);
1754 $fVCenter = $this->phpSheet->getPageSetup()->getVerticalCentered() ? 1 : 0;
1757 $data = pack(
'v', $fVCenter);
1769 $margin = $this->phpSheet->getPageMargins()->getLeft();
1772 $data = pack(
'd', $margin);
1773 if (self::getByteOrder()) {
1788 $margin = $this->phpSheet->getPageMargins()->getRight();
1791 $data = pack(
'd', $margin);
1792 if (self::getByteOrder()) {
1807 $margin = $this->phpSheet->getPageMargins()->getTop();
1810 $data = pack(
'd', $margin);
1811 if (self::getByteOrder()) {
1826 $margin = $this->phpSheet->getPageMargins()->getBottom();
1829 $data = pack(
'd', $margin);
1830 if (self::getByteOrder()) {
1848 $data = pack(
'v', $fPrintRwCol);
1861 $fPrintGrid = $this->phpSheet->getPrintGridlines() ? 1 : 0;
1864 $data = pack(
'v', $fPrintGrid);
1877 $fGridSet = !$this->phpSheet->getPrintGridlines();
1880 $data = pack(
'v', $fGridSet);
1893 $iNumFilters = 1 + $rangeBounds[1][0] - $rangeBounds[0][0];
1896 $data = pack(
'v', $iNumFilters);
1916 $maxRowOutlineLevel = 0;
1917 foreach ($this->phpSheet->getRowDimensions() as $rowDimension) {
1918 $maxRowOutlineLevel = max($maxRowOutlineLevel, $rowDimension->getOutlineLevel());
1925 $colcount = count($this->columnInfo);
1926 for (
$i = 0;
$i < $colcount; ++
$i) {
1927 $col_level = max($this->columnInfo[
$i][5], $col_level);
1931 $col_level = max(0, min($col_level, 7));
1934 if ($maxRowOutlineLevel) {
1935 ++$maxRowOutlineLevel;
1942 $data = pack(
'vvvv', $dxRwGut, $dxColGut, $maxRowOutlineLevel, $col_level);
1962 if ($this->outlineStyle) {
1965 if ($this->phpSheet->getShowSummaryBelow()) {
1968 if ($this->phpSheet->getShowSummaryRight()) {
1971 if ($this->phpSheet->getPageSetup()->getFitToPage()) {
1974 if ($this->outlineOn) {
1979 $data = pack(
'v', $grbit);
1992 foreach ($this->phpSheet->getBreaks() as $cell => $breakType) {
1997 switch ($breakType) {
1998 case \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_COLUMN:
2003 case \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_ROW:
2005 $hbreaks[] = $coordinates[1];
2008 case \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_NONE:
2016 if (!empty($hbreaks)) {
2018 sort($hbreaks, SORT_NUMERIC);
2019 if ($hbreaks[0] == 0) {
2020 array_shift($hbreaks);
2024 $cbrk = count($hbreaks);
2028 $data = pack(
'v', $cbrk);
2031 foreach ($hbreaks as $hbreak) {
2032 $data .= pack(
'vvv', $hbreak, 0x0000, 0x00ff);
2039 if (!empty($vbreaks)) {
2042 $vbreaks = array_slice($vbreaks, 0, 1000);
2045 sort($vbreaks, SORT_NUMERIC);
2046 if ($vbreaks[0] == 0) {
2047 array_shift($vbreaks);
2051 $cbrk = count($vbreaks);
2055 $data = pack(
'v', $cbrk);
2058 foreach ($vbreaks as $vbreak) {
2059 $data .= pack(
'vvv', $vbreak, 0x0000, 0xffff);
2072 if (!$this->phpSheet->getProtection()->getSheet()) {
2082 $data = pack(
'v', $fLock);
2093 if (!$this->phpSheet->getProtection()->getSheet()) {
2098 if (!$this->phpSheet->getProtection()->getScenarios()) {
2106 $data = pack(
'v', 1);
2117 if (!$this->phpSheet->getProtection()->getSheet()) {
2122 if (!$this->phpSheet->getProtection()->getObjects()) {
2130 $data = pack(
'v', 1);
2141 if (!$this->phpSheet->getProtection()->getSheet() || !$this->phpSheet->getProtection()->getPassword()) {
2148 $wPassword = hexdec($this->phpSheet->getProtection()->getPassword());
2151 $data = pack(
'v', $wPassword);
2169 $bitmap_array = (is_resource($bitmap) || $bitmap instanceof
GdImage 2172 [$width, $height,
$size,
$data] = $bitmap_array;
2176 $height *= $scale_y;
2242 public function positionImage($col_start, $row_start, $x1, $y1, $width, $height): void
2245 $col_end = $col_start;
2246 $row_end = $row_start;
2252 if ($y1 >= Xls::sizeRow($this->phpSheet, $row_start + 1)) {
2256 $width = $width + $x1 - 1;
2257 $height = $height + $y1 - 1;
2266 while ($height >= Xls::sizeRow($this->phpSheet, $row_end + 1)) {
2267 $height -= Xls::sizeRow($this->phpSheet, $row_end + 1);
2280 if (Xls::sizeRow($this->phpSheet, $row_start + 1) == 0) {
2283 if (Xls::sizeRow($this->phpSheet, $row_end + 1) == 0) {
2289 $y1 = $y1 / Xls::sizeRow($this->phpSheet, $row_start + 1) * 256;
2291 $y2 = $height / Xls::sizeRow($this->phpSheet, $row_end + 1) * 256;
2293 $this->
writeObjPicture($col_start, $x1, $row_start, $y1, $col_end, $x2, $row_end, $y2);
2320 $Reserved1 = 0x0000;
2321 $Reserved2 = 0x0000;
2333 $Reserved3 = 0x0000;
2334 $cbPictFmla = 0x0000;
2335 $Reserved4 = 0x0000;
2337 $Reserved5 = 0x0000;
2340 $data = pack(
'V', $cObj);
2341 $data .= pack(
'v', $OT);
2343 $data .= pack(
'v', $grbit);
2344 $data .= pack(
'v', $colL);
2345 $data .= pack(
'v', $dxL);
2346 $data .= pack(
'v', $rwT);
2347 $data .= pack(
'v', $dyT);
2348 $data .= pack(
'v', $colR);
2349 $data .= pack(
'v', $dxR);
2350 $data .= pack(
'v', $rwB);
2351 $data .= pack(
'v', $dyB);
2352 $data .= pack(
'v', $cbMacro);
2353 $data .= pack(
'V', $Reserved1);
2354 $data .= pack(
'v', $Reserved2);
2355 $data .= pack(
'C', $icvBack);
2356 $data .= pack(
'C', $icvFore);
2357 $data .= pack(
'C', $fls);
2358 $data .= pack(
'C', $fAuto);
2359 $data .= pack(
'C', $icv);
2360 $data .= pack(
'C', $lns);
2361 $data .= pack(
'C', $lnw);
2362 $data .= pack(
'C', $fAutoB);
2363 $data .= pack(
'v', $frs);
2364 $data .= pack(
'V', $cf);
2365 $data .= pack(
'v', $Reserved3);
2366 $data .= pack(
'v', $cbPictFmla);
2367 $data .= pack(
'v', $Reserved4);
2368 $data .= pack(
'v', $grbit2);
2369 $data .= pack(
'V', $Reserved5);
2383 $width = imagesx($image);
2384 $height = imagesy($image);
2386 $data = pack(
'Vvvvv', 0x000c, $width, $height, 0x01, 0x18);
2387 for ($j = $height; --$j;) {
2388 for (
$i = 0;
$i < $width; ++
$i) {
2389 $color = imagecolorsforindex($image, imagecolorat($image,
$i, $j));
2390 foreach ([
'red',
'green',
'blue'] as
$key) {
2391 $color[
$key] = $color[
$key] + round((255 - $color[$key]) * $color[
'alpha'] / 127);
2393 $data .= chr($color[
'blue']) . chr($color[
'green']) . chr($color[
'red']);
2395 if (3 * $width % 4) {
2396 $data .= str_repeat(
"\x00", 4 - 3 * $width % 4);
2400 return [$width, $height, strlen(
$data),
$data];
2415 $bmp_fd = @
fopen($bitmap,
'rb');
2421 $data = fread($bmp_fd, filesize($bitmap));
2424 if (strlen(
$data) <= 0x36) {
2429 $identity = unpack(
'A2ident',
$data);
2430 if ($identity[
'ident'] !=
'BM') {
2431 throw new WriterException(
"$bitmap doesn't appear to be a valid bitmap image.\n");
2440 $size_array = unpack(
'Vsa', substr(
$data, 0, 4));
2441 $size = $size_array[
'sa'];
2450 $width_and_height = unpack(
'V2', substr(
$data, 0, 8));
2451 $width = $width_and_height[1];
2452 $height = $width_and_height[2];
2454 if ($width > 0xFFFF) {
2455 throw new WriterException(
"$bitmap: largest image width supported is 65k.\n");
2457 if ($height > 0xFFFF) {
2458 throw new WriterException(
"$bitmap: largest image height supported is 65k.\n");
2462 $planes_and_bitcount = unpack(
'v2', substr(
$data, 0, 4));
2464 if ($planes_and_bitcount[2] != 24) {
2465 throw new WriterException(
"$bitmap isn't a 24bit true color bitmap.\n");
2467 if ($planes_and_bitcount[1] != 1) {
2468 throw new WriterException(
"$bitmap: only 1 plane supported in bitmap image.\n");
2472 $compression = unpack(
'Vcomp', substr(
$data, 0, 4));
2475 if ($compression[
'comp'] != 0) {
2476 throw new WriterException(
"$bitmap: compression not supported in bitmap image.\n");
2483 $header = pack(
'Vvvvv', 0x000c, $width, $height, 0x01, 0x18);
2496 if ($this->phpSheet->getSheetView()->getZoomScale() == 100) {
2504 $data = pack(
'vv', $this->phpSheet->getSheetView()->getZoomScale(), 100);
2525 $this->escher = $pValue;
2534 if (isset($this->escher)) {
2535 $writer =
new Escher($this->escher);
2536 $data = $writer->close();
2537 $spOffsets = $writer->getSpOffsets();
2538 $spTypes = $writer->getSpTypes();
2543 $nm = count($spOffsets) - 1;
2544 for (
$i = 1;
$i <= $nm; ++
$i) {
2549 $dataChunk = substr(
$data, $spOffsets[
$i - 1], $spOffsets[
$i] - $spOffsets[
$i - 1]);
2561 if ($spTypes[
$i] == 0x00C9) {
2577 $objData .= pack(
'vv', 0x00C, 0x0014);
2578 $objData .= pack(
'H*',
'0000000000000000640001000A00000010000100');
2580 $objData .= pack(
'vv', 0x0013, 0x1FEE);
2581 $objData .= pack(
'H*',
'00000000010001030000020008005700');
2619 $dataValidationCollection = $this->phpSheet->getDataValidationCollection();
2622 if (!empty($dataValidationCollection)) {
2628 $horPos = 0x00000000;
2629 $verPos = 0x00000000;
2630 $objId = 0xFFFFFFFF;
2633 $data = pack(
'vVVVV', $grbit, $horPos, $verPos, $objId, count($dataValidationCollection));
2639 foreach ($dataValidationCollection as $cellCoordinate => $dataValidation) {
2654 if (
$type == 0x03 && preg_match(
'/^\".*\"$/', $dataValidation->getFormula1())) {
2659 $options |= $dataValidation->getAllowBlank() << 8;
2662 $options |= (!$dataValidation->getShowDropDown()) << 9;
2665 $options |= $dataValidation->getShowInputMessage() << 18;
2668 $options |= $dataValidation->getShowErrorMessage() << 19;
2678 $promptTitle = $dataValidation->getPromptTitle() !==
'' ?
2679 $dataValidation->getPromptTitle() : chr(0);
2683 $errorTitle = $dataValidation->getErrorTitle() !==
'' ?
2684 $dataValidation->getErrorTitle() : chr(0);
2688 $prompt = $dataValidation->getPrompt() !==
'' ?
2689 $dataValidation->getPrompt() : chr(0);
2693 $error = $dataValidation->getError() !==
'' ?
2694 $dataValidation->getError() : chr(0);
2699 $formula1 = $dataValidation->getFormula1();
2700 if (
$type == 0x03) {
2701 $formula1 = str_replace(
',', chr(0), $formula1);
2703 $this->parser->parse($formula1);
2704 $formula1 = $this->parser->toReversePolish();
2705 $sz1 = strlen($formula1);
2710 $data .= pack(
'vv', $sz1, 0x0000);
2715 $formula2 = $dataValidation->getFormula2();
2716 if ($formula2 ===
'') {
2719 $this->parser->parse($formula2);
2720 $formula2 = $this->parser->toReversePolish();
2721 $sz2 = strlen($formula2);
2726 $data .= pack(
'vv', $sz2, 0x0000);
2730 $data .= pack(
'v', 0x0001);
2751 $reserved = 0x0000000000000000;
2752 $wScalvePLV = $this->phpSheet->getSheetView()->getZoomScale();
2755 if ($this->phpSheet->getSheetView()->getView() == SheetView::SHEETVIEW_PAGE_LAYOUT) {
2756 $fPageLayoutView = 1;
2758 $fPageLayoutView = 0;
2761 $fWhitespaceHidden = 0;
2763 $grbit = $fPageLayoutView;
2764 $grbit |= $fRulerVisible << 1;
2765 $grbit |= $fWhitespaceHidden << 3;
2768 $data = pack(
'vvVVvv', $rt, $grbitFrt, 0x00000000, 0x00000000, $wScalvePLV, $grbit);
2779 $operatorType = null;
2783 $operatorType = 0x00;
2789 $operatorType = 0x00;
2793 $operatorType = 0x03;
2797 $operatorType = 0x05;
2801 $operatorType = 0x07;
2805 $operatorType = 0x06;
2809 $operatorType = 0x08;
2813 $operatorType = 0x04;
2817 $operatorType = 0x01;
2827 $numConditions = count($arrConditions);
2828 if ($numConditions == 1) {
2829 $szValue1 = ($arrConditions[0] <= 65535 ? 3 : 0x0000);
2831 $operand1 = pack(
'Cv', 0x1E, $arrConditions[0]);
2834 $szValue1 = ($arrConditions[0] <= 65535 ? 3 : 0x0000);
2835 $szValue2 = ($arrConditions[1] <= 65535 ? 3 : 0x0000);
2836 $operand1 = pack(
'Cv', 0x1E, $arrConditions[0]);
2837 $operand2 = pack(
'Cv', 0x1E, $arrConditions[1]);
2847 $bAlignHz = ($conditional->
getStyle()->getAlignment()->getHorizontal() === null ? 1 : 0);
2848 $bAlignVt = ($conditional->
getStyle()->getAlignment()->getVertical() === null ? 1 : 0);
2849 $bAlignWrapTx = ($conditional->
getStyle()->getAlignment()->getWrapText() ===
false ? 1 : 0);
2850 $bTxRotation = ($conditional->
getStyle()->getAlignment()->getTextRotation() === null ? 1 : 0);
2851 $bIndent = ($conditional->
getStyle()->getAlignment()->getIndent() === 0 ? 1 : 0);
2852 $bShrinkToFit = ($conditional->
getStyle()->getAlignment()->getShrinkToFit() ===
false ? 1 : 0);
2853 if ($bAlignHz == 0 || $bAlignVt == 0 || $bAlignWrapTx == 0 || $bTxRotation == 0 || $bIndent == 0 || $bShrinkToFit == 0) {
2859 $bProtLocked = ($conditional->
getStyle()->getProtection()->getLocked() == null ? 1 : 0);
2860 $bProtHidden = ($conditional->
getStyle()->getProtection()->getHidden() == null ? 1 : 0);
2861 if ($bProtLocked == 0 || $bProtHidden == 0) {
2875 if ($bBorderLeft == 0 || $bBorderRight == 0 || $bBorderTop == 0 || $bBorderBottom == 0) {
2881 $bFillStyle = ($conditional->
getStyle()->getFill()->getFillType() === null ? 0 : 1);
2882 $bFillColor = ($conditional->
getStyle()->getFill()->getStartColor()->getARGB() == null ? 0 : 1);
2883 $bFillColorBg = ($conditional->
getStyle()->getFill()->getEndColor()->getARGB() == null ? 0 : 1);
2884 if ($bFillStyle == 0 || $bFillColor == 0 || $bFillColorBg == 0) {
2891 $conditional->
getStyle()->getFont()->getName() !== null
2892 || $conditional->
getStyle()->getFont()->getSize() !== null
2893 || $conditional->
getStyle()->getFont()->getBold() !== null
2894 || $conditional->
getStyle()->getFont()->getItalic() !== null
2895 || $conditional->
getStyle()->getFont()->getSuperscript() !== null
2896 || $conditional->
getStyle()->getFont()->getSubscript() !== null
2897 || $conditional->
getStyle()->getFont()->getUnderline() !== null
2898 || $conditional->
getStyle()->getFont()->getStrikethrough() !== null
2899 || $conditional->
getStyle()->getFont()->getColor()->getARGB() != null
2907 $flags |= (1 == $bAlignHz ? 0x00000001 : 0);
2908 $flags |= (1 == $bAlignVt ? 0x00000002 : 0);
2909 $flags |= (1 == $bAlignWrapTx ? 0x00000004 : 0);
2910 $flags |= (1 == $bTxRotation ? 0x00000008 : 0);
2912 $flags |= (1 == 1 ? 0x00000010 : 0);
2913 $flags |= (1 == $bIndent ? 0x00000020 : 0);
2914 $flags |= (1 == $bShrinkToFit ? 0x00000040 : 0);
2916 $flags |= (1 == 1 ? 0x00000080 : 0);
2918 $flags |= (1 == $bProtLocked ? 0x00000100 : 0);
2919 $flags |= (1 == $bProtHidden ? 0x00000200 : 0);
2921 $flags |= (1 == $bBorderLeft ? 0x00000400 : 0);
2922 $flags |= (1 == $bBorderRight ? 0x00000800 : 0);
2923 $flags |= (1 == $bBorderTop ? 0x00001000 : 0);
2924 $flags |= (1 == $bBorderBottom ? 0x00002000 : 0);
2925 $flags |= (1 == 1 ? 0x00004000 : 0);
2926 $flags |= (1 == 1 ? 0x00008000 : 0);
2928 $flags |= (1 == $bFillStyle ? 0x00010000 : 0);
2929 $flags |= (1 == $bFillColor ? 0x00020000 : 0);
2930 $flags |= (1 == $bFillColorBg ? 0x00040000 : 0);
2931 $flags |= (1 == 1 ? 0x00380000 : 0);
2933 $flags |= (1 == $bFormatFont ? 0x04000000 : 0);
2935 $flags |= (1 == $bFormatAlign ? 0x08000000 : 0);
2937 $flags |= (1 == $bFormatBorder ? 0x10000000 : 0);
2939 $flags |= (1 == $bFormatFill ? 0x20000000 : 0);
2941 $flags |= (1 == $bFormatProt ? 0x40000000 : 0);
2943 $flags |= (1 == 0 ? 0x80000000 : 0);
2945 $dataBlockFont = null;
2946 $dataBlockAlign = null;
2947 $dataBlockBorder = null;
2948 $dataBlockFill = null;
2951 if ($bFormatFont == 1) {
2953 if ($conditional->
getStyle()->getFont()->getName() === null) {
2954 $dataBlockFont = pack(
'VVVVVVVV', 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000);
2955 $dataBlockFont .= pack(
'VVVVVVVV', 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000);
2960 if ($conditional->
getStyle()->getFont()->getSize() === null) {
2961 $dataBlockFont .= pack(
'V', 20 * 11);
2963 $dataBlockFont .= pack(
'V', 20 * $conditional->
getStyle()->getFont()->getSize());
2966 $dataBlockFont .= pack(
'V', 0);
2968 if ($conditional->
getStyle()->getFont()->getBold() ===
true) {
2969 $dataBlockFont .= pack(
'v', 0x02BC);
2971 $dataBlockFont .= pack(
'v', 0x0190);
2974 if ($conditional->
getStyle()->getFont()->getSubscript() ===
true) {
2975 $dataBlockFont .= pack(
'v', 0x02);
2976 $fontEscapement = 0;
2977 } elseif ($conditional->
getStyle()->getFont()->getSuperscript() ===
true) {
2978 $dataBlockFont .= pack(
'v', 0x01);
2979 $fontEscapement = 0;
2981 $dataBlockFont .= pack(
'v', 0x00);
2982 $fontEscapement = 1;
2985 switch ($conditional->
getStyle()->getFont()->getUnderline()) {
2986 case \PhpOffice\PhpSpreadsheet\Style\Font::UNDERLINE_NONE:
2987 $dataBlockFont .= pack(
'C', 0x00);
2991 case \PhpOffice\PhpSpreadsheet\Style\Font::UNDERLINE_DOUBLE:
2992 $dataBlockFont .= pack(
'C', 0x02);
2996 case \PhpOffice\PhpSpreadsheet\Style\Font::UNDERLINE_DOUBLEACCOUNTING:
2997 $dataBlockFont .= pack(
'C', 0x22);
3001 case \PhpOffice\PhpSpreadsheet\Style\Font::UNDERLINE_SINGLE:
3002 $dataBlockFont .= pack(
'C', 0x01);
3006 case \PhpOffice\PhpSpreadsheet\Style\Font::UNDERLINE_SINGLEACCOUNTING:
3007 $dataBlockFont .= pack(
'C', 0x21);
3012 $dataBlockFont .= pack(
'C', 0x00);
3018 $dataBlockFont .= pack(
'vC', 0x0000, 0x00);
3022 $dataBlockFont .= pack(
'V', $colorIdx);
3024 $dataBlockFont .= pack(
'V', 0x00000000);
3027 $optionsFlagsBold = ($conditional->
getStyle()->getFont()->getBold() === null ? 1 : 0);
3028 $optionsFlags |= (1 == $optionsFlagsBold ? 0x00000002 : 0);
3029 $optionsFlags |= (1 == 1 ? 0x00000008 : 0);
3030 $optionsFlags |= (1 == 1 ? 0x00000010 : 0);
3031 $optionsFlags |= (1 == 0 ? 0x00000020 : 0);
3032 $optionsFlags |= (1 == 1 ? 0x00000080 : 0);
3033 $dataBlockFont .= pack(
'V', $optionsFlags);
3035 $dataBlockFont .= pack(
'V', $fontEscapement);
3037 $dataBlockFont .= pack(
'V', $fontUnderline);
3039 $dataBlockFont .= pack(
'V', 0x00000000);
3041 $dataBlockFont .= pack(
'V', 0x00000000);
3043 $dataBlockFont .= pack(
'VV', 0x00000000, 0x00000000);
3045 $dataBlockFont .= pack(
'v', 0x0001);
3047 if ($bFormatAlign === 1) {
3052 $blockAlign |= 0 << 7;
3055 $blockRotation = $conditional->
getStyle()->getAlignment()->getTextRotation();
3058 $blockIndent = $conditional->
getStyle()->getAlignment()->getIndent();
3059 if ($conditional->
getStyle()->getAlignment()->getShrinkToFit() ===
true) {
3060 $blockIndent |= 1 << 4;
3062 $blockIndent |= 0 << 4;
3064 $blockIndent |= 0 << 6;
3067 $blockIndentRelative = 255;
3069 $dataBlockAlign = pack(
'CCvvv', $blockAlign, $blockRotation, $blockIndent, $blockIndentRelative, 0x0000);
3071 if ($bFormatBorder === 1) {
3086 $dataBlockBorder = pack(
'vv', $blockLineStyle, $blockColor);
3088 if ($bFormatFill === 1) {
3096 $dataBlockFill = pack(
'v', $blockFillPatternStyle);
3097 $dataBlockFill .= pack(
'v', $colorIdxFg | ($colorIdxBg << 7));
3100 $data = pack(
'CCvvVv',
$type, $operatorType, $szValue1, $szValue2, $flags, 0x0000);
3101 if ($bFormatFont === 1) {
3102 $data .= $dataBlockFont;
3104 if ($bFormatAlign === 1) {
3105 $data .= $dataBlockAlign;
3107 if ($bFormatBorder === 1) {
3108 $data .= $dataBlockBorder;
3110 if ($bFormatFill === 1) {
3111 $data .= $dataBlockFill;
3113 if ($bFormatProt == 1) {
3116 if ($operand1 !== null) {
3119 if ($operand2 !== null) {
3134 $numColumnMin = null;
3135 $numColumnMax = null;
3138 $arrConditional = [];
3139 foreach ($this->phpSheet->getConditionalStylesCollection() as $cellCoordinate => $conditionalStyles) {
3140 foreach ($conditionalStyles as $conditional) {
3145 if (!in_array($conditional->getHashCode(), $arrConditional)) {
3146 $arrConditional[] = $conditional->getHashCode();
3150 if ($numColumnMin === null || ($numColumnMin > $rangeCoordinates[0][0])) {
3151 $numColumnMin = $rangeCoordinates[0][0];
3153 if ($numColumnMax === null || ($numColumnMax < $rangeCoordinates[1][0])) {
3154 $numColumnMax = $rangeCoordinates[1][0];
3156 if ($numRowMin === null || ($numRowMin > $rangeCoordinates[0][1])) {
3157 $numRowMin = (int) $rangeCoordinates[0][1];
3159 if ($numRowMax === null || ($numRowMax < $rangeCoordinates[1][1])) {
3160 $numRowMax = (int) $rangeCoordinates[1][1];
3166 $cellRange = pack(
'vvvv', $numRowMin - 1, $numRowMax - 1, $numColumnMin - 1, $numColumnMax - 1);
3169 $data = pack(
'vv', count($arrConditional), $needRedraw);
3170 $data .= $cellRange;
3171 $data .= pack(
'v', 0x0001);
3172 $data .= $cellRange;
3178 $dataBlockProtection = 0;
3179 if ($conditional->
getStyle()->getProtection()->getLocked() == Protection::PROTECTION_PROTECTED) {
3180 $dataBlockProtection = 1;
3182 if ($conditional->
getStyle()->getProtection()->getHidden() == Protection::PROTECTION_PROTECTED) {
3183 $dataBlockProtection = 1 << 1;
3186 return $dataBlockProtection;
if(preg_match('/^ $link_type[A-Z]:/', $url))
writeDefcol()
Write BIFF record DEFCOLWIDTH if COLINFO records are in use.
writeStringRecord($stringValue)
Write a STRING record.
static operator(DataValidation $dataValidation)
static splitRange($pRange)
Split range into coordinate strings.
writeBreaks()
Write the HORIZONTALPAGEBREAKS and VERTICALPAGEBREAKS BIFF records.
writeUrl($row, $col, $url)
Write a hyperlink.
getConditionType()
Get Condition type.
writeCFHeader()
Write CFHeader record.
static static getErrorCodes()
Get list of error codes.
processBitmapGd($image)
Convert a GD-image into the internal format.
writeDimensions()
Writes Excel DIMENSIONS to define the area in which there is data.
static vertical(Alignment $alignment)
writeString($row, $col, $str, $xfIndex)
Write a LABELSST record or a LABEL record.
writeUrlExternal($row1, $col1, $row2, $col2, $url)
Write links to external directory names such as 'c:.xls', c:.xls::Sheet1!A1', '../../foo.xls'.
writeHeader()
Store the header caption BIFF record.
writeWsbool()
Write the WSBOOL BIFF record, mainly for fit-to-page.
static countCharacters($value, $enc='UTF-8')
Get character count.
writeColinfo($col_array)
Write BIFF record COLINFO to define column widths.
__construct(&$str_total, &$str_unique, &$str_table, &$colors, Parser $parser, $preCalculateFormulas, \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet $phpSheet)
Constructor.
writeNumber($row, $col, $num, $xfIndex)
Write a double to the specified row and column (zero indexed).
writePageLayoutView()
Write PLV Record.
static getDefaultColumnWidthByFont(\PhpOffice\PhpSpreadsheet\Style\Font $font, $pPixels=false)
Get the effective column width for columns without a column dimension or column with width -1 For exa...
writeFooter()
Store the footer caption BIFF record.
if(!array_key_exists('StateId', $_REQUEST)) $id
positionImage($col_start, $row_start, $x1, $y1, $width, $height)
Calculate the vertices that define the position of the image as required by the OBJ record...
writeRichTextString($row, $col, $str, $xfIndex, $arrcRun)
Write a LABELSST record or a LABEL record.
writeAutoFilterInfo()
Write the AUTOFILTERINFO BIFF record.
getOperatorType()
Get Operator type.
writeSheetLayout()
Write SHEETLAYOUT record.
static errorStyle(DataValidation $dataValidation)
const PAGEORDER_DOWN_THEN_OVER
static UTF8toBIFF8UnicodeShort($value, $arrcRuns=[])
Converts a UTF-8 string into BIFF8 Unicode string data (8-bit string length) Writes the string using ...
storeEof()
Writes Excel EOF record to indicate the end of a BIFF stream.
const OPERATOR_LESSTHANOREQUAL
static static lookup(Color $color, int $defaultIndex=0x00)
const WRITE_FORMULA_NORMAL
writeLabelSst($row, $col, $str, $xfIndex)
Write a string to the specified row and column (zero indexed).
writeZoom()
Store the window zoom factor.
writePrintHeaders()
Write the PRINTHEADERS BIFF record.
const WRITE_FORMULA_RANGE
writeWindow2()
Write BIFF record Window2.
writeUrlInternal($row1, $col1, $row2, $col2, $url)
Used to write internal reference hyperlinks such as "Sheet1!A1".
writePanes()
Writes the Excel BIFF PANE record.
const ORIENTATION_LANDSCAPE
writeMsoDrawing()
Write MSODRAWING record.
writeSheetProtection()
Write SHEETPROTECTION.
writeHcenter()
Store the horizontal centering HCENTER BIFF record.
writeBIFF8CellRangeAddressFixed($range)
Write a cell range address in BIFF8 always fixed range See section 2.5.14 in OpenOffice.org's Documentation of the Microsoft Excel File Format.
writePassword()
Write the worksheet PASSWORD record.
insertBitmap($row, $col, $bitmap, $x=0, $y=0, $scale_x=1, $scale_y=1)
Insert a 24bit bitmap image in a worksheet.
writeFormula($row, $col, $formula, $xfIndex, $calculatedValue)
Write a formula to the specified row and column (zero indexed).
printRowColHeaders($print=1)
Set the option to print the row and column headers on the printed page.
writeSetup()
Store the page setup SETUP BIFF record.
static UTF8toBIFF8UnicodeLong($value)
Converts a UTF-8 string into BIFF8 Unicode string data (16-bit string length) Writes the string using...
static style(Border $border)
append($data)
General storage function.
const WRITE_FORMULA_ERRORS
writeScenProtect()
Write SCENPROTECT.
writeRangeProtection()
Write BIFF record RANGEPROTECTION.
getEscher()
Get Escher object.
setEscher(?\PhpOffice\PhpSpreadsheet\Shared\Escher $pValue=null)
Set Escher object.
static static error(string $errorCode)
static indexesFromString(string $coordinates)
Get indexes from a string coordinates.
const CONDITION_EXPRESSION
static convertEncoding($value, $to, $from)
Convert string from one encoding to another.
writeSelection()
Write BIFF record SELECTION.
writeMarginRight()
Store the RIGHTMARGIN BIFF record.
writeCFRule(Conditional $conditional)
Write CFRule Record.
writeRow($row, $height, $xfIndex, $hidden=false, $level=0)
This method is used to set the height and format for a row.
storeBof($type)
Writes Excel BOF record to indicate the beginning of a stream or sub-stream in the BIFF file...
static coordinateFromString($pCoordinateString)
Coordinate from string.
writeMarginBottom()
Store the BOTTOMMARGIN BIFF record.
writeMarginLeft()
Store the LEFTMARGIN BIFF record.
const OPERATOR_GREATERTHAN
writeMergedCells()
Store the MERGEDCELLS records for all ranges of merged cells.
writeProtect()
Set the Biff PROTECT record to indicate that the worksheet is protected.
writeObjectProtect()
Write OBJECTPROTECT.
static rangeBoundaries($pRange)
Calculate range boundaries.
writeUrlRange($row1, $col1, $row2, $col2, $url)
This is the more general form of writeUrl().
static wrap(Alignment $alignment)
processBitmap($bitmap)
Convert a 24 bit bitmap into the modified internal format used by Windows.
writeGridset()
Write the GRIDSET BIFF record.
getConditions()
Get Conditions.
const OPERATOR_GREATERTHANOREQUAL
getData()
Retrieves data from memory in one chunk, or from disk sized chunks.
writePrintGridlines()
Write the PRINTGRIDLINES BIFF record.
setOutline($visible=true, $symbols_below=true, $symbols_right=true, $auto_style=false)
This method sets the properties for outlining and grouping.
static horizontal(Alignment $alignment)
static type(DataValidation $dataValidation)
writeVcenter()
Store the vertical centering VCENTER BIFF record.
writeUrlWeb($row1, $col1, $row2, $col2, $url)
Used to write http, ftp and mailto hyperlinks.
writeDefaultRowHeight()
Write BIFF record DEFAULTROWHEIGHT.
writeBlank($row, $col, $xfIndex)
Write a blank cell to the specified row and column (zero indexed).
static columnIndexFromString($pString)
Column index from string.
const WRITE_FORMULA_EXCEPTION
static stringFromColumnIndex($columnIndex)
String from column index.
writeGuts()
Write the GUTS BIFF record.
getDataBlockProtection(Conditional $conditional)
writeMarginTop()
Store the TOPMARGIN BIFF record.
writeDataValidity()
Store the DATAVALIDATIONS and DATAVALIDATION records.
writeObjPicture($colL, $dxL, $rwT, $dyT, $colR, $dxR, $rwB, $dyB)
Store the OBJ record that precedes an IMDATA record.
writeBoolErr($row, $col, $value, $isError, $xfIndex)
Write a boolean or an error type to the specified row and column (zero indexed).