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:
Mark Baker 2010-11-29 12:45:59 +00:00
parent df98faa375
commit c672fa5980
2 changed files with 37 additions and 37 deletions

View File

@ -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);

View File

@ -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) {