Minor performance tweaks to Excel2007 and Excel5 Readers
git-svn-id: https://phpexcel.svn.codeplex.com/svn/trunk@64512 2327b42d-5241-43d6-9e2a-de5ac946f064
This commit is contained in:
parent
df98faa375
commit
c672fa5980
|
@ -190,7 +190,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
return $xl;
|
||||
}
|
||||
|
||||
private function _castToBool($c) {
|
||||
private static function _castToBool($c) {
|
||||
// echo 'Initial Cast to Boolean<br />';
|
||||
$value = isset($c->v) ? (string) $c->v : null;
|
||||
if ($value == '0') {
|
||||
|
@ -203,12 +203,12 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
return $value;
|
||||
} // function _castToBool()
|
||||
|
||||
private function _castToError($c) {
|
||||
private static function _castToError($c) {
|
||||
// echo 'Initial Cast to Error<br />';
|
||||
return isset($c->v) ? (string) $c->v : null;;
|
||||
} // function _castToError()
|
||||
|
||||
private function _castToString($c) {
|
||||
private static function _castToString($c) {
|
||||
// echo 'Initial Cast to String<br />';
|
||||
return isset($c->v) ? (string) $c->v : null;;
|
||||
} // function _castToString()
|
||||
|
@ -218,7 +218,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
// echo '$c->f is '.$c->f.'<br />';
|
||||
$cellDataType = 'f';
|
||||
$value = "={$c->f}";
|
||||
$calculatedValue = $this->$castBaseType($c);
|
||||
$calculatedValue = self::$castBaseType($c);
|
||||
|
||||
// Shared formula?
|
||||
if (isset($c->f['t']) && strtolower((string)$c->f['t']) == 'shared') {
|
||||
|
@ -723,7 +723,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
case "b":
|
||||
// echo 'Boolean<br />';
|
||||
if (!isset($c->f)) {
|
||||
$value = $this->_castToBool($c);
|
||||
$value = self::_castToBool($c);
|
||||
} else {
|
||||
// Formula
|
||||
$this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToBool');
|
||||
|
@ -743,7 +743,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
case "e":
|
||||
// echo 'Error<br />';
|
||||
if (!isset($c->f)) {
|
||||
$value = $this->_castToError($c);
|
||||
$value = self::_castToError($c);
|
||||
} else {
|
||||
// Formula
|
||||
$this->_castToFormula($c,$r,$cellDataType,$value,$calculatedValue,$sharedFormulas,'_castToError');
|
||||
|
@ -756,7 +756,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
// echo 'Default<br />';
|
||||
if (!isset($c->f)) {
|
||||
// echo 'Not a Formula<br />';
|
||||
$value = $this->_castToString($c);
|
||||
$value = self::_castToString($c);
|
||||
} else {
|
||||
// echo 'Treat as Formula<br />';
|
||||
// Formula
|
||||
|
@ -1431,7 +1431,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
return $excel;
|
||||
}
|
||||
|
||||
private function _readColor($color) {
|
||||
private static function _readColor($color) {
|
||||
if (isset($color["rgb"])) {
|
||||
return (string)$color["rgb"];
|
||||
} else if (isset($color["indexed"])) {
|
||||
|
@ -1458,7 +1458,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
if (isset($style->font->strike)) {
|
||||
$docStyle->getFont()->setStrikethrough(!isset($style->font->strike["val"]) || $style->font->strike["val"] == 'true' || $style->font->strike["val"] == '1');
|
||||
}
|
||||
$docStyle->getFont()->getColor()->setARGB($this->_readColor($style->font->color));
|
||||
$docStyle->getFont()->getColor()->setARGB(self::_readColor($style->font->color));
|
||||
|
||||
if (isset($style->font->u) && !isset($style->font->u["val"])) {
|
||||
$docStyle->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
|
||||
|
@ -1486,18 +1486,18 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
}
|
||||
$docStyle->getFill()->setRotation(floatval($gradientFill["degree"]));
|
||||
$gradientFill->registerXPathNamespace("sml", "http://schemas.openxmlformats.org/spreadsheetml/2006/main");
|
||||
$docStyle->getFill()->getStartColor()->setARGB($this->_readColor( self::array_item($gradientFill->xpath("sml:stop[@position=0]"))->color) );
|
||||
$docStyle->getFill()->getEndColor()->setARGB($this->_readColor( self::array_item($gradientFill->xpath("sml:stop[@position=1]"))->color) );
|
||||
$docStyle->getFill()->getStartColor()->setARGB(self::_readColor( self::array_item($gradientFill->xpath("sml:stop[@position=0]"))->color) );
|
||||
$docStyle->getFill()->getEndColor()->setARGB(self::_readColor( self::array_item($gradientFill->xpath("sml:stop[@position=1]"))->color) );
|
||||
} elseif ($style->fill->patternFill) {
|
||||
$patternType = (string)$style->fill->patternFill["patternType"] != '' ? (string)$style->fill->patternFill["patternType"] : 'solid';
|
||||
$docStyle->getFill()->setFillType($patternType);
|
||||
if ($style->fill->patternFill->fgColor) {
|
||||
$docStyle->getFill()->getStartColor()->setARGB($this->_readColor($style->fill->patternFill->fgColor));
|
||||
$docStyle->getFill()->getStartColor()->setARGB(self::_readColor($style->fill->patternFill->fgColor));
|
||||
} else {
|
||||
$docStyle->getFill()->getStartColor()->setARGB('FF000000');
|
||||
}
|
||||
if ($style->fill->patternFill->bgColor) {
|
||||
$docStyle->getFill()->getEndColor()->setARGB($this->_readColor($style->fill->patternFill->bgColor));
|
||||
$docStyle->getFill()->getEndColor()->setARGB(self::_readColor($style->fill->patternFill->bgColor));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1521,11 +1521,11 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
} elseif ($diagonalUp == true && $diagonalDown == true) {
|
||||
$docStyle->getBorders()->setDiagonalDirection(PHPExcel_Style_Borders::DIAGONAL_BOTH);
|
||||
}
|
||||
$this->_readBorder($docStyle->getBorders()->getLeft(), $style->border->left);
|
||||
$this->_readBorder($docStyle->getBorders()->getRight(), $style->border->right);
|
||||
$this->_readBorder($docStyle->getBorders()->getTop(), $style->border->top);
|
||||
$this->_readBorder($docStyle->getBorders()->getBottom(), $style->border->bottom);
|
||||
$this->_readBorder($docStyle->getBorders()->getDiagonal(), $style->border->diagonal);
|
||||
self::_readBorder($docStyle->getBorders()->getLeft(), $style->border->left);
|
||||
self::_readBorder($docStyle->getBorders()->getRight(), $style->border->right);
|
||||
self::_readBorder($docStyle->getBorders()->getTop(), $style->border->top);
|
||||
self::_readBorder($docStyle->getBorders()->getBottom(), $style->border->bottom);
|
||||
self::_readBorder($docStyle->getBorders()->getDiagonal(), $style->border->diagonal);
|
||||
}
|
||||
|
||||
// alignment
|
||||
|
@ -1566,12 +1566,12 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
}
|
||||
}
|
||||
|
||||
private function _readBorder($docBorder, $eleBorder) {
|
||||
private static function _readBorder($docBorder, $eleBorder) {
|
||||
if (isset($eleBorder["style"])) {
|
||||
$docBorder->setBorderStyle((string) $eleBorder["style"]);
|
||||
}
|
||||
if (isset($eleBorder->color)) {
|
||||
$docBorder->getColor()->setARGB($this->_readColor($eleBorder->color));
|
||||
$docBorder->getColor()->setARGB(self::_readColor($eleBorder->color));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1597,7 +1597,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
}
|
||||
|
||||
if (isset($run->rPr->color)) {
|
||||
$objText->getFont()->setColor( new PHPExcel_Style_Color( $this->_readColor($run->rPr->color) ) );
|
||||
$objText->getFont()->setColor( new PHPExcel_Style_Color( self::_readColor($run->rPr->color) ) );
|
||||
}
|
||||
|
||||
if ( (isset($run->rPr->b["val"]) && ((string) $run->rPr->b["val"] == 'true' || (string) $run->rPr->b["val"] == '1'))
|
||||
|
@ -1646,11 +1646,9 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
|
|||
}
|
||||
|
||||
private static function toCSSArray($style) {
|
||||
$style = str_replace("\r", "", $style);
|
||||
$style = str_replace("\n", "", $style);
|
||||
$style = str_replace(array("\r","\n"), "", $style);
|
||||
|
||||
$temp = explode(';', $style);
|
||||
|
||||
$style = array();
|
||||
foreach ($temp as $item) {
|
||||
$item = explode(':', $item);
|
||||
|
|
|
@ -570,7 +570,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
|||
if (!$this->_readDataOnly) {
|
||||
foreach ($this->_objFonts as $objFont) {
|
||||
if (isset($objFont->colorIndex)) {
|
||||
$color = $this->_readColor($objFont->colorIndex);
|
||||
$color = self::_readColor($objFont->colorIndex,$this->_palette);
|
||||
$objFont->getColor()->setRGB($color['rgb']);
|
||||
}
|
||||
}
|
||||
|
@ -580,12 +580,12 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
|||
$fill = $objStyle->getFill();
|
||||
|
||||
if (isset($fill->startcolorIndex)) {
|
||||
$startColor = $this->_readColor($fill->startcolorIndex);
|
||||
$startColor = self::_readColor($fill->startcolorIndex,$this->_palette);
|
||||
$fill->getStartColor()->setRGB($startColor['rgb']);
|
||||
}
|
||||
|
||||
if (isset($fill->endcolorIndex)) {
|
||||
$endColor = $this->_readColor($fill->endcolorIndex);
|
||||
$endColor = self::_readColor($fill->endcolorIndex,$this->_palette);
|
||||
$fill->getEndColor()->setRGB($endColor['rgb']);
|
||||
}
|
||||
|
||||
|
@ -597,27 +597,27 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
|||
$diagonal = $objStyle->getBorders()->getDiagonal();
|
||||
|
||||
if (isset($top->colorIndex)) {
|
||||
$borderTopColor = $this->_readColor($top->colorIndex);
|
||||
$borderTopColor = self::_readColor($top->colorIndex,$this->_palette);
|
||||
$top->getColor()->setRGB($borderTopColor['rgb']);
|
||||
}
|
||||
|
||||
if (isset($right->colorIndex)) {
|
||||
$borderRightColor = $this->_readColor($right->colorIndex);
|
||||
$borderRightColor = self::_readColor($right->colorIndex,$this->_palette);
|
||||
$right->getColor()->setRGB($borderRightColor['rgb']);
|
||||
}
|
||||
|
||||
if (isset($bottom->colorIndex)) {
|
||||
$borderBottomColor = $this->_readColor($bottom->colorIndex);
|
||||
$borderBottomColor = self::_readColor($bottom->colorIndex,$this->_palette);
|
||||
$bottom->getColor()->setRGB($borderBottomColor['rgb']);
|
||||
}
|
||||
|
||||
if (isset($left->colorIndex)) {
|
||||
$borderLeftColor = $this->_readColor($left->colorIndex);
|
||||
$borderLeftColor = self::_readColor($left->colorIndex,$this->_palette);
|
||||
$left->getColor()->setRGB($borderLeftColor['rgb']);
|
||||
}
|
||||
|
||||
if (isset($diagonal->colorIndex)) {
|
||||
$borderDiagonalColor = $this->_readColor($diagonal->colorIndex);
|
||||
$borderDiagonalColor = self::_readColor($diagonal->colorIndex,$this->_palette);
|
||||
$diagonal->getColor()->setRGB($borderDiagonalColor['rgb']);
|
||||
}
|
||||
}
|
||||
|
@ -3124,7 +3124,8 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
|||
// then we should treat as rich text
|
||||
$richText = new PHPExcel_RichText();
|
||||
$charPos = 0;
|
||||
for ($i = 0; $i <= count($this->_sst[$index]['fmtRuns']); ++$i) {
|
||||
$sstCount = count($this->_sst[$index]['fmtRuns']);
|
||||
for ($i = 0; $i <= $sstCount; ++$i) {
|
||||
if (isset($fmtRuns[$i])) {
|
||||
$text = PHPExcel_Shared_String::Substring($this->_sst[$index]['value'], $charPos, $fmtRuns[$i]['charPos'] - $charPos);
|
||||
$charPos = $fmtRuns[$i]['charPos'];
|
||||
|
@ -4228,7 +4229,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
|||
case 0x14:
|
||||
// offset: 16; size: 2; color index for sheet tab
|
||||
$colorIndex = self::_GetInt2d($recordData, 16);
|
||||
$color = $this->_readColor($colorIndex);
|
||||
$color = self::_readColor($colorIndex,$this->_palette);
|
||||
$this->_phpSheet->getTabColor()->setRGB($color['rgb']);
|
||||
break;
|
||||
|
||||
|
@ -6142,16 +6143,17 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
|
|||
* Read color
|
||||
*
|
||||
* @param int $color Indexed color
|
||||
* @param array $palette Color palette
|
||||
* @return array RGB color value, example: array('rgb' => 'FF0000')
|
||||
*/
|
||||
private function _readColor($color)
|
||||
private static function _readColor($color,$palette)
|
||||
{
|
||||
if ($color <= 0x07 || $color >= 0x40) {
|
||||
// special built-in color
|
||||
return self::_mapBuiltInColor($color);
|
||||
} else if (isset($this->_palette) && isset($this->_palette[$color - 8])) {
|
||||
} else if (isset($palette) && isset($palette[$color - 8])) {
|
||||
// palette color, color index 0x08 maps to pallete index 0
|
||||
return $this->_palette[$color - 8];
|
||||
return $palette[$color - 8];
|
||||
} else {
|
||||
// default color table
|
||||
if ($this->_version == self::XLS_BIFF8) {
|
||||
|
|
Loading…
Reference in New Issue