upgrade to PHPExcel 1.7.2
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
/**
|
||||
* PHPExcel
|
||||
*
|
||||
* Copyright (c) 2006 - 2009 PHPExcel
|
||||
* Copyright (c) 2006 - 2010 PHPExcel
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
@@ -20,9 +20,9 @@
|
||||
*
|
||||
* @category PHPExcel
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||||
* @version 1.7.0, 2009-08-10
|
||||
* @version 1.7.2, 2010-01-11
|
||||
*/
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ require_once PHPEXCEL_ROOT . 'PHPExcel/Calculation/Functions.php';
|
||||
*
|
||||
* @category PHPExcel
|
||||
* @package PHPExcel_Style
|
||||
* @copyright Copyright (c) 2006 - 2009 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
* @copyright Copyright (c) 2006 - 2010 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||||
*/
|
||||
class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
{
|
||||
@@ -203,9 +203,9 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
*
|
||||
* @return string E.g. 'A1'
|
||||
*/
|
||||
public function getXSelectedCells()
|
||||
public function getSelectedCells()
|
||||
{
|
||||
return $this->getActiveSheet()->getXSelectedCells();
|
||||
return $this->getActiveSheet()->getSelectedCells();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,9 +214,9 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
*
|
||||
* @return string E.g. 'A1'
|
||||
*/
|
||||
public function getXActiveCell()
|
||||
public function getActiveCell()
|
||||
{
|
||||
return $this->getActiveSheet()->getXActiveCell();
|
||||
return $this->getActiveSheet()->getActiveCell();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,7 +248,7 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
public function applyFromArray($pStyles = null) {
|
||||
if (is_array($pStyles)) {
|
||||
if ($this->_isSupervisor) {
|
||||
$this->getActiveSheet()->getStyle($this->getXSelectedCells())->applyFromArray($this->getStyleArray($pStyles));
|
||||
$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles));
|
||||
} else {
|
||||
if (array_key_exists('code', $pStyles)) {
|
||||
$this->setFormatCode($pStyles['code']);
|
||||
@@ -288,7 +288,7 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
}
|
||||
if ($this->_isSupervisor) {
|
||||
$styleArray = $this->getStyleArray(array('code' => $pValue));
|
||||
$this->getActiveSheet()->getStyle($this->getXSelectedCells())->applyFromArray($styleArray);
|
||||
$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
|
||||
} else {
|
||||
$this->_formatCode = $pValue;
|
||||
$this->_builtInFormatCode = self::builtInFormatCodeIndex($pValue);
|
||||
@@ -318,7 +318,7 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
|
||||
if ($this->_isSupervisor) {
|
||||
$styleArray = $this->getStyleArray(array('code' => self::builtInFormatCode($pValue)));
|
||||
$this->getActiveSheet()->getStyle($this->getXSelectedCells())->applyFromArray($styleArray);
|
||||
$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
|
||||
} else {
|
||||
$this->_builtInFormatCode = $pValue;
|
||||
$this->_formatCode = self::builtInFormatCode($pValue);
|
||||
@@ -446,37 +446,6 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hash index
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $_hashIndex;
|
||||
|
||||
/**
|
||||
* Get hash index
|
||||
*
|
||||
* Note that this index may vary during script execution! Only reliable moment is
|
||||
* while doing a write of a workbook and when changes are not allowed.
|
||||
*
|
||||
* @return string Hash index
|
||||
*/
|
||||
public function getHashIndex() {
|
||||
return $this->_hashIndex;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set hash index
|
||||
*
|
||||
* Note that this index may vary during script execution! Only reliable moment is
|
||||
* while doing a write of a workbook and when changes are not allowed.
|
||||
*
|
||||
* @param string $value Hash index
|
||||
*/
|
||||
public function setHashIndex($value) {
|
||||
$this->_hashIndex = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement PHP __clone to create a deep clone, not just a shallow copy.
|
||||
*/
|
||||
@@ -491,15 +460,59 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
}
|
||||
}
|
||||
|
||||
private static $_dateFormatReplacements = array(
|
||||
// first remove escapes related to non-format characters
|
||||
'\\' => '',
|
||||
// 12-hour suffix
|
||||
'am/pm' => 'A',
|
||||
// 4-digit year
|
||||
'yyyy' => 'Y',
|
||||
// 2-digit year
|
||||
'yy' => 'y',
|
||||
// first letter of month - no php equivalent
|
||||
'mmmmm' => 'M',
|
||||
// full month name
|
||||
'mmmm' => 'F',
|
||||
// short month name
|
||||
'mmm' => 'M',
|
||||
// mm is minutes if time or month w/leading zero
|
||||
':mm' => ':i',
|
||||
// month leading zero
|
||||
'mm' => 'm',
|
||||
// month no leading zero
|
||||
'm' => 'n',
|
||||
// full day of week name
|
||||
'dddd' => 'l',
|
||||
// short day of week name
|
||||
'ddd' => 'D',
|
||||
// days leading zero
|
||||
'dd' => 'd',
|
||||
// days no leading zero
|
||||
'd' => 'j',
|
||||
// seconds
|
||||
'ss' => 's',
|
||||
// fractional seconds - no php equivalent
|
||||
'.s' => ''
|
||||
);
|
||||
private static $_dateFormatReplacements24 = array(
|
||||
'hh' => 'H',
|
||||
'h' => 'G'
|
||||
);
|
||||
private static $_dateFormatReplacements12 = array(
|
||||
'hh' => 'h',
|
||||
'h' => 'g'
|
||||
);
|
||||
|
||||
/**
|
||||
* Convert a value in a pre-defined format to a PHP string
|
||||
*
|
||||
* @param mixed $value Value to format
|
||||
* @param string $format Format code
|
||||
* @param array $callBack Callback function for additional formatting of string
|
||||
* @return string Formatted string
|
||||
*/
|
||||
public static function toFormattedString($value = '', $format = '') {
|
||||
// For now we do not treat strings although part 4 of a format code affects strings
|
||||
public static function toFormattedString($value = '', $format = '', $callBack = null) {
|
||||
// For now we do not treat strings although section 4 of a format code affects strings
|
||||
if (!is_numeric($value)) return $value;
|
||||
|
||||
// For 'General' format code, we just pass the value although this is not entirely the way Excel does it,
|
||||
@@ -508,82 +521,94 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
return $value;
|
||||
}
|
||||
|
||||
// Get the parts, there can be up to four parts
|
||||
$parts = explode(';', $format);
|
||||
// Get the sections, there can be up to four sections
|
||||
$sections = explode(';', $format);
|
||||
|
||||
// We should really fetch the relevant part depending on whether we have a positive number,
|
||||
// negative number, zero, or text. But for now we just use first part
|
||||
$format = $parts[0];
|
||||
// Fetch the relevant section depending on whether number is positive, negative, or zero?
|
||||
// Text not supported yet.
|
||||
// Here is how the sections apply to various values in Excel:
|
||||
// 1 section: [POSITIVE/NEGATIVE/ZERO/TEXT]
|
||||
// 2 sections: [POSITIVE/ZERO/TEXT] [NEGATIVE]
|
||||
// 3 sections: [POSITIVE/TEXT] [NEGATIVE] [ZERO]
|
||||
// 4 sections: [POSITIVE] [NEGATIVE] [ZERO] [TEXT]
|
||||
switch (count($sections)) {
|
||||
case 1:
|
||||
$format = $sections[0];
|
||||
break;
|
||||
|
||||
if (preg_match("/^[hmsdy]/i", $format)) { // custom datetime format
|
||||
case 2:
|
||||
$format = ($value >= 0) ? $sections[0] : $sections[1];
|
||||
$value = abs($value); // Use the absolute value
|
||||
break;
|
||||
|
||||
case 3:
|
||||
$format = ($value > 0) ?
|
||||
$sections[0] : ( ($value < 0) ?
|
||||
$sections[1] : $sections[2]);
|
||||
$value = abs($value); // Use the absolute value
|
||||
break;
|
||||
|
||||
case 4:
|
||||
$format = ($value > 0) ?
|
||||
$sections[0] : ( ($value < 0) ?
|
||||
$sections[1] : $sections[2]);
|
||||
$value = abs($value); // Use the absolute value
|
||||
break;
|
||||
|
||||
default:
|
||||
// something is wrong, just use first section
|
||||
$format = $sections[0];
|
||||
break;
|
||||
}
|
||||
|
||||
// Save format with color information for later use below
|
||||
$formatColor = $format;
|
||||
|
||||
// Strip color information
|
||||
$color_regex = '/^\\[[a-zA-Z]+\\]/';
|
||||
$format = preg_replace($color_regex, '', $format);
|
||||
|
||||
// Let's begin inspecting the format and converting the value to a formatted string
|
||||
if (preg_match('/^(\[\$[A-Z]*-[0-9A-F]*\])*[hmsdy]/i', $format)) { // datetime format
|
||||
// dvc: convert Excel formats to PHP date formats
|
||||
// first remove escapes related to non-format characters
|
||||
|
||||
// strip off first part containing e.g. [$-F800] or [$USD-409]
|
||||
// general syntax: [$<Currency string>-<language info>]
|
||||
// language info is in hexadecimal
|
||||
$format = preg_replace('/^(\[\$[A-Z]*-[0-9A-F]*\])/i', '', $format);
|
||||
|
||||
// OpenOffice.org uses upper-case number formats, e.g. 'YYYY', convert to lower-case
|
||||
$format = strtolower($format);
|
||||
|
||||
$format = str_replace('\\', '', $format);
|
||||
|
||||
// 4-digit year
|
||||
$format = str_replace('yyyy', 'Y', $format);
|
||||
// 2-digit year
|
||||
$format = str_replace('yy', 'y', $format);
|
||||
// first letter of month - no php equivalent
|
||||
$format = str_replace('mmmmm', 'M', $format);
|
||||
// full month name
|
||||
$format = str_replace('mmmm', 'F', $format);
|
||||
// short month name
|
||||
$format = str_replace('mmm', 'M', $format);
|
||||
// mm is minutes if time or month w/leading zero
|
||||
$format = str_replace(':mm', ':i', $format);
|
||||
// tmp place holder
|
||||
$format = str_replace('mm', 'x', $format);
|
||||
// month no leading zero
|
||||
$format = str_replace('m', 'n', $format);
|
||||
// month leading zero
|
||||
$format = str_replace('x', 'm', $format);
|
||||
// 12-hour suffix
|
||||
$format = str_replace('am/pm', 'A', $format);
|
||||
// full day of week name
|
||||
$format = str_replace('dddd', 'l', $format);
|
||||
// short day of week name
|
||||
$format = str_replace('ddd', 'D', $format);
|
||||
// tmp place holder
|
||||
$format = str_replace('dd', 'x', $format);
|
||||
// days no leading zero
|
||||
$format = str_replace('d', 'j', $format);
|
||||
// days leading zero
|
||||
$format = str_replace('x', 'd', $format);
|
||||
// seconds
|
||||
$format = str_replace('ss', 's', $format);
|
||||
// fractional seconds - no php equivalent
|
||||
$format = str_replace('.s', '', $format);
|
||||
|
||||
if (!strpos($format,'A')) { // 24-hour format
|
||||
$format = str_replace('h', 'H', $format);
|
||||
$format = strtr($format,self::$_dateFormatReplacements);
|
||||
if (!strpos($format,'A')) { // 24-hour time format
|
||||
$format = strtr($format,self::$_dateFormatReplacements24);
|
||||
} else { // 12-hour time format
|
||||
$format = strtr($format,self::$_dateFormatReplacements12);
|
||||
}
|
||||
|
||||
return gmdate($format, PHPExcel_Shared_Date::ExcelToPHP($value));
|
||||
$value = gmdate($format, PHPExcel_Shared_Date::ExcelToPHP($value));
|
||||
|
||||
} else if (preg_match('/%$/', $format)) { // % number format
|
||||
if ($format === self::FORMAT_PERCENTAGE) {
|
||||
return round( (100 * $value), 0) . '%';
|
||||
}
|
||||
if (preg_match('/\.[#0]+/i', $format, $m)) {
|
||||
$s = substr($m[0], 0, 1) . (strlen($m[0]) - 1);
|
||||
$format = str_replace($m[0], $s, $format);
|
||||
}
|
||||
if (preg_match('/^[#0]+/', $format, $m)) {
|
||||
$format = str_replace($m[0], strlen($m[0]), $format);
|
||||
}
|
||||
$format = '%' . str_replace('%', 'f%%', $format);
|
||||
$value = round( (100 * $value), 0) . '%';
|
||||
} else {
|
||||
if (preg_match('/\.[#0]+/i', $format, $m)) {
|
||||
$s = substr($m[0], 0, 1) . (strlen($m[0]) - 1);
|
||||
$format = str_replace($m[0], $s, $format);
|
||||
}
|
||||
if (preg_match('/^[#0]+/', $format, $m)) {
|
||||
$format = str_replace($m[0], strlen($m[0]), $format);
|
||||
}
|
||||
$format = '%' . str_replace('%', 'f%%', $format);
|
||||
|
||||
return sprintf($format, 100 * $value);
|
||||
$value = sprintf($format, 100 * $value);
|
||||
}
|
||||
|
||||
} else {
|
||||
if (preg_match ("/^([0-9.,-]+)$/", $value)) {
|
||||
if ($format === self::FORMAT_CURRENCY_EUR_SIMPLE) {
|
||||
return 'EUR ' . sprintf('%1.2f', $value);
|
||||
$value = 'EUR ' . sprintf('%1.2f', $value);
|
||||
|
||||
} else {
|
||||
// In Excel formats, "_" is used to add spacing, which we can't do in HTML
|
||||
@@ -618,7 +643,8 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
$adjustedDecimalPart = $decimalPart/$GCD;
|
||||
$adjustedDecimalDivisor = $decimalDivisor/$GCD;
|
||||
|
||||
if (strpos($format,'0') !== false) {
|
||||
if ((strpos($format,'0') !== false) || (substr($format,0,3) == '? ?')) {
|
||||
if ($integerPart == 0) { $integerPart = ''; }
|
||||
$value = "$sign$integerPart $adjustedDecimalPart/$adjustedDecimalDivisor";
|
||||
} else {
|
||||
$adjustedDecimalPart += $integerPart * $adjustedDecimalDivisor;
|
||||
@@ -633,12 +659,13 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
$dec = $matches[2];
|
||||
$right = $matches[3];
|
||||
if ($useThousands) {
|
||||
$localeconv = localeconv();
|
||||
if (($localeconv['thousands_sep'] == '') || ($localeconv['decimal_point'] == '')) {
|
||||
$value = number_format($value, strlen($right), $localeconv['mon_decimal_point'], $localeconv['mon_thousands_sep']);
|
||||
} else {
|
||||
$value = number_format($value, strlen($right), $localeconv['decimal_point'], $localeconv['thousands_sep']);
|
||||
}
|
||||
$value = number_format(
|
||||
$value
|
||||
, strlen($right)
|
||||
, PHPExcel_Shared_String::getDecimalSeparator()
|
||||
, PHPExcel_Shared_String::getThousandsSeparator()
|
||||
);
|
||||
|
||||
} else {
|
||||
$sprintf_pattern = "%1." . strlen($right) . "f";
|
||||
$value = sprintf($sprintf_pattern, $value);
|
||||
@@ -646,13 +673,16 @@ class PHPExcel_Style_NumberFormat implements PHPExcel_IComparable
|
||||
$value = preg_replace($number_regex, $value, $format);
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
// Additional formatting provided by callback function
|
||||
if ($callBack !== null) {
|
||||
list($writerInstance, $function) = $callBack;
|
||||
$value = $writerInstance->$function($value, $formatColor);
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user