Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Яков
idivbanu
Commits
48680c56
Commit
48680c56
authored
May 29, 2018
by
Яков
Browse files
first
parents
Changes
359
Show whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
359 of 359+
files are displayed.
Plain diff
Email patch
lib/Classes/PHPExcel/Calculation/functionlist.txt
0 → 100644
View file @
48680c56
ABS
ACCRINT
ACCRINTM
ACOS
ACOSH
ADDRESS
AMORDEGRC
AMORLINC
AND
AREAS
ASC
ASIN
ASINH
ATAN
ATAN2
ATANH
AVEDEV
AVERAGE
AVERAGEA
AVERAGEIF
AVERAGEIFS
BAHTTEXT
BESSELI
BESSELJ
BESSELK
BESSELY
BETADIST
BETAINV
BIN2DEC
BIN2HEX
BIN2OCT
BINOMDIST
CEILING
CELL
CHAR
CHIDIST
CHIINV
CHITEST
CHOOSE
CLEAN
CODE
COLUMN
COLUMNS
COMBIN
COMPLEX
CONCATENATE
CONFIDENCE
CONVERT
CORREL
COS
COSH
COUNT
COUNTA
COUNTBLANK
COUNTIF
COUNTIFS
COUPDAYBS
COUPDAYBS
COUPDAYSNC
COUPNCD
COUPNUM
COUPPCD
COVAR
CRITBINOM
CUBEKPIMEMBER
CUBEMEMBER
CUBEMEMBERPROPERTY
CUBERANKEDMEMBER
CUBESET
CUBESETCOUNT
CUBEVALUE
CUMIPMT
CUMPRINC
DATE
DATEDIF
DATEVALUE
DAVERAGE
DAY
DAYS360
DB
DCOUNT
DCOUNTA
DDB
DEC2BIN
DEC2HEX
DEC2OCT
DEGREES
DELTA
DEVSQ
DGET
DISC
DMAX
DMIN
DOLLAR
DOLLARDE
DOLLARFR
DPRODUCT
DSTDEV
DSTDEVP
DSUM
DURATION
DVAR
DVARP
EDATE
EFFECT
EOMONTH
ERF
ERFC
ERROR.TYPE
EVEN
EXACT
EXP
EXPONDIST
FACT
FACTDOUBLE
FALSE
FDIST
FIND
FINDB
FINV
FISHER
FISHERINV
FIXED
FLOOR
FORECAST
FREQUENCY
FTEST
FV
FVSCHEDULE
GAMAMDIST
GAMMAINV
GAMMALN
GCD
GEOMEAN
GESTEP
GETPIVOTDATA
GROWTH
HARMEAN
HEX2BIN
HEX2OCT
HLOOKUP
HOUR
HYPERLINK
HYPGEOMDIST
IF
IFERROR
IMABS
IMAGINARY
IMARGUMENT
IMCONJUGATE
IMCOS
IMEXP
IMLN
IMLOG10
IMLOG2
IMPOWER
IMPRODUCT
IMREAL
IMSIN
IMSQRT
IMSUB
IMSUM
INDEX
INDIRECT
INFO
INT
INTERCEPT
INTRATE
IPMT
IRR
ISBLANK
ISERR
ISERROR
ISEVEN
ISLOGICAL
ISNA
ISNONTEXT
ISNUMBER
ISODD
ISPMT
ISREF
ISTEXT
JIS
KURT
LARGE
LCM
LEFT
LEFTB
LEN
LENB
LINEST
LN
LOG
LOG10
LOGEST
LOGINV
LOGNORMDIST
LOOKUP
LOWER
MATCH
MAX
MAXA
MDETERM
MDURATION
MEDIAN
MID
MIDB
MIN
MINA
MINUTE
MINVERSE
MIRR
MMULT
MOD
MODE
MONTH
MROUND
MULTINOMIAL
N
NA
NEGBINOMDIST
NETWORKDAYS
NOMINAL
NORMDIST
NORMINV
NORMSDIST
NORMSINV
NOT
NOW
NPER
NPV
OCT2BIN
OCT2DEC
OCT2HEX
ODD
ODDFPRICE
ODDFYIELD
ODDLPRICE
ODDLYIELD
OFFSET
OR
PEARSON
PERCENTILE
PERCENTRANK
PERMUT
PHONETIC
PI
PMT
POISSON
POWER
PPMT
PRICE
PRICEDISC
PRICEMAT
PROB
PRODUCT
PROPER
PV
QUARTILE
QUOTIENT
RADIANS
RAND
RANDBETWEEN
RANK
RATE
RECEIVED
REPLACE
REPLACEB
REPT
RIGHT
RIGHTB
ROMAN
ROUND
ROUNDDOWN
ROUNDUP
ROW
ROWS
RSQ
RTD
SEARCH
SEARCHB
SECOND
SERIESSUM
SIGN
SIN
SINH
SKEW
SLN
SLOPE
SMALL
SQRT
SQRTPI
STANDARDIZE
STDEV
STDEVA
STDEVP
STDEVPA
STEYX
SUBSTITUTE
SUBTOTAL
SUM
SUMIF
SUMIFS
SUMPRODUCT
SUMSQ
SUMX2MY2
SUMX2PY2
SUMXMY2
SYD
T
TAN
TANH
TBILLEQ
TBILLPRICE
TBILLYIELD
TDIST
TEXT
TIME
TIMEVALUE
TINV
TODAY
TRANSPOSE
TREND
TRIM
TRIMMEAN
TRUE
TRUNC
TTEST
TYPE
UPPER
USDOLLAR
VALUE
VAR
VARA
VARP
VARPA
VDB
VERSION
VLOOKUP
WEEKDAY
WEEKNUM
WEIBULL
WORKDAY
XIRR
XNPV
YEAR
YEARFRAC
YIELD
YIELDDISC
YIELDMAT
ZTEST
lib/Classes/PHPExcel/Cell.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Cell
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Cell
{
/**
* Default range variable constant
*
* @var string
*/
const
DEFAULT_RANGE
=
'A1:A1'
;
/**
* Value binder to use
*
* @var PHPExcel_Cell_IValueBinder
*/
private
static
$_valueBinder
=
NULL
;
/**
* Value of the cell
*
* @var mixed
*/
private
$_value
;
/**
* Calculated value of the cell (used for caching)
* This returns the value last calculated by MS Excel or whichever spreadsheet program was used to
* create the original spreadsheet file.
* Note that this value is not guaranteed to reflect the actual calculated value because it is
* possible that auto-calculation was disabled in the original spreadsheet, and underlying data
* values used by the formula have changed since it was last calculated.
*
* @var mixed
*/
private
$_calculatedValue
=
NULL
;
/**
* Type of the cell data
*
* @var string
*/
private
$_dataType
;
/**
* Parent worksheet
*
* @var PHPExcel_CachedObjectStorage_CacheBase
*/
private
$_parent
;
/**
* Index to cellXf
*
* @var int
*/
private
$_xfIndex
;
/**
* Attributes of the formula
*
*/
private
$_formulaAttributes
;
/**
* Send notification to the cache controller
*
* @return void
**/
public
function
notifyCacheController
()
{
$this
->
_parent
->
updateCacheData
(
$this
);
return
$this
;
}
public
function
detach
()
{
$this
->
_parent
=
NULL
;
}
public
function
attach
(
PHPExcel_CachedObjectStorage_CacheBase
$parent
)
{
$this
->
_parent
=
$parent
;
}
/**
* Create a new Cell
*
* @param mixed $pValue
* @param string $pDataType
* @param PHPExcel_Worksheet $pSheet
* @throws PHPExcel_Exception
*/
public
function
__construct
(
$pValue
=
NULL
,
$pDataType
=
NULL
,
PHPExcel_Worksheet
$pSheet
=
NULL
)
{
// Initialise cell value
$this
->
_value
=
$pValue
;
// Set worksheet cache
$this
->
_parent
=
$pSheet
->
getCellCacheController
();
// Set datatype?
if
(
$pDataType
!==
NULL
)
{
if
(
$pDataType
==
PHPExcel_Cell_DataType
::
TYPE_STRING2
)
$pDataType
=
PHPExcel_Cell_DataType
::
TYPE_STRING
;
$this
->
_dataType
=
$pDataType
;
}
else
{
if
(
!
self
::
getValueBinder
()
->
bindValue
(
$this
,
$pValue
))
{
throw
new
PHPExcel_Exception
(
"Value could not be bound to cell."
);
}
}
// set default index to cellXf
$this
->
_xfIndex
=
0
;
}
/**
* Get cell coordinate column
*
* @return string
*/
public
function
getColumn
()
{
return
$this
->
_parent
->
getCurrentColumn
();
}
/**
* Get cell coordinate row
*
* @return int
*/
public
function
getRow
()
{
return
$this
->
_parent
->
getCurrentRow
();
}
/**
* Get cell coordinate
*
* @return string
*/
public
function
getCoordinate
()
{
return
$this
->
_parent
->
getCurrentAddress
();
}
/**
* Get cell value
*
* @return mixed
*/
public
function
getValue
()
{
return
$this
->
_value
;
}
/**
* Get cell value with formatting
*
* @return string
*/
public
function
getFormattedValue
()
{
return
(
string
)
PHPExcel_Style_NumberFormat
::
toFormattedString
(
$this
->
getCalculatedValue
(),
$this
->
getWorksheet
()
->
getParent
()
->
getCellXfByIndex
(
$this
->
getXfIndex
())
->
getNumberFormat
()
->
getFormatCode
()
);
}
/**
* Set cell value
*
* Sets the value for a cell, automatically determining the datatype using the value binder
*
* @param mixed $pValue Value
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public
function
setValue
(
$pValue
=
NULL
)
{
if
(
!
self
::
getValueBinder
()
->
bindValue
(
$this
,
$pValue
))
{
throw
new
PHPExcel_Exception
(
"Value could not be bound to cell."
);
}
return
$this
;
}
/**
* Set the value for a cell, with the explicit data type passed to the method (bypassing any use of the value binder)
*
* @param mixed $pValue Value
* @param string $pDataType Explicit data type
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public
function
setValueExplicit
(
$pValue
=
NULL
,
$pDataType
=
PHPExcel_Cell_DataType
::
TYPE_STRING
)
{
// set the value according to data type
switch
(
$pDataType
)
{
case
PHPExcel_Cell_DataType
::
TYPE_NULL
:
$this
->
_value
=
$pValue
;
break
;
case
PHPExcel_Cell_DataType
::
TYPE_STRING2
:
$pDataType
=
PHPExcel_Cell_DataType
::
TYPE_STRING
;
case
PHPExcel_Cell_DataType
::
TYPE_STRING
:
case
PHPExcel_Cell_DataType
::
TYPE_INLINE
:
$this
->
_value
=
PHPExcel_Cell_DataType
::
checkString
(
$pValue
);
break
;
case
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
:
$this
->
_value
=
(
float
)
$pValue
;
break
;
case
PHPExcel_Cell_DataType
::
TYPE_FORMULA
:
$this
->
_value
=
(
string
)
$pValue
;
break
;
case
PHPExcel_Cell_DataType
::
TYPE_BOOL
:
$this
->
_value
=
(
bool
)
$pValue
;
break
;
case
PHPExcel_Cell_DataType
::
TYPE_ERROR
:
$this
->
_value
=
PHPExcel_Cell_DataType
::
checkErrorCode
(
$pValue
);
break
;
default
:
throw
new
PHPExcel_Exception
(
'Invalid datatype: '
.
$pDataType
);
break
;
}
// set the datatype
$this
->
_dataType
=
$pDataType
;
return
$this
->
notifyCacheController
();
}
/**
* Get calculated cell value
*
* @deprecated Since version 1.7.8 for planned changes to cell for array formula handling
*
* @param boolean $resetLog Whether the calculation engine logger should be reset or not
* @return mixed
* @throws PHPExcel_Exception
*/
public
function
getCalculatedValue
(
$resetLog
=
TRUE
)
{
//echo 'Cell '.$this->getCoordinate().' value is a '.$this->_dataType.' with a value of '.$this->getValue().PHP_EOL;
if
(
$this
->
_dataType
==
PHPExcel_Cell_DataType
::
TYPE_FORMULA
)
{
try
{
//echo 'Cell value for '.$this->getCoordinate().' is a formula: Calculating value'.PHP_EOL;
$result
=
PHPExcel_Calculation
::
getInstance
(
$this
->
getWorksheet
()
->
getParent
()
)
->
calculateCellValue
(
$this
,
$resetLog
);
//echo $this->getCoordinate().' calculation result is '.$result.PHP_EOL;
// We don't yet handle array returns
if
(
is_array
(
$result
))
{
while
(
is_array
(
$result
))
{
$result
=
array_pop
(
$result
);
}
}
}
catch
(
PHPExcel_Exception
$ex
)
{
if
((
$ex
->
getMessage
()
===
'Unable to access External Workbook'
)
&&
(
$this
->
_calculatedValue
!==
NULL
))
{
//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL;
return
$this
->
_calculatedValue
;
// Fallback for calculations referencing external files.
}
//echo 'Calculation Exception: '.$ex->getMessage().PHP_EOL;
$result
=
'#N/A'
;
throw
new
PHPExcel_Calculation_Exception
(
$this
->
getWorksheet
()
->
getTitle
()
.
'!'
.
$this
->
getCoordinate
()
.
' -> '
.
$ex
->
getMessage
()
);
}
if
(
$result
===
'#Not Yet Implemented'
)
{
//echo 'Returning fallback value of '.$this->_calculatedValue.' for cell '.$this->getCoordinate().PHP_EOL;
return
$this
->
_calculatedValue
;
// Fallback if calculation engine does not support the formula.
}
//echo 'Returning calculated value of '.$result.' for cell '.$this->getCoordinate().PHP_EOL;
return
$result
;
}
elseif
(
$this
->
_value
instanceof
PHPExcel_RichText
)
{
// echo 'Cell value for '.$this->getCoordinate().' is rich text: Returning data value of '.$this->_value.'<br />';
return
$this
->
_value
->
getPlainText
();
}
// echo 'Cell value for '.$this->getCoordinate().' is not a formula: Returning data value of '.$this->_value.'<br />';
return
$this
->
_value
;
}
/**
* Set old calculated value (cached)
*
* @param mixed $pValue Value
* @return PHPExcel_Cell
*/
public
function
setCalculatedValue
(
$pValue
=
NULL
)
{
if
(
$pValue
!==
NULL
)
{
$this
->
_calculatedValue
=
(
is_numeric
(
$pValue
))
?
(
float
)
$pValue
:
$pValue
;
}
return
$this
->
notifyCacheController
();
}
/**
* Get old calculated value (cached)
* This returns the value last calculated by MS Excel or whichever spreadsheet program was used to
* create the original spreadsheet file.
* Note that this value is not guaranteed to refelect the actual calculated value because it is
* possible that auto-calculation was disabled in the original spreadsheet, and underlying data
* values used by the formula have changed since it was last calculated.
*
* @return mixed
*/
public
function
getOldCalculatedValue
()
{
return
$this
->
_calculatedValue
;
}
/**
* Get cell data type
*
* @return string
*/
public
function
getDataType
()
{
return
$this
->
_dataType
;
}
/**
* Set cell data type
*
* @param string $pDataType
* @return PHPExcel_Cell
*/
public
function
setDataType
(
$pDataType
=
PHPExcel_Cell_DataType
::
TYPE_STRING
)
{
if
(
$pDataType
==
PHPExcel_Cell_DataType
::
TYPE_STRING2
)
$pDataType
=
PHPExcel_Cell_DataType
::
TYPE_STRING
;
$this
->
_dataType
=
$pDataType
;
return
$this
->
notifyCacheController
();
}
/**
* Identify if the cell contains a formula
*
* @return boolean
*/
public
function
isFormula
()
{
return
$this
->
_dataType
==
PHPExcel_Cell_DataType
::
TYPE_FORMULA
;
}
/**
* Does this cell contain Data validation rules?
*
* @return boolean
* @throws PHPExcel_Exception
*/
public
function
hasDataValidation
()
{
if
(
!
isset
(
$this
->
_parent
))
{
throw
new
PHPExcel_Exception
(
'Cannot check for data validation when cell is not bound to a worksheet'
);
}
return
$this
->
getWorksheet
()
->
dataValidationExists
(
$this
->
getCoordinate
());
}
/**
* Get Data validation rules
*
* @return PHPExcel_Cell_DataValidation
* @throws PHPExcel_Exception
*/
public
function
getDataValidation
()
{
if
(
!
isset
(
$this
->
_parent
))
{
throw
new
PHPExcel_Exception
(
'Cannot get data validation for cell that is not bound to a worksheet'
);
}
return
$this
->
getWorksheet
()
->
getDataValidation
(
$this
->
getCoordinate
());
}
/**
* Set Data validation rules
*
* @param PHPExcel_Cell_DataValidation $pDataValidation
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public
function
setDataValidation
(
PHPExcel_Cell_DataValidation
$pDataValidation
=
NULL
)
{
if
(
!
isset
(
$this
->
_parent
))
{
throw
new
PHPExcel_Exception
(
'Cannot set data validation for cell that is not bound to a worksheet'
);
}
$this
->
getWorksheet
()
->
setDataValidation
(
$this
->
getCoordinate
(),
$pDataValidation
);
return
$this
->
notifyCacheController
();
}
/**
* Does this cell contain a Hyperlink?
*
* @return boolean
* @throws PHPExcel_Exception
*/
public
function
hasHyperlink
()
{
if
(
!
isset
(
$this
->
_parent
))
{
throw
new
PHPExcel_Exception
(
'Cannot check for hyperlink when cell is not bound to a worksheet'
);
}
return
$this
->
getWorksheet
()
->
hyperlinkExists
(
$this
->
getCoordinate
());
}
/**
* Get Hyperlink
*
* @return PHPExcel_Cell_Hyperlink
* @throws PHPExcel_Exception
*/
public
function
getHyperlink
()
{
if
(
!
isset
(
$this
->
_parent
))
{
throw
new
PHPExcel_Exception
(
'Cannot get hyperlink for cell that is not bound to a worksheet'
);
}
return
$this
->
getWorksheet
()
->
getHyperlink
(
$this
->
getCoordinate
());
}
/**
* Set Hyperlink
*
* @param PHPExcel_Cell_Hyperlink $pHyperlink
* @return PHPExcel_Cell
* @throws PHPExcel_Exception
*/
public
function
setHyperlink
(
PHPExcel_Cell_Hyperlink
$pHyperlink
=
NULL
)
{
if
(
!
isset
(
$this
->
_parent
))
{
throw
new
PHPExcel_Exception
(
'Cannot set hyperlink for cell that is not bound to a worksheet'
);
}
$this
->
getWorksheet
()
->
setHyperlink
(
$this
->
getCoordinate
(),
$pHyperlink
);
return
$this
->
notifyCacheController
();
}
/**
* Get parent worksheet
*
* @return PHPExcel_CachedObjectStorage_CacheBase
*/
public
function
getParent
()
{
return
$this
->
_parent
;
}
/**
* Get parent worksheet
*
* @return PHPExcel_Worksheet
*/
public
function
getWorksheet
()
{
return
$this
->
_parent
->
getParent
();
}
/**
* Get cell style
*
* @return PHPExcel_Style
*/
public
function
getStyle
()
{
return
$this
->
getWorksheet
()
->
getParent
()
->
getCellXfByIndex
(
$this
->
getXfIndex
());
}
/**
* Re-bind parent
*
* @param PHPExcel_Worksheet $parent
* @return PHPExcel_Cell
*/
public
function
rebindParent
(
PHPExcel_Worksheet
$parent
)
{
$this
->
_parent
=
$parent
->
getCellCacheController
();
return
$this
->
notifyCacheController
();
}
/**
* Is cell in a specific range?
*
* @param string $pRange Cell range (e.g. A1:A1)
* @return boolean
*/
public
function
isInRange
(
$pRange
=
'A1:A1'
)
{
list
(
$rangeStart
,
$rangeEnd
)
=
self
::
rangeBoundaries
(
$pRange
);
// Translate properties
$myColumn
=
self
::
columnIndexFromString
(
$this
->
getColumn
());
$myRow
=
$this
->
getRow
();
// Verify if cell is in range
return
((
$rangeStart
[
0
]
<=
$myColumn
)
&&
(
$rangeEnd
[
0
]
>=
$myColumn
)
&&
(
$rangeStart
[
1
]
<=
$myRow
)
&&
(
$rangeEnd
[
1
]
>=
$myRow
)
);
}
/**
* Coordinate from string
*
* @param string $pCoordinateString
* @return array Array containing column and row (indexes 0 and 1)
* @throws PHPExcel_Exception
*/
public
static
function
coordinateFromString
(
$pCoordinateString
=
'A1'
)
{
if
(
preg_match
(
"/^([$]?[A-Z]
{
1,3})([$]?\d{1,7
}
)$/"
,
$pCoordinateString
,
$matches
))
{
return
array
(
$matches
[
1
],
$matches
[
2
]);
}
elseif
((
strpos
(
$pCoordinateString
,
':'
)
!==
FALSE
)
||
(
strpos
(
$pCoordinateString
,
','
)
!==
FALSE
))
{
throw
new
PHPExcel_Exception
(
'Cell coordinate string can not be a range of cells'
);
}
elseif
(
$pCoordinateString
==
''
)
{
throw
new
PHPExcel_Exception
(
'Cell coordinate can not be zero-length string'
);
}
throw
new
PHPExcel_Exception
(
'Invalid cell coordinate '
.
$pCoordinateString
);
}
/**
* Make string row, column or cell coordinate absolute
*
* @param string $pCoordinateString e.g. 'A' or '1' or 'A1'
* Note that this value can be a row or column reference as well as a cell reference
* @return string Absolute coordinate e.g. '$A' or '$1' or '$A$1'
* @throws PHPExcel_Exception
*/
public
static
function
absoluteReference
(
$pCoordinateString
=
'A1'
)
{
if
(
strpos
(
$pCoordinateString
,
':'
)
===
FALSE
&&
strpos
(
$pCoordinateString
,
','
)
===
FALSE
)
{
// Split out any worksheet name from the reference
$worksheet
=
''
;
$cellAddress
=
explode
(
'!'
,
$pCoordinateString
);
if
(
count
(
$cellAddress
)
>
1
)
{
list
(
$worksheet
,
$pCoordinateString
)
=
$cellAddress
;
}
if
(
$worksheet
>
''
)
$worksheet
.
=
'!'
;
// Create absolute coordinate
if
(
ctype_digit
(
$pCoordinateString
))
{
return
$worksheet
.
'$'
.
$pCoordinateString
;
}
elseif
(
ctype_alpha
(
$pCoordinateString
))
{
return
$worksheet
.
'$'
.
strtoupper
(
$pCoordinateString
);
}
return
$worksheet
.
self
::
absoluteCoordinate
(
$pCoordinateString
);
}
throw
new
PHPExcel_Exception
(
'Cell coordinate string can not be a range of cells'
);
}
/**
* Make string coordinate absolute
*
* @param string $pCoordinateString e.g. 'A1'
* @return string Absolute coordinate e.g. '$A$1'
* @throws PHPExcel_Exception
*/
public
static
function
absoluteCoordinate
(
$pCoordinateString
=
'A1'
)
{
if
(
strpos
(
$pCoordinateString
,
':'
)
===
FALSE
&&
strpos
(
$pCoordinateString
,
','
)
===
FALSE
)
{
// Split out any worksheet name from the coordinate
$worksheet
=
''
;
$cellAddress
=
explode
(
'!'
,
$pCoordinateString
);
if
(
count
(
$cellAddress
)
>
1
)
{
list
(
$worksheet
,
$pCoordinateString
)
=
$cellAddress
;
}
if
(
$worksheet
>
''
)
$worksheet
.
=
'!'
;
// Create absolute coordinate
list
(
$column
,
$row
)
=
self
::
coordinateFromString
(
$pCoordinateString
);
$column
=
ltrim
(
$column
,
'$'
);
$row
=
ltrim
(
$row
,
'$'
);
return
$worksheet
.
'$'
.
$column
.
'$'
.
$row
;
}
throw
new
PHPExcel_Exception
(
'Cell coordinate string can not be a range of cells'
);
}
/**
* Split range into coordinate strings
*
* @param string $pRange e.g. 'B4:D9' or 'B4:D9,H2:O11' or 'B4'
* @return array Array containg one or more arrays containing one or two coordinate strings
* e.g. array('B4','D9') or array(array('B4','D9'),array('H2','O11'))
* or array('B4')
*/
public
static
function
splitRange
(
$pRange
=
'A1:A1'
)
{
// Ensure $pRange is a valid range
if
(
empty
(
$pRange
))
{
$pRange
=
self
::
DEFAULT_RANGE
;
}
$exploded
=
explode
(
','
,
$pRange
);
$counter
=
count
(
$exploded
);
for
(
$i
=
0
;
$i
<
$counter
;
++
$i
)
{
$exploded
[
$i
]
=
explode
(
':'
,
$exploded
[
$i
]);
}
return
$exploded
;
}
/**
* Build range from coordinate strings
*
* @param array $pRange Array containg one or more arrays containing one or two coordinate strings
* @return string String representation of $pRange
* @throws PHPExcel_Exception
*/
public
static
function
buildRange
(
$pRange
)
{
// Verify range
if
(
!
is_array
(
$pRange
)
||
empty
(
$pRange
)
||
!
is_array
(
$pRange
[
0
]))
{
throw
new
PHPExcel_Exception
(
'Range does not contain any information'
);
}
// Build range
$imploded
=
array
();
$counter
=
count
(
$pRange
);
for
(
$i
=
0
;
$i
<
$counter
;
++
$i
)
{
$pRange
[
$i
]
=
implode
(
':'
,
$pRange
[
$i
]);
}
$imploded
=
implode
(
','
,
$pRange
);
return
$imploded
;
}
/**
* Calculate range boundaries
*
* @param string $pRange Cell range (e.g. A1:A1)
* @return array Range coordinates array(Start Cell, End Cell)
* where Start Cell and End Cell are arrays (Column Number, Row Number)
*/
public
static
function
rangeBoundaries
(
$pRange
=
'A1:A1'
)
{
// Ensure $pRange is a valid range
if
(
empty
(
$pRange
))
{
$pRange
=
self
::
DEFAULT_RANGE
;
}
// Uppercase coordinate
$pRange
=
strtoupper
(
$pRange
);
// Extract range
if
(
strpos
(
$pRange
,
':'
)
===
FALSE
)
{
$rangeA
=
$rangeB
=
$pRange
;
}
else
{
list
(
$rangeA
,
$rangeB
)
=
explode
(
':'
,
$pRange
);
}
// Calculate range outer borders
$rangeStart
=
self
::
coordinateFromString
(
$rangeA
);
$rangeEnd
=
self
::
coordinateFromString
(
$rangeB
);
// Translate column into index
$rangeStart
[
0
]
=
self
::
columnIndexFromString
(
$rangeStart
[
0
]);
$rangeEnd
[
0
]
=
self
::
columnIndexFromString
(
$rangeEnd
[
0
]);
return
array
(
$rangeStart
,
$rangeEnd
);
}
/**
* Calculate range dimension
*
* @param string $pRange Cell range (e.g. A1:A1)
* @return array Range dimension (width, height)
*/
public
static
function
rangeDimension
(
$pRange
=
'A1:A1'
)
{
// Calculate range outer borders
list
(
$rangeStart
,
$rangeEnd
)
=
self
::
rangeBoundaries
(
$pRange
);
return
array
(
(
$rangeEnd
[
0
]
-
$rangeStart
[
0
]
+
1
),
(
$rangeEnd
[
1
]
-
$rangeStart
[
1
]
+
1
)
);
}
/**
* Calculate range boundaries
*
* @param string $pRange Cell range (e.g. A1:A1)
* @return array Range coordinates array(Start Cell, End Cell)
* where Start Cell and End Cell are arrays (Column ID, Row Number)
*/
public
static
function
getRangeBoundaries
(
$pRange
=
'A1:A1'
)
{
// Ensure $pRange is a valid range
if
(
empty
(
$pRange
))
{
$pRange
=
self
::
DEFAULT_RANGE
;
}
// Uppercase coordinate
$pRange
=
strtoupper
(
$pRange
);
// Extract range
if
(
strpos
(
$pRange
,
':'
)
===
FALSE
)
{
$rangeA
=
$rangeB
=
$pRange
;
}
else
{
list
(
$rangeA
,
$rangeB
)
=
explode
(
':'
,
$pRange
);
}
return
array
(
self
::
coordinateFromString
(
$rangeA
),
self
::
coordinateFromString
(
$rangeB
));
}
/**
* Column index from string
*
* @param string $pString
* @return int Column index (base 1 !!!)
*/
public
static
function
columnIndexFromString
(
$pString
=
'A'
)
{
// Using a lookup cache adds a slight memory overhead, but boosts speed
// caching using a static within the method is faster than a class static,
// though it's additional memory overhead
static
$_indexCache
=
array
();
if
(
isset
(
$_indexCache
[
$pString
]))
return
$_indexCache
[
$pString
];
// It's surprising how costly the strtoupper() and ord() calls actually are, so we use a lookup array rather than use ord()
// and make it case insensitive to get rid of the strtoupper() as well. Because it's a static, there's no significant
// memory overhead either
static
$_columnLookup
=
array
(
'A'
=>
1
,
'B'
=>
2
,
'C'
=>
3
,
'D'
=>
4
,
'E'
=>
5
,
'F'
=>
6
,
'G'
=>
7
,
'H'
=>
8
,
'I'
=>
9
,
'J'
=>
10
,
'K'
=>
11
,
'L'
=>
12
,
'M'
=>
13
,
'N'
=>
14
,
'O'
=>
15
,
'P'
=>
16
,
'Q'
=>
17
,
'R'
=>
18
,
'S'
=>
19
,
'T'
=>
20
,
'U'
=>
21
,
'V'
=>
22
,
'W'
=>
23
,
'X'
=>
24
,
'Y'
=>
25
,
'Z'
=>
26
,
'a'
=>
1
,
'b'
=>
2
,
'c'
=>
3
,
'd'
=>
4
,
'e'
=>
5
,
'f'
=>
6
,
'g'
=>
7
,
'h'
=>
8
,
'i'
=>
9
,
'j'
=>
10
,
'k'
=>
11
,
'l'
=>
12
,
'm'
=>
13
,
'n'
=>
14
,
'o'
=>
15
,
'p'
=>
16
,
'q'
=>
17
,
'r'
=>
18
,
's'
=>
19
,
't'
=>
20
,
'u'
=>
21
,
'v'
=>
22
,
'w'
=>
23
,
'x'
=>
24
,
'y'
=>
25
,
'z'
=>
26
);
// We also use the language construct isset() rather than the more costly strlen() function to match the length of $pString
// for improved performance
if
(
isset
(
$pString
{
0
}))
{
if
(
!
isset
(
$pString
{
1
}))
{
$_indexCache
[
$pString
]
=
$_columnLookup
[
$pString
];
return
$_indexCache
[
$pString
];
}
elseif
(
!
isset
(
$pString
{
2
}))
{
$_indexCache
[
$pString
]
=
$_columnLookup
[
$pString
{
0
}]
*
26
+
$_columnLookup
[
$pString
{
1
}];
return
$_indexCache
[
$pString
];
}
elseif
(
!
isset
(
$pString
{
3
}))
{
$_indexCache
[
$pString
]
=
$_columnLookup
[
$pString
{
0
}]
*
676
+
$_columnLookup
[
$pString
{
1
}]
*
26
+
$_columnLookup
[
$pString
{
2
}];
return
$_indexCache
[
$pString
];
}
}
throw
new
PHPExcel_Exception
(
"Column string index can not be "
.
((
isset
(
$pString
{
0
}))
?
"longer than 3 characters"
:
"empty"
));
}
/**
* String from columnindex
*
* @param int $pColumnIndex Column index (base 0 !!!)
* @return string
*/
public
static
function
stringFromColumnIndex
(
$pColumnIndex
=
0
)
{
// Using a lookup cache adds a slight memory overhead, but boosts speed
// caching using a static within the method is faster than a class static,
// though it's additional memory overhead
static
$_indexCache
=
array
();
if
(
!
isset
(
$_indexCache
[
$pColumnIndex
]))
{
// Determine column string
if
(
$pColumnIndex
<
26
)
{
$_indexCache
[
$pColumnIndex
]
=
chr
(
65
+
$pColumnIndex
);
}
elseif
(
$pColumnIndex
<
702
)
{
$_indexCache
[
$pColumnIndex
]
=
chr
(
64
+
(
$pColumnIndex
/
26
))
.
chr
(
65
+
$pColumnIndex
%
26
);
}
else
{
$_indexCache
[
$pColumnIndex
]
=
chr
(
64
+
((
$pColumnIndex
-
26
)
/
676
))
.
chr
(
65
+
(((
$pColumnIndex
-
26
)
%
676
)
/
26
))
.
chr
(
65
+
$pColumnIndex
%
26
);
}
}
return
$_indexCache
[
$pColumnIndex
];
}
/**
* Extract all cell references in range
*
* @param string $pRange Range (e.g. A1 or A1:C10 or A1:E10 A20:E25)
* @return array Array containing single cell references
*/
public
static
function
extractAllCellReferencesInRange
(
$pRange
=
'A1'
)
{
// Returnvalue
$returnValue
=
array
();
// Explode spaces
$cellBlocks
=
explode
(
' '
,
str_replace
(
'$'
,
''
,
strtoupper
(
$pRange
)));
foreach
(
$cellBlocks
as
$cellBlock
)
{
// Single cell?
if
(
strpos
(
$cellBlock
,
':'
)
===
FALSE
&&
strpos
(
$cellBlock
,
','
)
===
FALSE
)
{
$returnValue
[]
=
$cellBlock
;
continue
;
}
// Range...
$ranges
=
self
::
splitRange
(
$cellBlock
);
foreach
(
$ranges
as
$range
)
{
// Single cell?
if
(
!
isset
(
$range
[
1
]))
{
$returnValue
[]
=
$range
[
0
];
continue
;
}
// Range...
list
(
$rangeStart
,
$rangeEnd
)
=
$range
;
sscanf
(
$rangeStart
,
'%[A-Z]%d'
,
$startCol
,
$startRow
);
sscanf
(
$rangeEnd
,
'%[A-Z]%d'
,
$endCol
,
$endRow
);
$endCol
++
;
// Current data
$currentCol
=
$startCol
;
$currentRow
=
$startRow
;
// Loop cells
while
(
$currentCol
!=
$endCol
)
{
while
(
$currentRow
<=
$endRow
)
{
$returnValue
[]
=
$currentCol
.
$currentRow
;
++
$currentRow
;
}
++
$currentCol
;
$currentRow
=
$startRow
;
}
}
}
// Sort the result by column and row
$sortKeys
=
array
();
foreach
(
array_unique
(
$returnValue
)
as
$coord
)
{
sscanf
(
$coord
,
'%[A-Z]%d'
,
$column
,
$row
);
$sortKeys
[
sprintf
(
'%3s%09d'
,
$column
,
$row
)]
=
$coord
;
}
ksort
(
$sortKeys
);
// Return value
return
array_values
(
$sortKeys
);
}
/**
* Compare 2 cells
*
* @param PHPExcel_Cell $a Cell a
* @param PHPExcel_Cell $b Cell b
* @return int Result of comparison (always -1 or 1, never zero!)
*/
public
static
function
compareCells
(
PHPExcel_Cell
$a
,
PHPExcel_Cell
$b
)
{
if
(
$a
->
getRow
()
<
$b
->
getRow
())
{
return
-
1
;
}
elseif
(
$a
->
getRow
()
>
$b
->
getRow
())
{
return
1
;
}
elseif
(
self
::
columnIndexFromString
(
$a
->
getColumn
())
<
self
::
columnIndexFromString
(
$b
->
getColumn
()))
{
return
-
1
;
}
else
{
return
1
;
}
}
/**
* Get value binder to use
*
* @return PHPExcel_Cell_IValueBinder
*/
public
static
function
getValueBinder
()
{
if
(
self
::
$_valueBinder
===
NULL
)
{
self
::
$_valueBinder
=
new
PHPExcel_Cell_DefaultValueBinder
();
}
return
self
::
$_valueBinder
;
}
/**
* Set value binder to use
*
* @param PHPExcel_Cell_IValueBinder $binder
* @throws PHPExcel_Exception
*/
public
static
function
setValueBinder
(
PHPExcel_Cell_IValueBinder
$binder
=
NULL
)
{
if
(
$binder
===
NULL
)
{
throw
new
PHPExcel_Exception
(
"A PHPExcel_Cell_IValueBinder is required for PHPExcel to function correctly."
);
}
self
::
$_valueBinder
=
$binder
;
}
/**
* Implement PHP __clone to create a deep clone, not just a shallow copy.
*/
public
function
__clone
()
{
$vars
=
get_object_vars
(
$this
);
foreach
(
$vars
as
$key
=>
$value
)
{
if
((
is_object
(
$value
))
&&
(
$key
!=
'_parent'
))
{
$this
->
$key
=
clone
$value
;
}
else
{
$this
->
$key
=
$value
;
}
}
}
/**
* Get index to cellXf
*
* @return int
*/
public
function
getXfIndex
()
{
return
$this
->
_xfIndex
;
}
/**
* Set index to cellXf
*
* @param int $pValue
* @return PHPExcel_Cell
*/
public
function
setXfIndex
(
$pValue
=
0
)
{
$this
->
_xfIndex
=
$pValue
;
return
$this
->
notifyCacheController
();
}
/**
* @deprecated Since version 1.7.8 for planned changes to cell for array formula handling
*/
public
function
setFormulaAttributes
(
$pAttributes
)
{
$this
->
_formulaAttributes
=
$pAttributes
;
return
$this
;
}
/**
* @deprecated Since version 1.7.8 for planned changes to cell for array formula handling
*/
public
function
getFormulaAttributes
()
{
return
$this
->
_formulaAttributes
;
}
/**
* Convert to string
*
* @return string
*/
public
function
__toString
()
{
return
(
string
)
$this
->
getValue
();
}
}
lib/Classes/PHPExcel/Cell/AdvancedValueBinder.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/** PHPExcel root directory */
if
(
!
defined
(
'PHPEXCEL_ROOT'
))
{
/**
* @ignore
*/
define
(
'PHPEXCEL_ROOT'
,
dirname
(
__FILE__
)
.
'/../../'
);
require
(
PHPEXCEL_ROOT
.
'PHPExcel/Autoloader.php'
);
}
/**
* PHPExcel_Cell_AdvancedValueBinder
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Cell_AdvancedValueBinder
extends
PHPExcel_Cell_DefaultValueBinder
implements
PHPExcel_Cell_IValueBinder
{
/**
* Bind value to a cell
*
* @param PHPExcel_Cell $cell Cell to bind value to
* @param mixed $value Value to bind in cell
* @return boolean
*/
public
function
bindValue
(
PHPExcel_Cell
$cell
,
$value
=
null
)
{
// sanitize UTF-8 strings
if
(
is_string
(
$value
))
{
$value
=
PHPExcel_Shared_String
::
SanitizeUTF8
(
$value
);
}
// Find out data type
$dataType
=
parent
::
dataTypeForValue
(
$value
);
// Style logic - strings
if
(
$dataType
===
PHPExcel_Cell_DataType
::
TYPE_STRING
&&
!
$value
instanceof
PHPExcel_RichText
)
{
// Test for booleans using locale-setting
if
(
$value
==
PHPExcel_Calculation
::
getTRUE
())
{
$cell
->
setValueExplicit
(
TRUE
,
PHPExcel_Cell_DataType
::
TYPE_BOOL
);
return
true
;
}
elseif
(
$value
==
PHPExcel_Calculation
::
getFALSE
())
{
$cell
->
setValueExplicit
(
FALSE
,
PHPExcel_Cell_DataType
::
TYPE_BOOL
);
return
true
;
}
// Check for number in scientific format
if
(
preg_match
(
'/^'
.
PHPExcel_Calculation
::
CALCULATION_REGEXP_NUMBER
.
'$/'
,
$value
))
{
$cell
->
setValueExplicit
(
(
float
)
$value
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
return
true
;
}
// Check for fraction
if
(
preg_match
(
'/^([+-]?)\s*([0-9]+)\s?\/\s*([0-9]+)$/'
,
$value
,
$matches
))
{
// Convert value to number
$value
=
$matches
[
2
]
/
$matches
[
3
];
if
(
$matches
[
1
]
==
'-'
)
$value
=
0
-
$value
;
$cell
->
setValueExplicit
(
(
float
)
$value
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
'??/??'
);
return
true
;
}
elseif
(
preg_match
(
'/^([+-]?)([0-9]*) +([0-9]*)\s?\/\s*([0-9]*)$/'
,
$value
,
$matches
))
{
// Convert value to number
$value
=
$matches
[
2
]
+
(
$matches
[
3
]
/
$matches
[
4
]);
if
(
$matches
[
1
]
==
'-'
)
$value
=
0
-
$value
;
$cell
->
setValueExplicit
(
(
float
)
$value
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
'# ??/??'
);
return
true
;
}
// Check for percentage
if
(
preg_match
(
'/^\-?[0-9]*\.?[0-9]*\s?\%$/'
,
$value
))
{
// Convert value to number
$value
=
(
float
)
str_replace
(
'%'
,
''
,
$value
)
/
100
;
$cell
->
setValueExplicit
(
$value
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
PHPExcel_Style_NumberFormat
::
FORMAT_PERCENTAGE_00
);
return
true
;
}
// Check for currency
$currencyCode
=
PHPExcel_Shared_String
::
getCurrencyCode
();
$decimalSeparator
=
PHPExcel_Shared_String
::
getDecimalSeparator
();
$thousandsSeparator
=
PHPExcel_Shared_String
::
getThousandsSeparator
();
if
(
preg_match
(
'/^'
.
preg_quote
(
$currencyCode
)
.
' *(\d{1,3}('
.
preg_quote
(
$thousandsSeparator
)
.
'\d{3})*|(\d+))('
.
preg_quote
(
$decimalSeparator
)
.
'\d{2})?$/'
,
$value
))
{
// Convert value to number
$value
=
(
float
)
trim
(
str_replace
(
array
(
$currencyCode
,
$thousandsSeparator
,
$decimalSeparator
),
array
(
''
,
''
,
'.'
),
$value
));
$cell
->
setValueExplicit
(
$value
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
str_replace
(
'$'
,
$currencyCode
,
PHPExcel_Style_NumberFormat
::
FORMAT_CURRENCY_USD_SIMPLE
)
);
return
true
;
}
elseif
(
preg_match
(
'/^\$ *(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$/'
,
$value
))
{
// Convert value to number
$value
=
(
float
)
trim
(
str_replace
(
array
(
'$'
,
','
),
''
,
$value
));
$cell
->
setValueExplicit
(
$value
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
PHPExcel_Style_NumberFormat
::
FORMAT_CURRENCY_USD_SIMPLE
);
return
true
;
}
// Check for time without seconds e.g. '9:45', '09:45'
if
(
preg_match
(
'/^(\d|[0-1]\d|2[0-3]):[0-5]\d$/'
,
$value
))
{
// Convert value to number
list
(
$h
,
$m
)
=
explode
(
':'
,
$value
);
$days
=
$h
/
24
+
$m
/
1440
;
$cell
->
setValueExplicit
(
$days
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
PHPExcel_Style_NumberFormat
::
FORMAT_DATE_TIME3
);
return
true
;
}
// Check for time with seconds '9:45:59', '09:45:59'
if
(
preg_match
(
'/^(\d|[0-1]\d|2[0-3]):[0-5]\d:[0-5]\d$/'
,
$value
))
{
// Convert value to number
list
(
$h
,
$m
,
$s
)
=
explode
(
':'
,
$value
);
$days
=
$h
/
24
+
$m
/
1440
+
$s
/
86400
;
// Convert value to number
$cell
->
setValueExplicit
(
$days
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
PHPExcel_Style_NumberFormat
::
FORMAT_DATE_TIME4
);
return
true
;
}
// Check for datetime, e.g. '2008-12-31', '2008-12-31 15:59', '2008-12-31 15:59:10'
if
((
$d
=
PHPExcel_Shared_Date
::
stringToExcel
(
$value
))
!==
false
)
{
// Convert value to number
$cell
->
setValueExplicit
(
$d
,
PHPExcel_Cell_DataType
::
TYPE_NUMERIC
);
// Determine style. Either there is a time part or not. Look for ':'
if
(
strpos
(
$value
,
':'
)
!==
false
)
{
$formatCode
=
'yyyy-mm-dd h:mm'
;
}
else
{
$formatCode
=
'yyyy-mm-dd'
;
}
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getNumberFormat
()
->
setFormatCode
(
$formatCode
);
return
true
;
}
// Check for newline character "\n"
if
(
strpos
(
$value
,
"
\n
"
)
!==
FALSE
)
{
$value
=
PHPExcel_Shared_String
::
SanitizeUTF8
(
$value
);
$cell
->
setValueExplicit
(
$value
,
PHPExcel_Cell_DataType
::
TYPE_STRING
);
// Set style
$cell
->
getWorksheet
()
->
getStyle
(
$cell
->
getCoordinate
()
)
->
getAlignment
()
->
setWrapText
(
TRUE
);
return
true
;
}
}
// Not bound yet? Use parent...
return
parent
::
bindValue
(
$cell
,
$value
);
}
}
lib/Classes/PHPExcel/Cell/DataType.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Cell_DataType
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Cell_DataType
{
/* Data types */
const
TYPE_STRING2
=
'str'
;
const
TYPE_STRING
=
's'
;
const
TYPE_FORMULA
=
'f'
;
const
TYPE_NUMERIC
=
'n'
;
const
TYPE_BOOL
=
'b'
;
const
TYPE_NULL
=
'null'
;
const
TYPE_INLINE
=
'inlineStr'
;
const
TYPE_ERROR
=
'e'
;
/**
* List of error codes
*
* @var array
*/
private
static
$_errorCodes
=
array
(
'#NULL!'
=>
0
,
'#DIV/0!'
=>
1
,
'#VALUE!'
=>
2
,
'#REF!'
=>
3
,
'#NAME?'
=>
4
,
'#NUM!'
=>
5
,
'#N/A'
=>
6
);
/**
* Get list of error codes
*
* @return array
*/
public
static
function
getErrorCodes
()
{
return
self
::
$_errorCodes
;
}
/**
* DataType for value
*
* @deprecated Replaced by PHPExcel_Cell_IValueBinder infrastructure, will be removed in version 1.8.0
* @param mixed $pValue
* @return string
*/
public
static
function
dataTypeForValue
(
$pValue
=
null
)
{
return
PHPExcel_Cell_DefaultValueBinder
::
dataTypeForValue
(
$pValue
);
}
/**
* Check a string that it satisfies Excel requirements
*
* @param mixed Value to sanitize to an Excel string
* @return mixed Sanitized value
*/
public
static
function
checkString
(
$pValue
=
null
)
{
if
(
$pValue
instanceof
PHPExcel_RichText
)
{
// TODO: Sanitize Rich-Text string (max. character count is 32,767)
return
$pValue
;
}
// string must never be longer than 32,767 characters, truncate if necessary
$pValue
=
PHPExcel_Shared_String
::
Substring
(
$pValue
,
0
,
32767
);
// we require that newline is represented as "\n" in core, not as "\r\n" or "\r"
$pValue
=
str_replace
(
array
(
"
\r\n
"
,
"
\r
"
),
"
\n
"
,
$pValue
);
return
$pValue
;
}
/**
* Check a value that it is a valid error code
*
* @param mixed Value to sanitize to an Excel error code
* @return string Sanitized value
*/
public
static
function
checkErrorCode
(
$pValue
=
null
)
{
$pValue
=
(
string
)
$pValue
;
if
(
!
array_key_exists
(
$pValue
,
self
::
$_errorCodes
)
)
{
$pValue
=
'#NULL!'
;
}
return
$pValue
;
}
}
lib/Classes/PHPExcel/Cell/DataValidation.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Cell_DataValidation
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Cell_DataValidation
{
/* Data validation types */
const
TYPE_NONE
=
'none'
;
const
TYPE_CUSTOM
=
'custom'
;
const
TYPE_DATE
=
'date'
;
const
TYPE_DECIMAL
=
'decimal'
;
const
TYPE_LIST
=
'list'
;
const
TYPE_TEXTLENGTH
=
'textLength'
;
const
TYPE_TIME
=
'time'
;
const
TYPE_WHOLE
=
'whole'
;
/* Data validation error styles */
const
STYLE_STOP
=
'stop'
;
const
STYLE_WARNING
=
'warning'
;
const
STYLE_INFORMATION
=
'information'
;
/* Data validation operators */
const
OPERATOR_BETWEEN
=
'between'
;
const
OPERATOR_EQUAL
=
'equal'
;
const
OPERATOR_GREATERTHAN
=
'greaterThan'
;
const
OPERATOR_GREATERTHANOREQUAL
=
'greaterThanOrEqual'
;
const
OPERATOR_LESSTHAN
=
'lessThan'
;
const
OPERATOR_LESSTHANOREQUAL
=
'lessThanOrEqual'
;
const
OPERATOR_NOTBETWEEN
=
'notBetween'
;
const
OPERATOR_NOTEQUAL
=
'notEqual'
;
/**
* Formula 1
*
* @var string
*/
private
$_formula1
;
/**
* Formula 2
*
* @var string
*/
private
$_formula2
;
/**
* Type
*
* @var string
*/
private
$_type
=
PHPExcel_Cell_DataValidation
::
TYPE_NONE
;
/**
* Error style
*
* @var string
*/
private
$_errorStyle
=
PHPExcel_Cell_DataValidation
::
STYLE_STOP
;
/**
* Operator
*
* @var string
*/
private
$_operator
;
/**
* Allow Blank
*
* @var boolean
*/
private
$_allowBlank
;
/**
* Show DropDown
*
* @var boolean
*/
private
$_showDropDown
;
/**
* Show InputMessage
*
* @var boolean
*/
private
$_showInputMessage
;
/**
* Show ErrorMessage
*
* @var boolean
*/
private
$_showErrorMessage
;
/**
* Error title
*
* @var string
*/
private
$_errorTitle
;
/**
* Error
*
* @var string
*/
private
$_error
;
/**
* Prompt title
*
* @var string
*/
private
$_promptTitle
;
/**
* Prompt
*
* @var string
*/
private
$_prompt
;
/**
* Create a new PHPExcel_Cell_DataValidation
*/
public
function
__construct
()
{
// Initialise member variables
$this
->
_formula1
=
''
;
$this
->
_formula2
=
''
;
$this
->
_type
=
PHPExcel_Cell_DataValidation
::
TYPE_NONE
;
$this
->
_errorStyle
=
PHPExcel_Cell_DataValidation
::
STYLE_STOP
;
$this
->
_operator
=
''
;
$this
->
_allowBlank
=
FALSE
;
$this
->
_showDropDown
=
FALSE
;
$this
->
_showInputMessage
=
FALSE
;
$this
->
_showErrorMessage
=
FALSE
;
$this
->
_errorTitle
=
''
;
$this
->
_error
=
''
;
$this
->
_promptTitle
=
''
;
$this
->
_prompt
=
''
;
}
/**
* Get Formula 1
*
* @return string
*/
public
function
getFormula1
()
{
return
$this
->
_formula1
;
}
/**
* Set Formula 1
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setFormula1
(
$value
=
''
)
{
$this
->
_formula1
=
$value
;
return
$this
;
}
/**
* Get Formula 2
*
* @return string
*/
public
function
getFormula2
()
{
return
$this
->
_formula2
;
}
/**
* Set Formula 2
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setFormula2
(
$value
=
''
)
{
$this
->
_formula2
=
$value
;
return
$this
;
}
/**
* Get Type
*
* @return string
*/
public
function
getType
()
{
return
$this
->
_type
;
}
/**
* Set Type
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setType
(
$value
=
PHPExcel_Cell_DataValidation
::
TYPE_NONE
)
{
$this
->
_type
=
$value
;
return
$this
;
}
/**
* Get Error style
*
* @return string
*/
public
function
getErrorStyle
()
{
return
$this
->
_errorStyle
;
}
/**
* Set Error style
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setErrorStyle
(
$value
=
PHPExcel_Cell_DataValidation
::
STYLE_STOP
)
{
$this
->
_errorStyle
=
$value
;
return
$this
;
}
/**
* Get Operator
*
* @return string
*/
public
function
getOperator
()
{
return
$this
->
_operator
;
}
/**
* Set Operator
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setOperator
(
$value
=
''
)
{
$this
->
_operator
=
$value
;
return
$this
;
}
/**
* Get Allow Blank
*
* @return boolean
*/
public
function
getAllowBlank
()
{
return
$this
->
_allowBlank
;
}
/**
* Set Allow Blank
*
* @param boolean $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setAllowBlank
(
$value
=
false
)
{
$this
->
_allowBlank
=
$value
;
return
$this
;
}
/**
* Get Show DropDown
*
* @return boolean
*/
public
function
getShowDropDown
()
{
return
$this
->
_showDropDown
;
}
/**
* Set Show DropDown
*
* @param boolean $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setShowDropDown
(
$value
=
false
)
{
$this
->
_showDropDown
=
$value
;
return
$this
;
}
/**
* Get Show InputMessage
*
* @return boolean
*/
public
function
getShowInputMessage
()
{
return
$this
->
_showInputMessage
;
}
/**
* Set Show InputMessage
*
* @param boolean $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setShowInputMessage
(
$value
=
false
)
{
$this
->
_showInputMessage
=
$value
;
return
$this
;
}
/**
* Get Show ErrorMessage
*
* @return boolean
*/
public
function
getShowErrorMessage
()
{
return
$this
->
_showErrorMessage
;
}
/**
* Set Show ErrorMessage
*
* @param boolean $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setShowErrorMessage
(
$value
=
false
)
{
$this
->
_showErrorMessage
=
$value
;
return
$this
;
}
/**
* Get Error title
*
* @return string
*/
public
function
getErrorTitle
()
{
return
$this
->
_errorTitle
;
}
/**
* Set Error title
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setErrorTitle
(
$value
=
''
)
{
$this
->
_errorTitle
=
$value
;
return
$this
;
}
/**
* Get Error
*
* @return string
*/
public
function
getError
()
{
return
$this
->
_error
;
}
/**
* Set Error
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setError
(
$value
=
''
)
{
$this
->
_error
=
$value
;
return
$this
;
}
/**
* Get Prompt title
*
* @return string
*/
public
function
getPromptTitle
()
{
return
$this
->
_promptTitle
;
}
/**
* Set Prompt title
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setPromptTitle
(
$value
=
''
)
{
$this
->
_promptTitle
=
$value
;
return
$this
;
}
/**
* Get Prompt
*
* @return string
*/
public
function
getPrompt
()
{
return
$this
->
_prompt
;
}
/**
* Set Prompt
*
* @param string $value
* @return PHPExcel_Cell_DataValidation
*/
public
function
setPrompt
(
$value
=
''
)
{
$this
->
_prompt
=
$value
;
return
$this
;
}
/**
* Get hash code
*
* @return string Hash code
*/
public
function
getHashCode
()
{
return
md5
(
$this
->
_formula1
.
$this
->
_formula2
.
$this
->
_type
=
PHPExcel_Cell_DataValidation
::
TYPE_NONE
.
$this
->
_errorStyle
=
PHPExcel_Cell_DataValidation
::
STYLE_STOP
.
$this
->
_operator
.
(
$this
->
_allowBlank
?
't'
:
'f'
)
.
(
$this
->
_showDropDown
?
't'
:
'f'
)
.
(
$this
->
_showInputMessage
?
't'
:
'f'
)
.
(
$this
->
_showErrorMessage
?
't'
:
'f'
)
.
$this
->
_errorTitle
.
$this
->
_error
.
$this
->
_promptTitle
.
$this
->
_prompt
.
__CLASS__
);
}
/**
* Implement PHP __clone to create a deep clone, not just a shallow copy.
*/
public
function
__clone
()
{
$vars
=
get_object_vars
(
$this
);
foreach
(
$vars
as
$key
=>
$value
)
{
if
(
is_object
(
$value
))
{
$this
->
$key
=
clone
$value
;
}
else
{
$this
->
$key
=
$value
;
}
}
}
}
lib/Classes/PHPExcel/Cell/DefaultValueBinder.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/** PHPExcel root directory */
if
(
!
defined
(
'PHPEXCEL_ROOT'
))
{
/**
* @ignore
*/
define
(
'PHPEXCEL_ROOT'
,
dirname
(
__FILE__
)
.
'/../../'
);
require
(
PHPEXCEL_ROOT
.
'PHPExcel/Autoloader.php'
);
}
/**
* PHPExcel_Cell_DefaultValueBinder
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Cell_DefaultValueBinder
implements
PHPExcel_Cell_IValueBinder
{
/**
* Bind value to a cell
*
* @param PHPExcel_Cell $cell Cell to bind value to
* @param mixed $value Value to bind in cell
* @return boolean
*/
public
function
bindValue
(
PHPExcel_Cell
$cell
,
$value
=
null
)
{
// sanitize UTF-8 strings
if
(
is_string
(
$value
))
{
$value
=
PHPExcel_Shared_String
::
SanitizeUTF8
(
$value
);
}
// Set value explicit
$cell
->
setValueExplicit
(
$value
,
self
::
dataTypeForValue
(
$value
)
);
// Done!
return
TRUE
;
}
/**
* DataType for value
*
* @param mixed $pValue
* @return string
*/
public
static
function
dataTypeForValue
(
$pValue
=
null
)
{
// Match the value against a few data types
if
(
is_null
(
$pValue
))
{
return
PHPExcel_Cell_DataType
::
TYPE_NULL
;
}
elseif
(
$pValue
===
''
)
{
return
PHPExcel_Cell_DataType
::
TYPE_STRING
;
}
elseif
(
is_bool
(
$pValue
))
{
return
PHPExcel_Cell_DataType
::
TYPE_BOOL
;
}
else
{
return
PHPExcel_Cell_DataType
::
TYPE_STRING
;
}
/*
elseif ($pValue instanceof PHPExcel_RichText) {
return PHPExcel_Cell_DataType::TYPE_INLINE;
} elseif ($pValue{0} === '=' && strlen($pValue) > 1) {
return PHPExcel_Cell_DataType::TYPE_FORMULA;
} elseif (is_float($pValue) || is_int($pValue)) {
return PHPExcel_Cell_DataType::TYPE_NUMERIC;
} elseif (preg_match('/^\-?([0-9]+\\.?[0-9]*|[0-9]*\\.?[0-9]+)$/', $pValue)) {
return PHPExcel_Cell_DataType::TYPE_NUMERIC;
} elseif (is_string($pValue) && array_key_exists($pValue, PHPExcel_Cell_DataType::getErrorCodes())) {
return PHPExcel_Cell_DataType::TYPE_ERROR;
}
*/
}
}
lib/Classes/PHPExcel/Cell/Hyperlink.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Cell_Hyperlink
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Cell_Hyperlink
{
/**
* URL to link the cell to
*
* @var string
*/
private
$_url
;
/**
* Tooltip to display on the hyperlink
*
* @var string
*/
private
$_tooltip
;
/**
* Create a new PHPExcel_Cell_Hyperlink
*
* @param string $pUrl Url to link the cell to
* @param string $pTooltip Tooltip to display on the hyperlink
*/
public
function
__construct
(
$pUrl
=
''
,
$pTooltip
=
''
)
{
// Initialise member variables
$this
->
_url
=
$pUrl
;
$this
->
_tooltip
=
$pTooltip
;
}
/**
* Get URL
*
* @return string
*/
public
function
getUrl
()
{
return
$this
->
_url
;
}
/**
* Set URL
*
* @param string $value
* @return PHPExcel_Cell_Hyperlink
*/
public
function
setUrl
(
$value
=
''
)
{
$this
->
_url
=
$value
;
return
$this
;
}
/**
* Get tooltip
*
* @return string
*/
public
function
getTooltip
()
{
return
$this
->
_tooltip
;
}
/**
* Set tooltip
*
* @param string $value
* @return PHPExcel_Cell_Hyperlink
*/
public
function
setTooltip
(
$value
=
''
)
{
$this
->
_tooltip
=
$value
;
return
$this
;
}
/**
* Is this hyperlink internal? (to another worksheet)
*
* @return boolean
*/
public
function
isInternal
()
{
return
strpos
(
$this
->
_url
,
'sheet://'
)
!==
false
;
}
/**
* Get hash code
*
* @return string Hash code
*/
public
function
getHashCode
()
{
return
md5
(
$this
->
_url
.
$this
->
_tooltip
.
__CLASS__
);
}
}
lib/Classes/PHPExcel/Cell/IValueBinder.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Cell_IValueBinder
*
* @category PHPExcel
* @package PHPExcel_Cell
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
interface
PHPExcel_Cell_IValueBinder
{
/**
* Bind value to a cell
*
* @param PHPExcel_Cell $cell Cell to bind value to
* @param mixed $value Value to bind in cell
* @return boolean
*/
public
function
bindValue
(
PHPExcel_Cell
$cell
,
$value
=
NULL
);
}
lib/Classes/PHPExcel/Chart.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart
{
/**
* Chart Name
*
* @var string
*/
private
$_name
=
''
;
/**
* Worksheet
*
* @var PHPExcel_Worksheet
*/
private
$_worksheet
=
null
;
/**
* Chart Title
*
* @var PHPExcel_Chart_Title
*/
private
$_title
=
null
;
/**
* Chart Legend
*
* @var PHPExcel_Chart_Legend
*/
private
$_legend
=
null
;
/**
* X-Axis Label
*
* @var PHPExcel_Chart_Title
*/
private
$_xAxisLabel
=
null
;
/**
* Y-Axis Label
*
* @var PHPExcel_Chart_Title
*/
private
$_yAxisLabel
=
null
;
/**
* Chart Plot Area
*
* @var PHPExcel_Chart_PlotArea
*/
private
$_plotArea
=
null
;
/**
* Plot Visible Only
*
* @var boolean
*/
private
$_plotVisibleOnly
=
true
;
/**
* Display Blanks as
*
* @var string
*/
private
$_displayBlanksAs
=
'0'
;
/**
* Top-Left Cell Position
*
* @var string
*/
private
$_topLeftCellRef
=
'A1'
;
/**
* Top-Left X-Offset
*
* @var integer
*/
private
$_topLeftXOffset
=
0
;
/**
* Top-Left Y-Offset
*
* @var integer
*/
private
$_topLeftYOffset
=
0
;
/**
* Bottom-Right Cell Position
*
* @var string
*/
private
$_bottomRightCellRef
=
'A1'
;
/**
* Bottom-Right X-Offset
*
* @var integer
*/
private
$_bottomRightXOffset
=
10
;
/**
* Bottom-Right Y-Offset
*
* @var integer
*/
private
$_bottomRightYOffset
=
10
;
/**
* Create a new PHPExcel_Chart
*/
public
function
__construct
(
$name
,
PHPExcel_Chart_Title
$title
=
null
,
PHPExcel_Chart_Legend
$legend
=
null
,
PHPExcel_Chart_PlotArea
$plotArea
=
null
,
$plotVisibleOnly
=
true
,
$displayBlanksAs
=
'0'
,
PHPExcel_Chart_Title
$xAxisLabel
=
null
,
PHPExcel_Chart_Title
$yAxisLabel
=
null
)
{
$this
->
_name
=
$name
;
$this
->
_title
=
$title
;
$this
->
_legend
=
$legend
;
$this
->
_xAxisLabel
=
$xAxisLabel
;
$this
->
_yAxisLabel
=
$yAxisLabel
;
$this
->
_plotArea
=
$plotArea
;
$this
->
_plotVisibleOnly
=
$plotVisibleOnly
;
$this
->
_displayBlanksAs
=
$displayBlanksAs
;
}
/**
* Get Name
*
* @return string
*/
public
function
getName
()
{
return
$this
->
_name
;
}
/**
* Get Worksheet
*
* @return PHPExcel_Worksheet
*/
public
function
getWorksheet
()
{
return
$this
->
_worksheet
;
}
/**
* Set Worksheet
*
* @param PHPExcel_Worksheet $pValue
* @throws PHPExcel_Chart_Exception
* @return PHPExcel_Chart
*/
public
function
setWorksheet
(
PHPExcel_Worksheet
$pValue
=
null
)
{
$this
->
_worksheet
=
$pValue
;
return
$this
;
}
/**
* Get Title
*
* @return PHPExcel_Chart_Title
*/
public
function
getTitle
()
{
return
$this
->
_title
;
}
/**
* Set Title
*
* @param PHPExcel_Chart_Title $title
* @return PHPExcel_Chart
*/
public
function
setTitle
(
PHPExcel_Chart_Title
$title
)
{
$this
->
_title
=
$title
;
return
$this
;
}
/**
* Get Legend
*
* @return PHPExcel_Chart_Legend
*/
public
function
getLegend
()
{
return
$this
->
_legend
;
}
/**
* Set Legend
*
* @param PHPExcel_Chart_Legend $legend
* @return PHPExcel_Chart
*/
public
function
setLegend
(
PHPExcel_Chart_Legend
$legend
)
{
$this
->
_legend
=
$legend
;
return
$this
;
}
/**
* Get X-Axis Label
*
* @return PHPExcel_Chart_Title
*/
public
function
getXAxisLabel
()
{
return
$this
->
_xAxisLabel
;
}
/**
* Set X-Axis Label
*
* @param PHPExcel_Chart_Title $label
* @return PHPExcel_Chart
*/
public
function
setXAxisLabel
(
PHPExcel_Chart_Title
$label
)
{
$this
->
_xAxisLabel
=
$label
;
return
$this
;
}
/**
* Get Y-Axis Label
*
* @return PHPExcel_Chart_Title
*/
public
function
getYAxisLabel
()
{
return
$this
->
_yAxisLabel
;
}
/**
* Set Y-Axis Label
*
* @param PHPExcel_Chart_Title $label
* @return PHPExcel_Chart
*/
public
function
setYAxisLabel
(
PHPExcel_Chart_Title
$label
)
{
$this
->
_yAxisLabel
=
$label
;
return
$this
;
}
/**
* Get Plot Area
*
* @return PHPExcel_Chart_PlotArea
*/
public
function
getPlotArea
()
{
return
$this
->
_plotArea
;
}
/**
* Get Plot Visible Only
*
* @return boolean
*/
public
function
getPlotVisibleOnly
()
{
return
$this
->
_plotVisibleOnly
;
}
/**
* Set Plot Visible Only
*
* @param boolean $plotVisibleOnly
* @return PHPExcel_Chart
*/
public
function
setPlotVisibleOnly
(
$plotVisibleOnly
=
true
)
{
$this
->
_plotVisibleOnly
=
$plotVisibleOnly
;
return
$this
;
}
/**
* Get Display Blanks as
*
* @return string
*/
public
function
getDisplayBlanksAs
()
{
return
$this
->
_displayBlanksAs
;
}
/**
* Set Display Blanks as
*
* @param string $displayBlanksAs
* @return PHPExcel_Chart
*/
public
function
setDisplayBlanksAs
(
$displayBlanksAs
=
'0'
)
{
$this
->
_displayBlanksAs
=
$displayBlanksAs
;
}
/**
* Set the Top Left position for the chart
*
* @param string $cell
* @param integer $xOffset
* @param integer $yOffset
* @return PHPExcel_Chart
*/
public
function
setTopLeftPosition
(
$cell
,
$xOffset
=
null
,
$yOffset
=
null
)
{
$this
->
_topLeftCellRef
=
$cell
;
if
(
!
is_null
(
$xOffset
))
$this
->
setTopLeftXOffset
(
$xOffset
);
if
(
!
is_null
(
$yOffset
))
$this
->
setTopLeftYOffset
(
$yOffset
);
return
$this
;
}
/**
* Get the top left position of the chart
*
* @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
*/
public
function
getTopLeftPosition
()
{
return
array
(
'cell'
=>
$this
->
_topLeftCellRef
,
'xOffset'
=>
$this
->
_topLeftXOffset
,
'yOffset'
=>
$this
->
_topLeftYOffset
);
}
/**
* Get the cell address where the top left of the chart is fixed
*
* @return string
*/
public
function
getTopLeftCell
()
{
return
$this
->
_topLeftCellRef
;
}
/**
* Set the Top Left cell position for the chart
*
* @param string $cell
* @return PHPExcel_Chart
*/
public
function
setTopLeftCell
(
$cell
)
{
$this
->
_topLeftCellRef
=
$cell
;
return
$this
;
}
/**
* Set the offset position within the Top Left cell for the chart
*
* @param integer $xOffset
* @param integer $yOffset
* @return PHPExcel_Chart
*/
public
function
setTopLeftOffset
(
$xOffset
=
null
,
$yOffset
=
null
)
{
if
(
!
is_null
(
$xOffset
))
$this
->
setTopLeftXOffset
(
$xOffset
);
if
(
!
is_null
(
$yOffset
))
$this
->
setTopLeftYOffset
(
$yOffset
);
return
$this
;
}
/**
* Get the offset position within the Top Left cell for the chart
*
* @return integer[]
*/
public
function
getTopLeftOffset
()
{
return
array
(
'X'
=>
$this
->
_topLeftXOffset
,
'Y'
=>
$this
->
_topLeftYOffset
);
}
public
function
setTopLeftXOffset
(
$xOffset
)
{
$this
->
_topLeftXOffset
=
$xOffset
;
return
$this
;
}
public
function
getTopLeftXOffset
()
{
return
$this
->
_topLeftXOffset
;
}
public
function
setTopLeftYOffset
(
$yOffset
)
{
$this
->
_topLeftYOffset
=
$yOffset
;
return
$this
;
}
public
function
getTopLeftYOffset
()
{
return
$this
->
_topLeftYOffset
;
}
/**
* Set the Bottom Right position of the chart
*
* @param string $cell
* @param integer $xOffset
* @param integer $yOffset
* @return PHPExcel_Chart
*/
public
function
setBottomRightPosition
(
$cell
,
$xOffset
=
null
,
$yOffset
=
null
)
{
$this
->
_bottomRightCellRef
=
$cell
;
if
(
!
is_null
(
$xOffset
))
$this
->
setBottomRightXOffset
(
$xOffset
);
if
(
!
is_null
(
$yOffset
))
$this
->
setBottomRightYOffset
(
$yOffset
);
return
$this
;
}
/**
* Get the bottom right position of the chart
*
* @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
*/
public
function
getBottomRightPosition
()
{
return
array
(
'cell'
=>
$this
->
_bottomRightCellRef
,
'xOffset'
=>
$this
->
_bottomRightXOffset
,
'yOffset'
=>
$this
->
_bottomRightYOffset
);
}
public
function
setBottomRightCell
(
$cell
)
{
$this
->
_bottomRightCellRef
=
$cell
;
return
$this
;
}
/**
* Get the cell address where the bottom right of the chart is fixed
*
* @return string
*/
public
function
getBottomRightCell
()
{
return
$this
->
_bottomRightCellRef
;
}
/**
* Set the offset position within the Bottom Right cell for the chart
*
* @param integer $xOffset
* @param integer $yOffset
* @return PHPExcel_Chart
*/
public
function
setBottomRightOffset
(
$xOffset
=
null
,
$yOffset
=
null
)
{
if
(
!
is_null
(
$xOffset
))
$this
->
setBottomRightXOffset
(
$xOffset
);
if
(
!
is_null
(
$yOffset
))
$this
->
setBottomRightYOffset
(
$yOffset
);
return
$this
;
}
/**
* Get the offset position within the Bottom Right cell for the chart
*
* @return integer[]
*/
public
function
getBottomRightOffset
()
{
return
array
(
'X'
=>
$this
->
_bottomRightXOffset
,
'Y'
=>
$this
->
_bottomRightYOffset
);
}
public
function
setBottomRightXOffset
(
$xOffset
)
{
$this
->
_bottomRightXOffset
=
$xOffset
;
return
$this
;
}
public
function
getBottomRightXOffset
()
{
return
$this
->
_bottomRightXOffset
;
}
public
function
setBottomRightYOffset
(
$yOffset
)
{
$this
->
_bottomRightYOffset
=
$yOffset
;
return
$this
;
}
public
function
getBottomRightYOffset
()
{
return
$this
->
_bottomRightYOffset
;
}
public
function
refresh
()
{
if
(
$this
->
_worksheet
!==
NULL
)
{
$this
->
_plotArea
->
refresh
(
$this
->
_worksheet
);
}
}
public
function
render
(
$outputDestination
=
null
)
{
$libraryName
=
PHPExcel_Settings
::
getChartRendererName
();
if
(
is_null
(
$libraryName
))
{
return
false
;
}
// Ensure that data series values are up-to-date before we render
$this
->
refresh
();
$libraryPath
=
PHPExcel_Settings
::
getChartRendererPath
();
$includePath
=
str_replace
(
'\\'
,
'/'
,
get_include_path
());
$rendererPath
=
str_replace
(
'\\'
,
'/'
,
$libraryPath
);
if
(
strpos
(
$rendererPath
,
$includePath
)
===
false
)
{
set_include_path
(
get_include_path
()
.
PATH_SEPARATOR
.
$libraryPath
);
}
$rendererName
=
'PHPExcel_Chart_Renderer_'
.
$libraryName
;
$renderer
=
new
$rendererName
(
$this
);
if
(
$outputDestination
==
'php://output'
)
{
$outputDestination
=
null
;
}
return
$renderer
->
render
(
$outputDestination
);
}
}
lib/Classes/PHPExcel/Chart/DataSeries.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_DataSeries
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_DataSeries
{
const
TYPE_BARCHART
=
'barChart'
;
const
TYPE_BARCHART_3D
=
'bar3DChart'
;
const
TYPE_LINECHART
=
'lineChart'
;
const
TYPE_LINECHART_3D
=
'line3DChart'
;
const
TYPE_AREACHART
=
'areaChart'
;
const
TYPE_AREACHART_3D
=
'area3DChart'
;
const
TYPE_PIECHART
=
'pieChart'
;
const
TYPE_PIECHART_3D
=
'pie3DChart'
;
const
TYPE_DOUGHTNUTCHART
=
'doughnutChart'
;
const
TYPE_DONUTCHART
=
self
::
TYPE_DOUGHTNUTCHART
;
// Synonym
const
TYPE_SCATTERCHART
=
'scatterChart'
;
const
TYPE_SURFACECHART
=
'surfaceChart'
;
const
TYPE_SURFACECHART_3D
=
'surface3DChart'
;
const
TYPE_RADARCHART
=
'radarChart'
;
const
TYPE_BUBBLECHART
=
'bubbleChart'
;
const
TYPE_STOCKCHART
=
'stockChart'
;
const
TYPE_CANDLECHART
=
self
::
TYPE_STOCKCHART
;
// Synonym
const
GROUPING_CLUSTERED
=
'clustered'
;
const
GROUPING_STACKED
=
'stacked'
;
const
GROUPING_PERCENT_STACKED
=
'percentStacked'
;
const
GROUPING_STANDARD
=
'standard'
;
const
DIRECTION_BAR
=
'bar'
;
const
DIRECTION_HORIZONTAL
=
self
::
DIRECTION_BAR
;
const
DIRECTION_COL
=
'col'
;
const
DIRECTION_COLUMN
=
self
::
DIRECTION_COL
;
const
DIRECTION_VERTICAL
=
self
::
DIRECTION_COL
;
const
STYLE_LINEMARKER
=
'lineMarker'
;
const
STYLE_SMOOTHMARKER
=
'smoothMarker'
;
const
STYLE_MARKER
=
'marker'
;
const
STYLE_FILLED
=
'filled'
;
/**
* Series Plot Type
*
* @var string
*/
private
$_plotType
=
null
;
/**
* Plot Grouping Type
*
* @var boolean
*/
private
$_plotGrouping
=
null
;
/**
* Plot Direction
*
* @var boolean
*/
private
$_plotDirection
=
null
;
/**
* Plot Style
*
* @var string
*/
private
$_plotStyle
=
null
;
/**
* Order of plots in Series
*
* @var array of integer
*/
private
$_plotOrder
=
array
();
/**
* Plot Label
*
* @var array of PHPExcel_Chart_DataSeriesValues
*/
private
$_plotLabel
=
array
();
/**
* Plot Category
*
* @var array of PHPExcel_Chart_DataSeriesValues
*/
private
$_plotCategory
=
array
();
/**
* Smooth Line
*
* @var string
*/
private
$_smoothLine
=
null
;
/**
* Plot Values
*
* @var array of PHPExcel_Chart_DataSeriesValues
*/
private
$_plotValues
=
array
();
/**
* Create a new PHPExcel_Chart_DataSeries
*/
public
function
__construct
(
$plotType
=
null
,
$plotGrouping
=
null
,
$plotOrder
=
array
(),
$plotLabel
=
array
(),
$plotCategory
=
array
(),
$plotValues
=
array
(),
$smoothLine
=
null
,
$plotStyle
=
null
)
{
$this
->
_plotType
=
$plotType
;
$this
->
_plotGrouping
=
$plotGrouping
;
$this
->
_plotOrder
=
$plotOrder
;
$keys
=
array_keys
(
$plotValues
);
$this
->
_plotValues
=
$plotValues
;
if
((
count
(
$plotLabel
)
==
0
)
||
(
is_null
(
$plotLabel
[
$keys
[
0
]])))
{
$plotLabel
[
$keys
[
0
]]
=
new
PHPExcel_Chart_DataSeriesValues
();
}
$this
->
_plotLabel
=
$plotLabel
;
if
((
count
(
$plotCategory
)
==
0
)
||
(
is_null
(
$plotCategory
[
$keys
[
0
]])))
{
$plotCategory
[
$keys
[
0
]]
=
new
PHPExcel_Chart_DataSeriesValues
();
}
$this
->
_plotCategory
=
$plotCategory
;
$this
->
_smoothLine
=
$smoothLine
;
$this
->
_plotStyle
=
$plotStyle
;
}
/**
* Get Plot Type
*
* @return string
*/
public
function
getPlotType
()
{
return
$this
->
_plotType
;
}
/**
* Set Plot Type
*
* @param string $plotType
* @return PHPExcel_Chart_DataSeries
*/
public
function
setPlotType
(
$plotType
=
''
)
{
$this
->
_plotType
=
$plotType
;
return
$this
;
}
/**
* Get Plot Grouping Type
*
* @return string
*/
public
function
getPlotGrouping
()
{
return
$this
->
_plotGrouping
;
}
/**
* Set Plot Grouping Type
*
* @param string $groupingType
* @return PHPExcel_Chart_DataSeries
*/
public
function
setPlotGrouping
(
$groupingType
=
null
)
{
$this
->
_plotGrouping
=
$groupingType
;
return
$this
;
}
/**
* Get Plot Direction
*
* @return string
*/
public
function
getPlotDirection
()
{
return
$this
->
_plotDirection
;
}
/**
* Set Plot Direction
*
* @param string $plotDirection
* @return PHPExcel_Chart_DataSeries
*/
public
function
setPlotDirection
(
$plotDirection
=
null
)
{
$this
->
_plotDirection
=
$plotDirection
;
return
$this
;
}
/**
* Get Plot Order
*
* @return string
*/
public
function
getPlotOrder
()
{
return
$this
->
_plotOrder
;
}
/**
* Get Plot Labels
*
* @return array of PHPExcel_Chart_DataSeriesValues
*/
public
function
getPlotLabels
()
{
return
$this
->
_plotLabel
;
}
/**
* Get Plot Label by Index
*
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
getPlotLabelByIndex
(
$index
)
{
$keys
=
array_keys
(
$this
->
_plotLabel
);
if
(
in_array
(
$index
,
$keys
))
{
return
$this
->
_plotLabel
[
$index
];
}
elseif
(
isset
(
$keys
[
$index
]))
{
return
$this
->
_plotLabel
[
$keys
[
$index
]];
}
return
false
;
}
/**
* Get Plot Categories
*
* @return array of PHPExcel_Chart_DataSeriesValues
*/
public
function
getPlotCategories
()
{
return
$this
->
_plotCategory
;
}
/**
* Get Plot Category by Index
*
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
getPlotCategoryByIndex
(
$index
)
{
$keys
=
array_keys
(
$this
->
_plotCategory
);
if
(
in_array
(
$index
,
$keys
))
{
return
$this
->
_plotCategory
[
$index
];
}
elseif
(
isset
(
$keys
[
$index
]))
{
return
$this
->
_plotCategory
[
$keys
[
$index
]];
}
return
false
;
}
/**
* Get Plot Style
*
* @return string
*/
public
function
getPlotStyle
()
{
return
$this
->
_plotStyle
;
}
/**
* Set Plot Style
*
* @param string $plotStyle
* @return PHPExcel_Chart_DataSeries
*/
public
function
setPlotStyle
(
$plotStyle
=
null
)
{
$this
->
_plotStyle
=
$plotStyle
;
return
$this
;
}
/**
* Get Plot Values
*
* @return array of PHPExcel_Chart_DataSeriesValues
*/
public
function
getPlotValues
()
{
return
$this
->
_plotValues
;
}
/**
* Get Plot Values by Index
*
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
getPlotValuesByIndex
(
$index
)
{
$keys
=
array_keys
(
$this
->
_plotValues
);
if
(
in_array
(
$index
,
$keys
))
{
return
$this
->
_plotValues
[
$index
];
}
elseif
(
isset
(
$keys
[
$index
]))
{
return
$this
->
_plotValues
[
$keys
[
$index
]];
}
return
false
;
}
/**
* Get Number of Plot Series
*
* @return integer
*/
public
function
getPlotSeriesCount
()
{
return
count
(
$this
->
_plotValues
);
}
/**
* Get Smooth Line
*
* @return boolean
*/
public
function
getSmoothLine
()
{
return
$this
->
_smoothLine
;
}
/**
* Set Smooth Line
*
* @param boolean $smoothLine
* @return PHPExcel_Chart_DataSeries
*/
public
function
setSmoothLine
(
$smoothLine
=
TRUE
)
{
$this
->
_smoothLine
=
$smoothLine
;
return
$this
;
}
public
function
refresh
(
PHPExcel_Worksheet
$worksheet
)
{
foreach
(
$this
->
_plotValues
as
$plotValues
)
{
if
(
$plotValues
!==
NULL
)
$plotValues
->
refresh
(
$worksheet
,
TRUE
);
}
foreach
(
$this
->
_plotLabel
as
$plotValues
)
{
if
(
$plotValues
!==
NULL
)
$plotValues
->
refresh
(
$worksheet
,
TRUE
);
}
foreach
(
$this
->
_plotCategory
as
$plotValues
)
{
if
(
$plotValues
!==
NULL
)
$plotValues
->
refresh
(
$worksheet
,
FALSE
);
}
}
}
lib/Classes/PHPExcel/Chart/DataSeriesValues.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_DataSeriesValues
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_DataSeriesValues
{
const
DATASERIES_TYPE_STRING
=
'String'
;
const
DATASERIES_TYPE_NUMBER
=
'Number'
;
private
static
$_dataTypeValues
=
array
(
self
::
DATASERIES_TYPE_STRING
,
self
::
DATASERIES_TYPE_NUMBER
,
);
/**
* Series Data Type
*
* @var string
*/
private
$_dataType
=
null
;
/**
* Series Data Source
*
* @var string
*/
private
$_dataSource
=
null
;
/**
* Format Code
*
* @var string
*/
private
$_formatCode
=
null
;
/**
* Series Point Marker
*
* @var string
*/
private
$_marker
=
null
;
/**
* Point Count (The number of datapoints in the dataseries)
*
* @var integer
*/
private
$_pointCount
=
0
;
/**
* Data Values
*
* @var array of mixed
*/
private
$_dataValues
=
array
();
/**
* Create a new PHPExcel_Chart_DataSeriesValues object
*/
public
function
__construct
(
$dataType
=
self
::
DATASERIES_TYPE_NUMBER
,
$dataSource
=
null
,
$formatCode
=
null
,
$pointCount
=
0
,
$dataValues
=
array
(),
$marker
=
null
)
{
$this
->
setDataType
(
$dataType
);
$this
->
_dataSource
=
$dataSource
;
$this
->
_formatCode
=
$formatCode
;
$this
->
_pointCount
=
$pointCount
;
$this
->
_dataValues
=
$dataValues
;
$this
->
_marker
=
$marker
;
}
/**
* Get Series Data Type
*
* @return string
*/
public
function
getDataType
()
{
return
$this
->
_dataType
;
}
/**
* Set Series Data Type
*
* @param string $dataType Datatype of this data series
* Typical values are:
* PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_STRING
* Normally used for axis point values
* PHPExcel_Chart_DataSeriesValues::DATASERIES_TYPE_NUMBER
* Normally used for chart data values
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
setDataType
(
$dataType
=
self
::
DATASERIES_TYPE_NUMBER
)
{
if
(
!
in_array
(
$dataType
,
self
::
$_dataTypeValues
))
{
throw
new
PHPExcel_Chart_Exception
(
'Invalid datatype for chart data series values'
);
}
$this
->
_dataType
=
$dataType
;
return
$this
;
}
/**
* Get Series Data Source (formula)
*
* @return string
*/
public
function
getDataSource
()
{
return
$this
->
_dataSource
;
}
/**
* Set Series Data Source (formula)
*
* @param string $dataSource
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
setDataSource
(
$dataSource
=
null
,
$refreshDataValues
=
true
)
{
$this
->
_dataSource
=
$dataSource
;
if
(
$refreshDataValues
)
{
// TO DO
}
return
$this
;
}
/**
* Get Point Marker
*
* @return string
*/
public
function
getPointMarker
()
{
return
$this
->
_marker
;
}
/**
* Set Point Marker
*
* @param string $marker
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
setPointMarker
(
$marker
=
null
)
{
$this
->
_marker
=
$marker
;
return
$this
;
}
/**
* Get Series Format Code
*
* @return string
*/
public
function
getFormatCode
()
{
return
$this
->
_formatCode
;
}
/**
* Set Series Format Code
*
* @param string $formatCode
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
setFormatCode
(
$formatCode
=
null
)
{
$this
->
_formatCode
=
$formatCode
;
return
$this
;
}
/**
* Get Series Point Count
*
* @return integer
*/
public
function
getPointCount
()
{
return
$this
->
_pointCount
;
}
/**
* Identify if the Data Series is a multi-level or a simple series
*
* @return boolean
*/
public
function
isMultiLevelSeries
()
{
if
(
count
(
$this
->
_dataValues
)
>
0
)
{
return
is_array
(
$this
->
_dataValues
[
0
]);
}
return
null
;
}
/**
* Return the level count of a multi-level Data Series
*
* @return boolean
*/
public
function
multiLevelCount
()
{
$levelCount
=
0
;
foreach
(
$this
->
_dataValues
as
$dataValueSet
)
{
$levelCount
=
max
(
$levelCount
,
count
(
$dataValueSet
));
}
return
$levelCount
;
}
/**
* Get Series Data Values
*
* @return array of mixed
*/
public
function
getDataValues
()
{
return
$this
->
_dataValues
;
}
/**
* Get the first Series Data value
*
* @return mixed
*/
public
function
getDataValue
()
{
$count
=
count
(
$this
->
_dataValues
);
if
(
$count
==
0
)
{
return
null
;
}
elseif
(
$count
==
1
)
{
return
$this
->
_dataValues
[
0
];
}
return
$this
->
_dataValues
;
}
/**
* Set Series Data Values
*
* @param array $dataValues
* @param boolean $refreshDataSource
* TRUE - refresh the value of _dataSource based on the values of $dataValues
* FALSE - don't change the value of _dataSource
* @return PHPExcel_Chart_DataSeriesValues
*/
public
function
setDataValues
(
$dataValues
=
array
(),
$refreshDataSource
=
TRUE
)
{
$this
->
_dataValues
=
PHPExcel_Calculation_Functions
::
flattenArray
(
$dataValues
);
$this
->
_pointCount
=
count
(
$dataValues
);
if
(
$refreshDataSource
)
{
// TO DO
}
return
$this
;
}
private
function
_stripNulls
(
$var
)
{
return
$var
!==
NULL
;
}
public
function
refresh
(
PHPExcel_Worksheet
$worksheet
,
$flatten
=
TRUE
)
{
if
(
$this
->
_dataSource
!==
NULL
)
{
$calcEngine
=
PHPExcel_Calculation
::
getInstance
(
$worksheet
->
getParent
());
$newDataValues
=
PHPExcel_Calculation
::
_unwrapResult
(
$calcEngine
->
_calculateFormulaValue
(
'='
.
$this
->
_dataSource
,
NULL
,
$worksheet
->
getCell
(
'A1'
)
)
);
if
(
$flatten
)
{
$this
->
_dataValues
=
PHPExcel_Calculation_Functions
::
flattenArray
(
$newDataValues
);
foreach
(
$this
->
_dataValues
as
&
$dataValue
)
{
if
((
!
empty
(
$dataValue
))
&&
(
$dataValue
[
0
]
==
'#'
))
{
$dataValue
=
0.0
;
}
}
unset
(
$dataValue
);
}
else
{
$cellRange
=
explode
(
'!'
,
$this
->
_dataSource
);
if
(
count
(
$cellRange
)
>
1
)
{
list
(,
$cellRange
)
=
$cellRange
;
}
$dimensions
=
PHPExcel_Cell
::
rangeDimension
(
str_replace
(
'$'
,
''
,
$cellRange
));
if
((
$dimensions
[
0
]
==
1
)
||
(
$dimensions
[
1
]
==
1
))
{
$this
->
_dataValues
=
PHPExcel_Calculation_Functions
::
flattenArray
(
$newDataValues
);
}
else
{
$newArray
=
array_values
(
array_shift
(
$newDataValues
));
foreach
(
$newArray
as
$i
=>
$newDataSet
)
{
$newArray
[
$i
]
=
array
(
$newDataSet
);
}
foreach
(
$newDataValues
as
$newDataSet
)
{
$i
=
0
;
foreach
(
$newDataSet
as
$newDataVal
)
{
array_unshift
(
$newArray
[
$i
++
],
$newDataVal
);
}
}
$this
->
_dataValues
=
$newArray
;
}
}
$this
->
_pointCount
=
count
(
$this
->
_dataValues
);
}
}
}
lib/Classes/PHPExcel/Chart/Exception.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_Exception
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_Exception
extends
PHPExcel_Exception
{
/**
* Error handler callback
*
* @param mixed $code
* @param mixed $string
* @param mixed $file
* @param mixed $line
* @param mixed $context
*/
public
static
function
errorHandlerCallback
(
$code
,
$string
,
$file
,
$line
,
$context
)
{
$e
=
new
self
(
$string
,
$code
);
$e
->
line
=
$line
;
$e
->
file
=
$file
;
throw
$e
;
}
}
lib/Classes/PHPExcel/Chart/Layout.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_Layout
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_Layout
{
/**
* layoutTarget
*
* @var string
*/
private
$_layoutTarget
=
NULL
;
/**
* X Mode
*
* @var string
*/
private
$_xMode
=
NULL
;
/**
* Y Mode
*
* @var string
*/
private
$_yMode
=
NULL
;
/**
* X-Position
*
* @var float
*/
private
$_xPos
=
NULL
;
/**
* Y-Position
*
* @var float
*/
private
$_yPos
=
NULL
;
/**
* width
*
* @var float
*/
private
$_width
=
NULL
;
/**
* height
*
* @var float
*/
private
$_height
=
NULL
;
/**
* show legend key
* Specifies that legend keys should be shown in data labels
*
* @var boolean
*/
private
$_showLegendKey
=
NULL
;
/**
* show value
* Specifies that the value should be shown in a data label.
*
* @var boolean
*/
private
$_showVal
=
NULL
;
/**
* show category name
* Specifies that the category name should be shown in the data label.
*
* @var boolean
*/
private
$_showCatName
=
NULL
;
/**
* show data series name
* Specifies that the series name should be shown in the data label.
*
* @var boolean
*/
private
$_showSerName
=
NULL
;
/**
* show percentage
* Specifies that the percentage should be shown in the data label.
*
* @var boolean
*/
private
$_showPercent
=
NULL
;
/**
* show bubble size
*
* @var boolean
*/
private
$_showBubbleSize
=
NULL
;
/**
* show leader lines
* Specifies that leader lines should be shown for the data label.
*
* @var boolean
*/
private
$_showLeaderLines
=
NULL
;
/**
* Create a new PHPExcel_Chart_Layout
*/
public
function
__construct
(
$layout
=
array
())
{
if
(
isset
(
$layout
[
'layoutTarget'
]))
{
$this
->
_layoutTarget
=
$layout
[
'layoutTarget'
];
}
if
(
isset
(
$layout
[
'xMode'
]))
{
$this
->
_xMode
=
$layout
[
'xMode'
];
}
if
(
isset
(
$layout
[
'yMode'
]))
{
$this
->
_yMode
=
$layout
[
'yMode'
];
}
if
(
isset
(
$layout
[
'x'
]))
{
$this
->
_xPos
=
(
float
)
$layout
[
'x'
];
}
if
(
isset
(
$layout
[
'y'
]))
{
$this
->
_yPos
=
(
float
)
$layout
[
'y'
];
}
if
(
isset
(
$layout
[
'w'
]))
{
$this
->
_width
=
(
float
)
$layout
[
'w'
];
}
if
(
isset
(
$layout
[
'h'
]))
{
$this
->
_height
=
(
float
)
$layout
[
'h'
];
}
}
/**
* Get Layout Target
*
* @return string
*/
public
function
getLayoutTarget
()
{
return
$this
->
_layoutTarget
;
}
/**
* Set Layout Target
*
* @param Layout Target $value
* @return PHPExcel_Chart_Layout
*/
public
function
setLayoutTarget
(
$value
)
{
$this
->
_layoutTarget
=
$value
;
return
$this
;
}
/**
* Get X-Mode
*
* @return string
*/
public
function
getXMode
()
{
return
$this
->
_xMode
;
}
/**
* Set X-Mode
*
* @param X-Mode $value
* @return PHPExcel_Chart_Layout
*/
public
function
setXMode
(
$value
)
{
$this
->
_xMode
=
$value
;
return
$this
;
}
/**
* Get Y-Mode
*
* @return string
*/
public
function
getYMode
()
{
return
$this
->
_yMode
;
}
/**
* Set Y-Mode
*
* @param Y-Mode $value
* @return PHPExcel_Chart_Layout
*/
public
function
setYMode
(
$value
)
{
$this
->
_yMode
=
$value
;
return
$this
;
}
/**
* Get X-Position
*
* @return number
*/
public
function
getXPosition
()
{
return
$this
->
_xPos
;
}
/**
* Set X-Position
*
* @param X-Position $value
* @return PHPExcel_Chart_Layout
*/
public
function
setXPosition
(
$value
)
{
$this
->
_xPos
=
$value
;
return
$this
;
}
/**
* Get Y-Position
*
* @return number
*/
public
function
getYPosition
()
{
return
$this
->
_yPos
;
}
/**
* Set Y-Position
*
* @param Y-Position $value
* @return PHPExcel_Chart_Layout
*/
public
function
setYPosition
(
$value
)
{
$this
->
_yPos
=
$value
;
return
$this
;
}
/**
* Get Width
*
* @return number
*/
public
function
getWidth
()
{
return
$this
->
_width
;
}
/**
* Set Width
*
* @param Width $value
* @return PHPExcel_Chart_Layout
*/
public
function
setWidth
(
$value
)
{
$this
->
_width
=
$value
;
return
$this
;
}
/**
* Get Height
*
* @return number
*/
public
function
getHeight
()
{
return
$this
->
_height
;
}
/**
* Set Height
*
* @param Height $value
* @return PHPExcel_Chart_Layout
*/
public
function
setHeight
(
$value
)
{
$this
->
_height
=
$value
;
return
$this
;
}
/**
* Get show legend key
*
* @return boolean
*/
public
function
getShowLegendKey
()
{
return
$this
->
_showLegendKey
;
}
/**
* Set show legend key
* Specifies that legend keys should be shown in data labels.
*
* @param boolean $value Show legend key
* @return PHPExcel_Chart_Layout
*/
public
function
setShowLegendKey
(
$value
)
{
$this
->
_showLegendKey
=
$value
;
return
$this
;
}
/**
* Get show value
*
* @return boolean
*/
public
function
getShowVal
()
{
return
$this
->
_showVal
;
}
/**
* Set show val
* Specifies that the value should be shown in data labels.
*
* @param boolean $value Show val
* @return PHPExcel_Chart_Layout
*/
public
function
setShowVal
(
$value
)
{
$this
->
_showVal
=
$value
;
return
$this
;
}
/**
* Get show category name
*
* @return boolean
*/
public
function
getShowCatName
()
{
return
$this
->
_showCatName
;
}
/**
* Set show cat name
* Specifies that the category name should be shown in data labels.
*
* @param boolean $value Show cat name
* @return PHPExcel_Chart_Layout
*/
public
function
setShowCatName
(
$value
)
{
$this
->
_showCatName
=
$value
;
return
$this
;
}
/**
* Get show data series name
*
* @return boolean
*/
public
function
getShowSerName
()
{
return
$this
->
_showSerName
;
}
/**
* Set show ser name
* Specifies that the series name should be shown in data labels.
*
* @param boolean $value Show series name
* @return PHPExcel_Chart_Layout
*/
public
function
setShowSerName
(
$value
)
{
$this
->
_showSerName
=
$value
;
return
$this
;
}
/**
* Get show percentage
*
* @return boolean
*/
public
function
getShowPercent
()
{
return
$this
->
_showPercent
;
}
/**
* Set show percentage
* Specifies that the percentage should be shown in data labels.
*
* @param boolean $value Show percentage
* @return PHPExcel_Chart_Layout
*/
public
function
setShowPercent
(
$value
)
{
$this
->
_showPercent
=
$value
;
return
$this
;
}
/**
* Get show bubble size
*
* @return boolean
*/
public
function
getShowBubbleSize
()
{
return
$this
->
_showBubbleSize
;
}
/**
* Set show bubble size
* Specifies that the bubble size should be shown in data labels.
*
* @param boolean $value Show bubble size
* @return PHPExcel_Chart_Layout
*/
public
function
setShowBubbleSize
(
$value
)
{
$this
->
_showBubbleSize
=
$value
;
return
$this
;
}
/**
* Get show leader lines
*
* @return boolean
*/
public
function
getShowLeaderLines
()
{
return
$this
->
_showLeaderLines
;
}
/**
* Set show leader lines
* Specifies that leader lines should be shown in data labels.
*
* @param boolean $value Show leader lines
* @return PHPExcel_Chart_Layout
*/
public
function
setShowLeaderLines
(
$value
)
{
$this
->
_showLeaderLines
=
$value
;
return
$this
;
}
}
lib/Classes/PHPExcel/Chart/Legend.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_Legend
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_Legend
{
/** Legend positions */
const
xlLegendPositionBottom
=
-
4107
;
// Below the chart.
const
xlLegendPositionCorner
=
2
;
// In the upper right-hand corner of the chart border.
const
xlLegendPositionCustom
=
-
4161
;
// A custom position.
const
xlLegendPositionLeft
=
-
4131
;
// Left of the chart.
const
xlLegendPositionRight
=
-
4152
;
// Right of the chart.
const
xlLegendPositionTop
=
-
4160
;
// Above the chart.
const
POSITION_RIGHT
=
'r'
;
const
POSITION_LEFT
=
'l'
;
const
POSITION_BOTTOM
=
'b'
;
const
POSITION_TOP
=
't'
;
const
POSITION_TOPRIGHT
=
'tr'
;
private
static
$_positionXLref
=
array
(
self
::
xlLegendPositionBottom
=>
self
::
POSITION_BOTTOM
,
self
::
xlLegendPositionCorner
=>
self
::
POSITION_TOPRIGHT
,
self
::
xlLegendPositionCustom
=>
'??'
,
self
::
xlLegendPositionLeft
=>
self
::
POSITION_LEFT
,
self
::
xlLegendPositionRight
=>
self
::
POSITION_RIGHT
,
self
::
xlLegendPositionTop
=>
self
::
POSITION_TOP
);
/**
* Legend position
*
* @var string
*/
private
$_position
=
self
::
POSITION_RIGHT
;
/**
* Allow overlay of other elements?
*
* @var boolean
*/
private
$_overlay
=
TRUE
;
/**
* Legend Layout
*
* @var PHPExcel_Chart_Layout
*/
private
$_layout
=
NULL
;
/**
* Create a new PHPExcel_Chart_Legend
*/
public
function
__construct
(
$position
=
self
::
POSITION_RIGHT
,
PHPExcel_Chart_Layout
$layout
=
NULL
,
$overlay
=
FALSE
)
{
$this
->
setPosition
(
$position
);
$this
->
_layout
=
$layout
;
$this
->
setOverlay
(
$overlay
);
}
/**
* Get legend position as an excel string value
*
* @return string
*/
public
function
getPosition
()
{
return
$this
->
_position
;
}
/**
* Get legend position using an excel string value
*
* @param string $position
*/
public
function
setPosition
(
$position
=
self
::
POSITION_RIGHT
)
{
if
(
!
in_array
(
$position
,
self
::
$_positionXLref
))
{
return
false
;
}
$this
->
_position
=
$position
;
return
true
;
}
/**
* Get legend position as an Excel internal numeric value
*
* @return number
*/
public
function
getPositionXL
()
{
return
array_search
(
$this
->
_position
,
self
::
$_positionXLref
);
}
/**
* Set legend position using an Excel internal numeric value
*
* @param number $positionXL
*/
public
function
setPositionXL
(
$positionXL
=
self
::
xlLegendPositionRight
)
{
if
(
!
array_key_exists
(
$positionXL
,
self
::
$_positionXLref
))
{
return
false
;
}
$this
->
_position
=
self
::
$_positionXLref
[
$positionXL
];
return
true
;
}
/**
* Get allow overlay of other elements?
*
* @return boolean
*/
public
function
getOverlay
()
{
return
$this
->
_overlay
;
}
/**
* Set allow overlay of other elements?
*
* @param boolean $overlay
* @return boolean
*/
public
function
setOverlay
(
$overlay
=
FALSE
)
{
if
(
!
is_bool
(
$overlay
))
{
return
false
;
}
$this
->
_overlay
=
$overlay
;
return
true
;
}
/**
* Get Layout
*
* @return PHPExcel_Chart_Layout
*/
public
function
getLayout
()
{
return
$this
->
_layout
;
}
}
lib/Classes/PHPExcel/Chart/PlotArea.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_PlotArea
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_PlotArea
{
/**
* PlotArea Layout
*
* @var PHPExcel_Chart_Layout
*/
private
$_layout
=
null
;
/**
* Plot Series
*
* @var array of PHPExcel_Chart_DataSeries
*/
private
$_plotSeries
=
array
();
/**
* Create a new PHPExcel_Chart_PlotArea
*/
public
function
__construct
(
PHPExcel_Chart_Layout
$layout
=
null
,
$plotSeries
=
array
())
{
$this
->
_layout
=
$layout
;
$this
->
_plotSeries
=
$plotSeries
;
}
/**
* Get Layout
*
* @return PHPExcel_Chart_Layout
*/
public
function
getLayout
()
{
return
$this
->
_layout
;
}
/**
* Get Number of Plot Groups
*
* @return array of PHPExcel_Chart_DataSeries
*/
public
function
getPlotGroupCount
()
{
return
count
(
$this
->
_plotSeries
);
}
/**
* Get Number of Plot Series
*
* @return integer
*/
public
function
getPlotSeriesCount
()
{
$seriesCount
=
0
;
foreach
(
$this
->
_plotSeries
as
$plot
)
{
$seriesCount
+=
$plot
->
getPlotSeriesCount
();
}
return
$seriesCount
;
}
/**
* Get Plot Series
*
* @return array of PHPExcel_Chart_DataSeries
*/
public
function
getPlotGroup
()
{
return
$this
->
_plotSeries
;
}
/**
* Get Plot Series by Index
*
* @return PHPExcel_Chart_DataSeries
*/
public
function
getPlotGroupByIndex
(
$index
)
{
return
$this
->
_plotSeries
[
$index
];
}
/**
* Set Plot Series
*
* @param [PHPExcel_Chart_DataSeries]
* @return PHPExcel_Chart_PlotArea
*/
public
function
setPlotSeries
(
$plotSeries
=
array
())
{
$this
->
_plotSeries
=
$plotSeries
;
return
$this
;
}
public
function
refresh
(
PHPExcel_Worksheet
$worksheet
)
{
foreach
(
$this
->
_plotSeries
as
$plotSeries
)
{
$plotSeries
->
refresh
(
$worksheet
);
}
}
}
lib/Classes/PHPExcel/Chart/Renderer/PHP Charting Libraries.txt
0 → 100644
View file @
48680c56
ChartDirector
http://www.advsofteng.com/cdphp.html
GraPHPite
http://graphpite.sourceforge.net/
JpGraph
http://www.aditus.nu/jpgraph/
LibChart
http://naku.dohcrew.com/libchart/pages/introduction/
pChart
http://pchart.sourceforge.net/
TeeChart
http://www.steema.com/products/teechart/overview.html
lib/Classes/PHPExcel/Chart/Renderer/jpgraph.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart_Renderer
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
require_once
(
PHPExcel_Settings
::
getChartRendererPath
()
.
'/jpgraph.php'
);
/**
* PHPExcel_Chart_Renderer_jpgraph
*
* @category PHPExcel
* @package PHPExcel_Chart_Renderer
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_Renderer_jpgraph
{
private
static
$_width
=
640
;
private
static
$_height
=
480
;
private
static
$_colourSet
=
array
(
'mediumpurple1'
,
'palegreen3'
,
'gold1'
,
'cadetblue1'
,
'darkmagenta'
,
'coral'
,
'dodgerblue3'
,
'eggplant'
,
'mediumblue'
,
'magenta'
,
'sandybrown'
,
'cyan'
,
'firebrick1'
,
'forestgreen'
,
'deeppink4'
,
'darkolivegreen'
,
'goldenrod2'
);
private
static
$_markSet
=
array
(
'diamond'
=>
MARK_DIAMOND
,
'square'
=>
MARK_SQUARE
,
'triangle'
=>
MARK_UTRIANGLE
,
'x'
=>
MARK_X
,
'star'
=>
MARK_STAR
,
'dot'
=>
MARK_FILLEDCIRCLE
,
'dash'
=>
MARK_DTRIANGLE
,
'circle'
=>
MARK_CIRCLE
,
'plus'
=>
MARK_CROSS
);
private
$_chart
=
null
;
private
$_graph
=
null
;
private
static
$_plotColour
=
0
;
private
static
$_plotMark
=
0
;
private
function
_formatPointMarker
(
$seriesPlot
,
$markerID
)
{
$plotMarkKeys
=
array_keys
(
self
::
$_markSet
);
if
(
is_null
(
$markerID
))
{
// Use default plot marker (next marker in the series)
self
::
$_plotMark
%=
count
(
self
::
$_markSet
);
$seriesPlot
->
mark
->
SetType
(
self
::
$_markSet
[
$plotMarkKeys
[
self
::
$_plotMark
++
]]);
}
elseif
(
$markerID
!==
'none'
)
{
// Use specified plot marker (if it exists)
if
(
isset
(
self
::
$_markSet
[
$markerID
]))
{
$seriesPlot
->
mark
->
SetType
(
self
::
$_markSet
[
$markerID
]);
}
else
{
// If the specified plot marker doesn't exist, use default plot marker (next marker in the series)
self
::
$_plotMark
%=
count
(
self
::
$_markSet
);
$seriesPlot
->
mark
->
SetType
(
self
::
$_markSet
[
$plotMarkKeys
[
self
::
$_plotMark
++
]]);
}
}
else
{
// Hide plot marker
$seriesPlot
->
mark
->
Hide
();
}
$seriesPlot
->
mark
->
SetColor
(
self
::
$_colourSet
[
self
::
$_plotColour
]);
$seriesPlot
->
mark
->
SetFillColor
(
self
::
$_colourSet
[
self
::
$_plotColour
]);
$seriesPlot
->
SetColor
(
self
::
$_colourSet
[
self
::
$_plotColour
++
]);
return
$seriesPlot
;
}
// function _formatPointMarker()
private
function
_formatDataSetLabels
(
$groupID
,
$datasetLabels
,
$labelCount
,
$rotation
=
''
)
{
$datasetLabelFormatCode
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
0
)
->
getFormatCode
();
if
(
!
is_null
(
$datasetLabelFormatCode
))
{
// Retrieve any label formatting code
$datasetLabelFormatCode
=
stripslashes
(
$datasetLabelFormatCode
);
}
$testCurrentIndex
=
0
;
foreach
(
$datasetLabels
as
$i
=>
$datasetLabel
)
{
if
(
is_array
(
$datasetLabel
))
{
if
(
$rotation
==
'bar'
)
{
$datasetLabels
[
$i
]
=
implode
(
" "
,
$datasetLabel
);
}
else
{
$datasetLabel
=
array_reverse
(
$datasetLabel
);
$datasetLabels
[
$i
]
=
implode
(
"
\n
"
,
$datasetLabel
);
}
}
else
{
// Format labels according to any formatting code
if
(
!
is_null
(
$datasetLabelFormatCode
))
{
$datasetLabels
[
$i
]
=
PHPExcel_Style_NumberFormat
::
toFormattedString
(
$datasetLabel
,
$datasetLabelFormatCode
);
}
}
++
$testCurrentIndex
;
}
return
$datasetLabels
;
}
// function _formatDataSetLabels()
private
function
_percentageSumCalculation
(
$groupID
,
$seriesCount
)
{
// Adjust our values to a percentage value across all series in the group
for
(
$i
=
0
;
$i
<
$seriesCount
;
++
$i
)
{
if
(
$i
==
0
)
{
$sumValues
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getDataValues
();
}
else
{
$nextValues
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getDataValues
();
foreach
(
$nextValues
as
$k
=>
$value
)
{
if
(
isset
(
$sumValues
[
$k
]))
{
$sumValues
[
$k
]
+=
$value
;
}
else
{
$sumValues
[
$k
]
=
$value
;
}
}
}
}
return
$sumValues
;
}
// function _percentageSumCalculation()
private
function
_percentageAdjustValues
(
$dataValues
,
$sumValues
)
{
foreach
(
$dataValues
as
$k
=>
$dataValue
)
{
$dataValues
[
$k
]
=
$dataValue
/
$sumValues
[
$k
]
*
100
;
}
return
$dataValues
;
}
// function _percentageAdjustValues()
private
function
_getCaption
(
$captionElement
)
{
// Read any caption
$caption
=
(
!
is_null
(
$captionElement
))
?
$captionElement
->
getCaption
()
:
NULL
;
// Test if we have a title caption to display
if
(
!
is_null
(
$caption
))
{
// If we do, it could be a plain string or an array
if
(
is_array
(
$caption
))
{
// Implode an array to a plain string
$caption
=
implode
(
''
,
$caption
);
}
}
return
$caption
;
}
// function _getCaption()
private
function
_renderTitle
()
{
$title
=
$this
->
_getCaption
(
$this
->
_chart
->
getTitle
());
if
(
!
is_null
(
$title
))
{
$this
->
_graph
->
title
->
Set
(
$title
);
}
}
// function _renderTitle()
private
function
_renderLegend
()
{
$legend
=
$this
->
_chart
->
getLegend
();
if
(
!
is_null
(
$legend
))
{
$legendPosition
=
$legend
->
getPosition
();
$legendOverlay
=
$legend
->
getOverlay
();
switch
(
$legendPosition
)
{
case
'r'
:
$this
->
_graph
->
legend
->
SetPos
(
0.01
,
0.5
,
'right'
,
'center'
);
// right
$this
->
_graph
->
legend
->
SetColumns
(
1
);
break
;
case
'l'
:
$this
->
_graph
->
legend
->
SetPos
(
0.01
,
0.5
,
'left'
,
'center'
);
// left
$this
->
_graph
->
legend
->
SetColumns
(
1
);
break
;
case
't'
:
$this
->
_graph
->
legend
->
SetPos
(
0.5
,
0.01
,
'center'
,
'top'
);
// top
break
;
case
'b'
:
$this
->
_graph
->
legend
->
SetPos
(
0.5
,
0.99
,
'center'
,
'bottom'
);
// bottom
break
;
default
:
$this
->
_graph
->
legend
->
SetPos
(
0.01
,
0.01
,
'right'
,
'top'
);
// top-right
$this
->
_graph
->
legend
->
SetColumns
(
1
);
break
;
}
}
else
{
$this
->
_graph
->
legend
->
Hide
();
}
}
// function _renderLegend()
private
function
_renderCartesianPlotArea
(
$type
=
'textlin'
)
{
$this
->
_graph
=
new
Graph
(
self
::
$_width
,
self
::
$_height
);
$this
->
_graph
->
SetScale
(
$type
);
$this
->
_renderTitle
();
// Rotate for bar rather than column chart
$rotation
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
0
)
->
getPlotDirection
();
$reverse
=
(
$rotation
==
'bar'
)
?
true
:
false
;
$xAxisLabel
=
$this
->
_chart
->
getXAxisLabel
();
if
(
!
is_null
(
$xAxisLabel
))
{
$title
=
$this
->
_getCaption
(
$xAxisLabel
);
if
(
!
is_null
(
$title
))
{
$this
->
_graph
->
xaxis
->
SetTitle
(
$title
,
'center'
);
$this
->
_graph
->
xaxis
->
title
->
SetMargin
(
35
);
if
(
$reverse
)
{
$this
->
_graph
->
xaxis
->
title
->
SetAngle
(
90
);
$this
->
_graph
->
xaxis
->
title
->
SetMargin
(
90
);
}
}
}
$yAxisLabel
=
$this
->
_chart
->
getYAxisLabel
();
if
(
!
is_null
(
$yAxisLabel
))
{
$title
=
$this
->
_getCaption
(
$yAxisLabel
);
if
(
!
is_null
(
$title
))
{
$this
->
_graph
->
yaxis
->
SetTitle
(
$title
,
'center'
);
if
(
$reverse
)
{
$this
->
_graph
->
yaxis
->
title
->
SetAngle
(
0
);
$this
->
_graph
->
yaxis
->
title
->
SetMargin
(
-
55
);
}
}
}
}
// function _renderCartesianPlotArea()
private
function
_renderPiePlotArea
(
$doughnut
=
False
)
{
$this
->
_graph
=
new
PieGraph
(
self
::
$_width
,
self
::
$_height
);
$this
->
_renderTitle
();
}
// function _renderPiePlotArea()
private
function
_renderRadarPlotArea
()
{
$this
->
_graph
=
new
RadarGraph
(
self
::
$_width
,
self
::
$_height
);
$this
->
_graph
->
SetScale
(
'lin'
);
$this
->
_renderTitle
();
}
// function _renderRadarPlotArea()
private
function
_renderPlotLine
(
$groupID
,
$filled
=
false
,
$combination
=
false
,
$dimensions
=
'2d'
)
{
$grouping
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotGrouping
();
$labelCount
=
count
(
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
0
)
->
getPointCount
());
if
(
$labelCount
>
0
)
{
$datasetLabels
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
0
)
->
getDataValues
();
$datasetLabels
=
$this
->
_formatDataSetLabels
(
$groupID
,
$datasetLabels
,
$labelCount
);
$this
->
_graph
->
xaxis
->
SetTickLabels
(
$datasetLabels
);
}
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$seriesPlots
=
array
();
if
(
$grouping
==
'percentStacked'
)
{
$sumValues
=
$this
->
_percentageSumCalculation
(
$groupID
,
$seriesCount
);
}
// Loop through each data series in turn
for
(
$i
=
0
;
$i
<
$seriesCount
;
++
$i
)
{
$dataValues
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getDataValues
();
$marker
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getPointMarker
();
if
(
$grouping
==
'percentStacked'
)
{
$dataValues
=
$this
->
_percentageAdjustValues
(
$dataValues
,
$sumValues
);
}
// Fill in any missing values in the $dataValues array
$testCurrentIndex
=
0
;
foreach
(
$dataValues
as
$k
=>
$dataValue
)
{
while
(
$k
!=
$testCurrentIndex
)
{
$dataValues
[
$testCurrentIndex
]
=
null
;
++
$testCurrentIndex
;
}
++
$testCurrentIndex
;
}
$seriesPlot
=
new
LinePlot
(
$dataValues
);
if
(
$combination
)
{
$seriesPlot
->
SetBarCenter
();
}
if
(
$filled
)
{
$seriesPlot
->
SetFilled
(
true
);
$seriesPlot
->
SetColor
(
'black'
);
$seriesPlot
->
SetFillColor
(
self
::
$_colourSet
[
self
::
$_plotColour
++
]);
}
else
{
// Set the appropriate plot marker
$this
->
_formatPointMarker
(
$seriesPlot
,
$marker
);
}
$dataLabel
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotLabelByIndex
(
$i
)
->
getDataValue
();
$seriesPlot
->
SetLegend
(
$dataLabel
);
$seriesPlots
[]
=
$seriesPlot
;
}
if
(
$grouping
==
'standard'
)
{
$groupPlot
=
$seriesPlots
;
}
else
{
$groupPlot
=
new
AccLinePlot
(
$seriesPlots
);
}
$this
->
_graph
->
Add
(
$groupPlot
);
}
// function _renderPlotLine()
private
function
_renderPlotBar
(
$groupID
,
$dimensions
=
'2d'
)
{
$rotation
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotDirection
();
// Rotate for bar rather than column chart
if
((
$groupID
==
0
)
&&
(
$rotation
==
'bar'
))
{
$this
->
_graph
->
Set90AndMargin
();
}
$grouping
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotGrouping
();
$labelCount
=
count
(
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
0
)
->
getPointCount
());
if
(
$labelCount
>
0
)
{
$datasetLabels
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
0
)
->
getDataValues
();
$datasetLabels
=
$this
->
_formatDataSetLabels
(
$groupID
,
$datasetLabels
,
$labelCount
,
$rotation
);
// Rotate for bar rather than column chart
if
(
$rotation
==
'bar'
)
{
$datasetLabels
=
array_reverse
(
$datasetLabels
);
$this
->
_graph
->
yaxis
->
SetPos
(
'max'
);
$this
->
_graph
->
yaxis
->
SetLabelAlign
(
'center'
,
'top'
);
$this
->
_graph
->
yaxis
->
SetLabelSide
(
SIDE_RIGHT
);
}
$this
->
_graph
->
xaxis
->
SetTickLabels
(
$datasetLabels
);
}
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$seriesPlots
=
array
();
if
(
$grouping
==
'percentStacked'
)
{
$sumValues
=
$this
->
_percentageSumCalculation
(
$groupID
,
$seriesCount
);
}
// Loop through each data series in turn
for
(
$j
=
0
;
$j
<
$seriesCount
;
++
$j
)
{
$dataValues
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$j
)
->
getDataValues
();
if
(
$grouping
==
'percentStacked'
)
{
$dataValues
=
$this
->
_percentageAdjustValues
(
$dataValues
,
$sumValues
);
}
// Fill in any missing values in the $dataValues array
$testCurrentIndex
=
0
;
foreach
(
$dataValues
as
$k
=>
$dataValue
)
{
while
(
$k
!=
$testCurrentIndex
)
{
$dataValues
[
$testCurrentIndex
]
=
null
;
++
$testCurrentIndex
;
}
++
$testCurrentIndex
;
}
// Reverse the $dataValues order for bar rather than column chart
if
(
$rotation
==
'bar'
)
{
$dataValues
=
array_reverse
(
$dataValues
);
}
$seriesPlot
=
new
BarPlot
(
$dataValues
);
$seriesPlot
->
SetColor
(
'black'
);
$seriesPlot
->
SetFillColor
(
self
::
$_colourSet
[
self
::
$_plotColour
++
]);
if
(
$dimensions
==
'3d'
)
{
$seriesPlot
->
SetShadow
();
}
if
(
!
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotLabelByIndex
(
$j
))
{
$dataLabel
=
''
;
}
else
{
$dataLabel
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotLabelByIndex
(
$j
)
->
getDataValue
();
}
$seriesPlot
->
SetLegend
(
$dataLabel
);
$seriesPlots
[]
=
$seriesPlot
;
}
// Reverse the plot order for bar rather than column chart
if
((
$rotation
==
'bar'
)
&&
(
!
(
$grouping
==
'percentStacked'
)))
{
$seriesPlots
=
array_reverse
(
$seriesPlots
);
}
if
(
$grouping
==
'clustered'
)
{
$groupPlot
=
new
GroupBarPlot
(
$seriesPlots
);
}
elseif
(
$grouping
==
'standard'
)
{
$groupPlot
=
new
GroupBarPlot
(
$seriesPlots
);
}
else
{
$groupPlot
=
new
AccBarPlot
(
$seriesPlots
);
if
(
$dimensions
==
'3d'
)
{
$groupPlot
->
SetShadow
();
}
}
$this
->
_graph
->
Add
(
$groupPlot
);
}
// function _renderPlotBar()
private
function
_renderPlotScatter
(
$groupID
,
$bubble
)
{
$grouping
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotGrouping
();
$scatterStyle
=
$bubbleSize
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotStyle
();
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$seriesPlots
=
array
();
// Loop through each data series in turn
for
(
$i
=
0
;
$i
<
$seriesCount
;
++
$i
)
{
$dataValuesY
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
$i
)
->
getDataValues
();
$dataValuesX
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getDataValues
();
foreach
(
$dataValuesY
as
$k
=>
$dataValueY
)
{
$dataValuesY
[
$k
]
=
$k
;
}
$seriesPlot
=
new
ScatterPlot
(
$dataValuesX
,
$dataValuesY
);
if
(
$scatterStyle
==
'lineMarker'
)
{
$seriesPlot
->
SetLinkPoints
();
$seriesPlot
->
link
->
SetColor
(
self
::
$_colourSet
[
self
::
$_plotColour
]);
}
elseif
(
$scatterStyle
==
'smoothMarker'
)
{
$spline
=
new
Spline
(
$dataValuesY
,
$dataValuesX
);
list
(
$splineDataY
,
$splineDataX
)
=
$spline
->
Get
(
count
(
$dataValuesX
)
*
self
::
$_width
/
20
);
$lplot
=
new
LinePlot
(
$splineDataX
,
$splineDataY
);
$lplot
->
SetColor
(
self
::
$_colourSet
[
self
::
$_plotColour
]);
$this
->
_graph
->
Add
(
$lplot
);
}
if
(
$bubble
)
{
$this
->
_formatPointMarker
(
$seriesPlot
,
'dot'
);
$seriesPlot
->
mark
->
SetColor
(
'black'
);
$seriesPlot
->
mark
->
SetSize
(
$bubbleSize
);
}
else
{
$marker
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getPointMarker
();
$this
->
_formatPointMarker
(
$seriesPlot
,
$marker
);
}
$dataLabel
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotLabelByIndex
(
$i
)
->
getDataValue
();
$seriesPlot
->
SetLegend
(
$dataLabel
);
$this
->
_graph
->
Add
(
$seriesPlot
);
}
}
// function _renderPlotScatter()
private
function
_renderPlotRadar
(
$groupID
)
{
$radarStyle
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotStyle
();
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$seriesPlots
=
array
();
// Loop through each data series in turn
for
(
$i
=
0
;
$i
<
$seriesCount
;
++
$i
)
{
$dataValuesY
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
$i
)
->
getDataValues
();
$dataValuesX
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getDataValues
();
$marker
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getPointMarker
();
$dataValues
=
array
();
foreach
(
$dataValuesY
as
$k
=>
$dataValueY
)
{
$dataValues
[
$k
]
=
implode
(
' '
,
array_reverse
(
$dataValueY
));
}
$tmp
=
array_shift
(
$dataValues
);
$dataValues
[]
=
$tmp
;
$tmp
=
array_shift
(
$dataValuesX
);
$dataValuesX
[]
=
$tmp
;
$this
->
_graph
->
SetTitles
(
array_reverse
(
$dataValues
));
$seriesPlot
=
new
RadarPlot
(
array_reverse
(
$dataValuesX
));
$dataLabel
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotLabelByIndex
(
$i
)
->
getDataValue
();
$seriesPlot
->
SetColor
(
self
::
$_colourSet
[
self
::
$_plotColour
++
]);
if
(
$radarStyle
==
'filled'
)
{
$seriesPlot
->
SetFillColor
(
self
::
$_colourSet
[
self
::
$_plotColour
]);
}
$this
->
_formatPointMarker
(
$seriesPlot
,
$marker
);
$seriesPlot
->
SetLegend
(
$dataLabel
);
$this
->
_graph
->
Add
(
$seriesPlot
);
}
}
// function _renderPlotRadar()
private
function
_renderPlotContour
(
$groupID
)
{
$contourStyle
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotStyle
();
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$seriesPlots
=
array
();
$dataValues
=
array
();
// Loop through each data series in turn
for
(
$i
=
0
;
$i
<
$seriesCount
;
++
$i
)
{
$dataValuesY
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
$i
)
->
getDataValues
();
$dataValuesX
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$i
)
->
getDataValues
();
$dataValues
[
$i
]
=
$dataValuesX
;
}
$seriesPlot
=
new
ContourPlot
(
$dataValues
);
$this
->
_graph
->
Add
(
$seriesPlot
);
}
// function _renderPlotContour()
private
function
_renderPlotStock
(
$groupID
)
{
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$plotOrder
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotOrder
();
$dataValues
=
array
();
// Loop through each data series in turn and build the plot arrays
foreach
(
$plotOrder
as
$i
=>
$v
)
{
$dataValuesX
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$v
)
->
getDataValues
();
foreach
(
$dataValuesX
as
$j
=>
$dataValueX
)
{
$dataValues
[
$plotOrder
[
$i
]][
$j
]
=
$dataValueX
;
}
}
if
(
empty
(
$dataValues
))
{
return
;
}
$dataValuesPlot
=
array
();
// Flatten the plot arrays to a single dimensional array to work with jpgraph
for
(
$j
=
0
;
$j
<
count
(
$dataValues
[
0
]);
$j
++
)
{
for
(
$i
=
0
;
$i
<
$seriesCount
;
$i
++
)
{
$dataValuesPlot
[]
=
$dataValues
[
$i
][
$j
];
}
}
// Set the x-axis labels
$labelCount
=
count
(
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
0
)
->
getPointCount
());
if
(
$labelCount
>
0
)
{
$datasetLabels
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
0
)
->
getDataValues
();
$datasetLabels
=
$this
->
_formatDataSetLabels
(
$groupID
,
$datasetLabels
,
$labelCount
);
$this
->
_graph
->
xaxis
->
SetTickLabels
(
$datasetLabels
);
}
$seriesPlot
=
new
StockPlot
(
$dataValuesPlot
);
$seriesPlot
->
SetWidth
(
20
);
$this
->
_graph
->
Add
(
$seriesPlot
);
}
// function _renderPlotStock()
private
function
_renderAreaChart
(
$groupCount
,
$dimensions
=
'2d'
)
{
require_once
(
'jpgraph_line.php'
);
$this
->
_renderCartesianPlotArea
();
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$this
->
_renderPlotLine
(
$i
,
True
,
False
,
$dimensions
);
}
}
// function _renderAreaChart()
private
function
_renderLineChart
(
$groupCount
,
$dimensions
=
'2d'
)
{
require_once
(
'jpgraph_line.php'
);
$this
->
_renderCartesianPlotArea
();
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$this
->
_renderPlotLine
(
$i
,
False
,
False
,
$dimensions
);
}
}
// function _renderLineChart()
private
function
_renderBarChart
(
$groupCount
,
$dimensions
=
'2d'
)
{
require_once
(
'jpgraph_bar.php'
);
$this
->
_renderCartesianPlotArea
();
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$this
->
_renderPlotBar
(
$i
,
$dimensions
);
}
}
// function _renderBarChart()
private
function
_renderScatterChart
(
$groupCount
)
{
require_once
(
'jpgraph_scatter.php'
);
require_once
(
'jpgraph_regstat.php'
);
require_once
(
'jpgraph_line.php'
);
$this
->
_renderCartesianPlotArea
(
'linlin'
);
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$this
->
_renderPlotScatter
(
$i
,
false
);
}
}
// function _renderScatterChart()
private
function
_renderBubbleChart
(
$groupCount
)
{
require_once
(
'jpgraph_scatter.php'
);
$this
->
_renderCartesianPlotArea
(
'linlin'
);
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$this
->
_renderPlotScatter
(
$i
,
true
);
}
}
// function _renderBubbleChart()
private
function
_renderPieChart
(
$groupCount
,
$dimensions
=
'2d'
,
$doughnut
=
False
,
$multiplePlots
=
False
)
{
require_once
(
'jpgraph_pie.php'
);
if
(
$dimensions
==
'3d'
)
{
require_once
(
'jpgraph_pie3d.php'
);
}
$this
->
_renderPiePlotArea
(
$doughnut
);
$iLimit
=
(
$multiplePlots
)
?
$groupCount
:
1
;
for
(
$groupID
=
0
;
$groupID
<
$iLimit
;
++
$groupID
)
{
$grouping
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotGrouping
();
$exploded
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotStyle
();
if
(
$groupID
==
0
)
{
$labelCount
=
count
(
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
0
)
->
getPointCount
());
if
(
$labelCount
>
0
)
{
$datasetLabels
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotCategoryByIndex
(
0
)
->
getDataValues
();
$datasetLabels
=
$this
->
_formatDataSetLabels
(
$groupID
,
$datasetLabels
,
$labelCount
);
}
}
$seriesCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotSeriesCount
();
$seriesPlots
=
array
();
// For pie charts, we only display the first series: doughnut charts generally display all series
$jLimit
=
(
$multiplePlots
)
?
$seriesCount
:
1
;
// Loop through each data series in turn
for
(
$j
=
0
;
$j
<
$jLimit
;
++
$j
)
{
$dataValues
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$groupID
)
->
getPlotValuesByIndex
(
$j
)
->
getDataValues
();
// Fill in any missing values in the $dataValues array
$testCurrentIndex
=
0
;
foreach
(
$dataValues
as
$k
=>
$dataValue
)
{
while
(
$k
!=
$testCurrentIndex
)
{
$dataValues
[
$testCurrentIndex
]
=
null
;
++
$testCurrentIndex
;
}
++
$testCurrentIndex
;
}
if
(
$dimensions
==
'3d'
)
{
$seriesPlot
=
new
PiePlot3D
(
$dataValues
);
}
else
{
if
(
$doughnut
)
{
$seriesPlot
=
new
PiePlotC
(
$dataValues
);
}
else
{
$seriesPlot
=
new
PiePlot
(
$dataValues
);
}
}
if
(
$multiplePlots
)
{
$seriesPlot
->
SetSize
((
$jLimit
-
$j
)
/
(
$jLimit
*
4
));
}
if
(
$doughnut
)
{
$seriesPlot
->
SetMidColor
(
'white'
);
}
$seriesPlot
->
SetColor
(
self
::
$_colourSet
[
self
::
$_plotColour
++
]);
if
(
count
(
$datasetLabels
)
>
0
)
$seriesPlot
->
SetLabels
(
array_fill
(
0
,
count
(
$datasetLabels
),
''
));
if
(
$dimensions
!=
'3d'
)
{
$seriesPlot
->
SetGuideLines
(
false
);
}
if
(
$j
==
0
)
{
if
(
$exploded
)
{
$seriesPlot
->
ExplodeAll
();
}
$seriesPlot
->
SetLegends
(
$datasetLabels
);
}
$this
->
_graph
->
Add
(
$seriesPlot
);
}
}
}
// function _renderPieChart()
private
function
_renderRadarChart
(
$groupCount
)
{
require_once
(
'jpgraph_radar.php'
);
$this
->
_renderRadarPlotArea
();
for
(
$groupID
=
0
;
$groupID
<
$groupCount
;
++
$groupID
)
{
$this
->
_renderPlotRadar
(
$groupID
);
}
}
// function _renderRadarChart()
private
function
_renderStockChart
(
$groupCount
)
{
require_once
(
'jpgraph_stock.php'
);
$this
->
_renderCartesianPlotArea
(
'intint'
);
for
(
$groupID
=
0
;
$groupID
<
$groupCount
;
++
$groupID
)
{
$this
->
_renderPlotStock
(
$groupID
);
}
}
// function _renderStockChart()
private
function
_renderContourChart
(
$groupCount
,
$dimensions
)
{
require_once
(
'jpgraph_contour.php'
);
$this
->
_renderCartesianPlotArea
(
'intint'
);
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$this
->
_renderPlotContour
(
$i
);
}
}
// function _renderContourChart()
private
function
_renderCombinationChart
(
$groupCount
,
$dimensions
,
$outputDestination
)
{
require_once
(
'jpgraph_line.php'
);
require_once
(
'jpgraph_bar.php'
);
require_once
(
'jpgraph_scatter.php'
);
require_once
(
'jpgraph_regstat.php'
);
require_once
(
'jpgraph_line.php'
);
$this
->
_renderCartesianPlotArea
();
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$dimensions
=
null
;
$chartType
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$i
)
->
getPlotType
();
switch
(
$chartType
)
{
case
'area3DChart'
:
$dimensions
=
'3d'
;
case
'areaChart'
:
$this
->
_renderPlotLine
(
$i
,
True
,
True
,
$dimensions
);
break
;
case
'bar3DChart'
:
$dimensions
=
'3d'
;
case
'barChart'
:
$this
->
_renderPlotBar
(
$i
,
$dimensions
);
break
;
case
'line3DChart'
:
$dimensions
=
'3d'
;
case
'lineChart'
:
$this
->
_renderPlotLine
(
$i
,
False
,
True
,
$dimensions
);
break
;
case
'scatterChart'
:
$this
->
_renderPlotScatter
(
$i
,
false
);
break
;
case
'bubbleChart'
:
$this
->
_renderPlotScatter
(
$i
,
true
);
break
;
default
:
$this
->
_graph
=
null
;
return
false
;
}
}
$this
->
_renderLegend
();
$this
->
_graph
->
Stroke
(
$outputDestination
);
return
true
;
}
// function _renderCombinationChart()
public
function
render
(
$outputDestination
)
{
self
::
$_plotColour
=
0
;
$groupCount
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupCount
();
$dimensions
=
null
;
if
(
$groupCount
==
1
)
{
$chartType
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
0
)
->
getPlotType
();
}
else
{
$chartTypes
=
array
();
for
(
$i
=
0
;
$i
<
$groupCount
;
++
$i
)
{
$chartTypes
[]
=
$this
->
_chart
->
getPlotArea
()
->
getPlotGroupByIndex
(
$i
)
->
getPlotType
();
}
$chartTypes
=
array_unique
(
$chartTypes
);
if
(
count
(
$chartTypes
)
==
1
)
{
$chartType
=
array_pop
(
$chartTypes
);
}
elseif
(
count
(
$chartTypes
)
==
0
)
{
echo
'Chart is not yet implemented<br />'
;
return
false
;
}
else
{
return
$this
->
_renderCombinationChart
(
$groupCount
,
$dimensions
,
$outputDestination
);
}
}
switch
(
$chartType
)
{
case
'area3DChart'
:
$dimensions
=
'3d'
;
case
'areaChart'
:
$this
->
_renderAreaChart
(
$groupCount
,
$dimensions
);
break
;
case
'bar3DChart'
:
$dimensions
=
'3d'
;
case
'barChart'
:
$this
->
_renderBarChart
(
$groupCount
,
$dimensions
);
break
;
case
'line3DChart'
:
$dimensions
=
'3d'
;
case
'lineChart'
:
$this
->
_renderLineChart
(
$groupCount
,
$dimensions
);
break
;
case
'pie3DChart'
:
$dimensions
=
'3d'
;
case
'pieChart'
:
$this
->
_renderPieChart
(
$groupCount
,
$dimensions
,
False
,
False
);
break
;
case
'doughnut3DChart'
:
$dimensions
=
'3d'
;
case
'doughnutChart'
:
$this
->
_renderPieChart
(
$groupCount
,
$dimensions
,
True
,
True
);
break
;
case
'scatterChart'
:
$this
->
_renderScatterChart
(
$groupCount
);
break
;
case
'bubbleChart'
:
$this
->
_renderBubbleChart
(
$groupCount
);
break
;
case
'radarChart'
:
$this
->
_renderRadarChart
(
$groupCount
);
break
;
case
'surface3DChart'
:
$dimensions
=
'3d'
;
case
'surfaceChart'
:
$this
->
_renderContourChart
(
$groupCount
,
$dimensions
);
break
;
case
'stockChart'
:
$this
->
_renderStockChart
(
$groupCount
,
$dimensions
);
break
;
default
:
echo
$chartType
.
' is not yet implemented<br />'
;
return
false
;
}
$this
->
_renderLegend
();
$this
->
_graph
->
Stroke
(
$outputDestination
);
return
true
;
}
// function render()
/**
* Create a new PHPExcel_Chart_Renderer_jpgraph
*/
public
function
__construct
(
PHPExcel_Chart
$chart
)
{
$this
->
_graph
=
null
;
$this
->
_chart
=
$chart
;
}
// function __construct()
}
// PHPExcel_Chart_Renderer_jpgraph
lib/Classes/PHPExcel/Chart/Title.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Chart_Title
*
* @category PHPExcel
* @package PHPExcel_Chart
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Chart_Title
{
/**
* Title Caption
*
* @var string
*/
private
$_caption
=
null
;
/**
* Title Layout
*
* @var PHPExcel_Chart_Layout
*/
private
$_layout
=
null
;
/**
* Create a new PHPExcel_Chart_Title
*/
public
function
__construct
(
$caption
=
null
,
PHPExcel_Chart_Layout
$layout
=
null
)
{
$this
->
_caption
=
$caption
;
$this
->
_layout
=
$layout
;
}
/**
* Get caption
*
* @return string
*/
public
function
getCaption
()
{
return
$this
->
_caption
;
}
/**
* Set caption
*
* @param string $caption
* @return PHPExcel_Chart_Title
*/
public
function
setCaption
(
$caption
=
null
)
{
$this
->
_caption
=
$caption
;
return
$this
;
}
/**
* Get Layout
*
* @return PHPExcel_Chart_Layout
*/
public
function
getLayout
()
{
return
$this
->
_layout
;
}
}
lib/Classes/PHPExcel/Comment.php
0 → 100644
View file @
48680c56
<?php
/**
* PHPExcel
*
* Copyright (c) 2006 - 2014 PHPExcel
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 1.8.0, 2014-03-02
*/
/**
* PHPExcel_Comment
*
* @category PHPExcel
* @package PHPExcel
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
*/
class
PHPExcel_Comment
implements
PHPExcel_IComparable
{
/**
* Author
*
* @var string
*/
private
$_author
;
/**
* Rich text comment
*
* @var PHPExcel_RichText
*/
private
$_text
;
/**
* Comment width (CSS style, i.e. XXpx or YYpt)
*
* @var string
*/
private
$_width
=
'96pt'
;
/**
* Left margin (CSS style, i.e. XXpx or YYpt)
*
* @var string
*/
private
$_marginLeft
=
'59.25pt'
;
/**
* Top margin (CSS style, i.e. XXpx or YYpt)
*
* @var string
*/
private
$_marginTop
=
'1.5pt'
;
/**
* Visible
*
* @var boolean
*/
private
$_visible
=
false
;
/**
* Comment height (CSS style, i.e. XXpx or YYpt)
*
* @var string
*/
private
$_height
=
'55.5pt'
;
/**
* Comment fill color
*
* @var PHPExcel_Style_Color
*/
private
$_fillColor
;
/**
* Alignment
*
* @var string
*/
private
$_alignment
;
/**
* Create a new PHPExcel_Comment
*
* @throws PHPExcel_Exception
*/
public
function
__construct
()
{
// Initialise variables
$this
->
_author
=
'Author'
;
$this
->
_text
=
new
PHPExcel_RichText
();
$this
->
_fillColor
=
new
PHPExcel_Style_Color
(
'FFFFFFE1'
);
$this
->
_alignment
=
PHPExcel_Style_Alignment
::
HORIZONTAL_GENERAL
;
}
/**
* Get Author
*
* @return string
*/
public
function
getAuthor
()
{
return
$this
->
_author
;
}
/**
* Set Author
*
* @param string $pValue
* @return PHPExcel_Comment
*/
public
function
setAuthor
(
$pValue
=
''
)
{
$this
->
_author
=
$pValue
;
return
$this
;
}
/**
* Get Rich text comment
*
* @return PHPExcel_RichText
*/
public
function
getText
()
{
return
$this
->
_text
;
}
/**
* Set Rich text comment
*
* @param PHPExcel_RichText $pValue
* @return PHPExcel_Comment
*/
public
function
setText
(
PHPExcel_RichText
$pValue
)
{
$this
->
_text
=
$pValue
;
return
$this
;
}
/**
* Get comment width (CSS style, i.e. XXpx or YYpt)
*
* @return string
*/
public
function
getWidth
()
{
return
$this
->
_width
;
}
/**
* Set comment width (CSS style, i.e. XXpx or YYpt)
*
* @param string $value
* @return PHPExcel_Comment
*/
public
function
setWidth
(
$value
=
'96pt'
)
{
$this
->
_width
=
$value
;
return
$this
;
}
/**
* Get comment height (CSS style, i.e. XXpx or YYpt)
*
* @return string
*/
public
function
getHeight
()
{
return
$this
->
_height
;
}
/**
* Set comment height (CSS style, i.e. XXpx or YYpt)
*
* @param string $value
* @return PHPExcel_Comment
*/
public
function
setHeight
(
$value
=
'55.5pt'
)
{
$this
->
_height
=
$value
;
return
$this
;
}
/**
* Get left margin (CSS style, i.e. XXpx or YYpt)
*
* @return string
*/
public
function
getMarginLeft
()
{
return
$this
->
_marginLeft
;
}
/**
* Set left margin (CSS style, i.e. XXpx or YYpt)
*
* @param string $value
* @return PHPExcel_Comment
*/
public
function
setMarginLeft
(
$value
=
'59.25pt'
)
{
$this
->
_marginLeft
=
$value
;
return
$this
;
}
/**
* Get top margin (CSS style, i.e. XXpx or YYpt)
*
* @return string
*/
public
function
getMarginTop
()
{
return
$this
->
_marginTop
;
}
/**
* Set top margin (CSS style, i.e. XXpx or YYpt)
*
* @param string $value
* @return PHPExcel_Comment
*/
public
function
setMarginTop
(
$value
=
'1.5pt'
)
{
$this
->
_marginTop
=
$value
;
return
$this
;
}
/**
* Is the comment visible by default?
*
* @return boolean
*/
public
function
getVisible
()
{
return
$this
->
_visible
;
}
/**
* Set comment default visibility
*
* @param boolean $value
* @return PHPExcel_Comment
*/
public
function
setVisible
(
$value
=
false
)
{
$this
->
_visible
=
$value
;
return
$this
;
}
/**
* Get fill color
*
* @return PHPExcel_Style_Color
*/
public
function
getFillColor
()
{
return
$this
->
_fillColor
;
}
/**
* Set Alignment
*
* @param string $pValue
* @return PHPExcel_Comment
*/
public
function
setAlignment
(
$pValue
=
PHPExcel_Style_Alignment
::
HORIZONTAL_GENERAL
)
{
$this
->
_alignment
=
$pValue
;
return
$this
;
}
/**
* Get Alignment
*
* @return string
*/
public
function
getAlignment
()
{
return
$this
->
_alignment
;
}
/**
* Get hash code
*
* @return string Hash code
*/
public
function
getHashCode
()
{
return
md5
(
$this
->
_author
.
$this
->
_text
->
getHashCode
()
.
$this
->
_width
.
$this
->
_height
.
$this
->
_marginLeft
.
$this
->
_marginTop
.
(
$this
->
_visible
?
1
:
0
)
.
$this
->
_fillColor
->
getHashCode
()
.
$this
->
_alignment
.
__CLASS__
);
}
/**
* Implement PHP __clone to create a deep clone, not just a shallow copy.
*/
public
function
__clone
()
{
$vars
=
get_object_vars
(
$this
);
foreach
(
$vars
as
$key
=>
$value
)
{
if
(
is_object
(
$value
))
{
$this
->
$key
=
clone
$value
;
}
else
{
$this
->
$key
=
$value
;
}
}
}
/**
* Convert to string
*
* @return string
*/
public
function
__toString
()
{
return
$this
->
_text
->
getPlainText
();
}
}
Prev
1
…
14
15
16
17
18
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment