94    public function read(SimpleXMLElement $sheet, 
int $maxRow, 
int $maxCol): void
 
   96        if ($sheet->Styles->StyleRegion !== 
null) {
 
   97            $this->
readStyles($sheet->Styles->StyleRegion, $maxRow, $maxCol);
 
  101    private function readStyles(SimpleXMLElement $styleRegion, 
int $maxRow, 
int $maxCol): void
 
  103        foreach ($styleRegion as 
$style) {
 
  108            $styleAttributes = 
$style->attributes();
 
  109            if ($styleAttributes !== 
null && ($styleAttributes[
'startRow'] <= $maxRow) && ($styleAttributes[
'startCol'] <= $maxCol)) {
 
  110                $cellRange = $this->
readStyleRange($styleAttributes, $maxCol, $maxRow);
 
  112                $styleAttributes = 
$style->Style->attributes();
 
  117                $formatCode = (string) $styleAttributes[
'Format'];
 
  119                    $styleArray[
'numberFormat'][
'formatCode'] = $formatCode;
 
  121                if ($this->readDataOnly === 
false && $styleAttributes !== 
null) {
 
  123                    $styleArray[
'numberFormat'][
'formatCode'] = $formatCode;
 
  126                $this->spreadsheet->getActiveSheet()->getStyle($cellRange)->applyFromArray($styleArray);
 
  133        if (isset($srssb->Diagonal, $srssb->{
'Rev-Diagonal'})) {
 
  136        } elseif (isset($srssb->Diagonal)) {
 
  139        } elseif (isset($srssb->{
'Rev-Diagonal'})) {
 
  140            $styleArray[
'borders'][
'diagonal'] = self::parseBorderAttributes($srssb->{
'Rev-Diagonal'}->attributes());
 
  145    private function addBorderStyle(SimpleXMLElement $srssb, array &$styleArray, 
string $direction): void
 
  147        $ucDirection = ucfirst($direction);
 
  148        if (isset($srssb->$ucDirection)) {
 
  149            $styleArray[
'borders'][$direction] = self::parseBorderAttributes($srssb->$ucDirection->attributes());
 
  155        $rotation = (int) $styleAttributes->Rotation;
 
  156        if ($rotation >= 270 && $rotation <= 360) {
 
  159        $rotation = (abs($rotation) > 90) ? 0 : $rotation;
 
  164    private static function addStyle(array &$styleArray, 
string $key, 
string $value): void
 
  166        if (array_key_exists($value, self::$mappings[
$key])) {
 
  167            $styleArray[
$key] = self::$mappings[
$key][$value];
 
  171    private static function addStyle2(array &$styleArray, 
string $key1, 
string $key, 
string $value): void
 
  173        if (array_key_exists($value, self::$mappings[
$key])) {
 
  174            $styleArray[$key1][
$key] = self::$mappings[
$key][$value];
 
  181        if ($borderAttributes !== 
null) {
 
  182            if (isset($borderAttributes[
'Color'])) {
 
  183                $styleArray[
'color'][
'rgb'] = self::parseGnumericColour($borderAttributes[
'Color']);
 
  186            self::addStyle($styleArray, 
'borderStyle', $borderAttributes[
'Style']);
 
  194        [$gnmR, $gnmG, $gnmB] = explode(
':', $gnmColour);
 
  195        $gnmR = substr(str_pad($gnmR, 4, 
'0', STR_PAD_RIGHT), 0, 2);
 
  196        $gnmG = substr(str_pad($gnmG, 4, 
'0', STR_PAD_RIGHT), 0, 2);
 
  197        $gnmB = substr(str_pad($gnmB, 4, 
'0', STR_PAD_RIGHT), 0, 2);
 
  199        return $gnmR . $gnmG . $gnmB;
 
  202    private function addColors(array &$styleArray, SimpleXMLElement $styleAttributes): void
 
  204        $RGB = self::parseGnumericColour($styleAttributes[
'Fore']);
 
  205        $styleArray[
'font'][
'color'][
'rgb'] = $RGB;
 
  206        $RGB = self::parseGnumericColour($styleAttributes[
'Back']);
 
  207        $shade = (string) $styleAttributes[
'Shade'];
 
  208        if (($RGB !== 
'000000') || ($shade !== 
'0')) {
 
  209            $RGB2 = self::parseGnumericColour($styleAttributes[
'PatternColor']);
 
  210            if ($shade === 
'1') {
 
  211                $styleArray[
'fill'][
'startColor'][
'rgb'] = $RGB;
 
  212                $styleArray[
'fill'][
'endColor'][
'rgb'] = $RGB2;
 
  214                $styleArray[
'fill'][
'endColor'][
'rgb'] = $RGB;
 
  215                $styleArray[
'fill'][
'startColor'][
'rgb'] = $RGB2;
 
  217            self::addStyle2($styleArray, 
'fill', 
'fillType', $shade);
 
  221    private function readStyleRange(SimpleXMLElement $styleAttributes, 
int $maxCol, 
int $maxRow): string
 
  223        $startColumn = Coordinate::stringFromColumnIndex((
int) $styleAttributes[
'startCol'] + 1);
 
  224        $startRow = $styleAttributes[
'startRow'] + 1;
 
  226        $endColumn = ($styleAttributes[
'endCol'] > $maxCol) ? $maxCol : (
int) $styleAttributes[
'endCol'];
 
  227        $endColumn = Coordinate::stringFromColumnIndex($endColumn + 1);
 
  229        $endRow = 1 + (($styleAttributes[
'endRow'] > $maxRow) ? $maxRow : (
int) $styleAttributes[
'endRow']);
 
  230        $cellRange = $startColumn . $startRow . 
':' . $endColumn . $endRow;
 
  235    private function readStyle(array $styleArray, SimpleXMLElement $styleAttributes, SimpleXMLElement 
$style): array
 
  237        self::addStyle2($styleArray, 
'alignment', 
'horizontal', $styleAttributes[
'HAlign']);
 
  238        self::addStyle2($styleArray, 
'alignment', 
'vertical', $styleAttributes[
'VAlign']);
 
  239        $styleArray[
'alignment'][
'wrapText'] = $styleAttributes[
'WrapText'] == 
'1';
 
  240        $styleArray[
'alignment'][
'textRotation'] = $this->calcRotation($styleAttributes);
 
  241        $styleArray[
'alignment'][
'shrinkToFit'] = $styleAttributes[
'ShrinkToFit'] == 
'1';
 
  242        $styleArray[
'alignment'][
'indent'] = ((int) ($styleAttributes[
'Indent']) > 0) ? $styleAttributes[
'indent'] : 0;
 
  244        $this->addColors($styleArray, $styleAttributes);
 
  246        $fontAttributes = 
$style->Style->Font->attributes();
 
  247        if ($fontAttributes !== 
null) {
 
  248            $styleArray[
'font'][
'name'] = (string) 
$style->Style->Font;
 
  249            $styleArray[
'font'][
'size'] = (
int) ($fontAttributes[
'Unit']);
 
  250            $styleArray[
'font'][
'bold'] = $fontAttributes[
'Bold'] == 
'1';
 
  251            $styleArray[
'font'][
'italic'] = $fontAttributes[
'Italic'] == 
'1';
 
  252            $styleArray[
'font'][
'strikethrough'] = $fontAttributes[
'StrikeThrough'] == 
'1';
 
  253            self::addStyle2($styleArray, 
'font', 
'underline', $fontAttributes[
'Underline']);
 
  255            switch ($fontAttributes[
'Script']) {
 
  257                    $styleArray[
'font'][
'superscript'] = 
true;
 
  261                    $styleArray[
'font'][
'subscript'] = 
true;
 
  267        if (isset(
$style->Style->StyleBorder)) {
 
  268            $srssb = 
$style->Style->StyleBorder;
 
  269            $this->addBorderStyle($srssb, $styleArray, 
'top');
 
  270            $this->addBorderStyle($srssb, $styleArray, 
'bottom');
 
  271            $this->addBorderStyle($srssb, $styleArray, 
'left');
 
  272            $this->addBorderStyle($srssb, $styleArray, 
'right');
 
  273            $this->addBorderDiagonal($srssb, $styleArray);
 
  275        if (isset(
$style->Style->HyperLink)) {
 
  277            $hyperlink = 
$style->Style->HyperLink->attributes();
 
An exception for terminatinating execution or to throw for unit testing.
Helper class to manipulate cell coordinates.
calcRotation(SimpleXMLElement $styleAttributes)
addBorderStyle(SimpleXMLElement $srssb, array &$styleArray, string $direction)
static parseGnumericColour(string $gnmColour)
static addStyle2(array &$styleArray, string $key1, string $key, string $value)
__construct(Spreadsheet $spreadsheet, bool $readDataOnly)
addColors(array &$styleArray, SimpleXMLElement $styleAttributes)
readStyle(array $styleArray, SimpleXMLElement $styleAttributes, SimpleXMLElement $style)
static parseBorderAttributes(?SimpleXMLElement $borderAttributes)
static addStyle(array &$styleArray, string $key, string $value)
read(SimpleXMLElement $sheet, int $maxRow, int $maxCol)
readStyles(SimpleXMLElement $styleRegion, int $maxRow, int $maxCol)
readStyleRange(SimpleXMLElement $styleAttributes, int $maxCol, int $maxRow)
addBorderDiagonal(SimpleXMLElement $srssb, array &$styleArray)
static isDateTimeFormatCode($pFormatCode)
Is a given number format code a date/time?
const HORIZONTAL_CENTER_CONTINUOUS
const BORDER_MEDIUMDASHDOT
const BORDER_MEDIUMDASHED
const BORDER_MEDIUMDASHDOTDOT
const BORDER_SLANTDASHDOT
const FILL_PATTERN_LIGHTHORIZONTAL
const FILL_PATTERN_DARKVERTICAL
const FILL_PATTERN_LIGHTTRELLIS
const FILL_PATTERN_GRAY125
const FILL_PATTERN_DARKTRELLIS
const FILL_PATTERN_DARKGRID
const FILL_PATTERN_GRAY0625
const FILL_PATTERN_LIGHTGRID
const FILL_PATTERN_DARKGRAY
const FILL_PATTERN_LIGHTDOWN
const FILL_PATTERN_LIGHTVERTICAL
const FILL_PATTERN_LIGHTUP
const FILL_PATTERN_DARKUP
const FILL_PATTERN_MEDIUMGRAY
const FILL_PATTERN_DARKDOWN
const FILL_PATTERN_DARKHORIZONTAL
const FILL_PATTERN_LIGHTGRAY
const UNDERLINE_SINGLEACCOUNTING
const UNDERLINE_DOUBLEACCOUNTING
if(!file_exists(getcwd() . '/ilias.ini.php'))
registration confirmation script for ilias