Updated with JCB v2.11.2
This commit is contained in:
parent
587166aa30
commit
aa4f2b5e1b
@ -22,11 +22,11 @@ max_input_vars = 5000
|
|||||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||||
+ *Name*: [Cost Benefit Projection](https://www.staffhealthcbp.com/)
|
+ *Name*: [Cost Benefit Projection](https://www.staffhealthcbp.com/)
|
||||||
+ *First Build*: 15th June, 2012
|
+ *First Build*: 15th June, 2012
|
||||||
+ *Last Build*: 14th August, 2019
|
+ *Last Build*: 30th May, 2020
|
||||||
+ *Version*: 3.4.x
|
+ *Version*: 3.4.x
|
||||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
+ *Line count*: **84429**
|
+ *Line count*: **85996**
|
||||||
+ *File count*: **585**
|
+ *File count*: **585**
|
||||||
+ *Folder count*: **103**
|
+ *Folder count*: **103**
|
||||||
|
|
||||||
|
@ -22,11 +22,11 @@ max_input_vars = 5000
|
|||||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||||
+ *Name*: [Cost Benefit Projection](https://www.staffhealthcbp.com/)
|
+ *Name*: [Cost Benefit Projection](https://www.staffhealthcbp.com/)
|
||||||
+ *First Build*: 15th June, 2012
|
+ *First Build*: 15th June, 2012
|
||||||
+ *Last Build*: 14th August, 2019
|
+ *Last Build*: 30th May, 2020
|
||||||
+ *Version*: 3.4.x
|
+ *Version*: 3.4.x
|
||||||
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
+ *Copyright*: Copyright (C) 2015. All Rights Reserved
|
||||||
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
+ *License*: GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html
|
||||||
+ *Line count*: **84429**
|
+ *Line count*: **85996**
|
||||||
+ *File count*: **585**
|
+ *File count*: **585**
|
||||||
+ *Folder count*: **103**
|
+ *Folder count*: **103**
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage admin.css
|
@subpackage admin.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage causerisk.css
|
@subpackage causerisk.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage causesrisks.css
|
@subpackage causesrisks.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage combinedresults.css
|
@subpackage combinedresults.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage companies.css
|
@subpackage companies.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage company.css
|
@subpackage company.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage companyresults.css
|
@subpackage companyresults.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage countries.css
|
@subpackage countries.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage country.css
|
@subpackage country.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage currencies.css
|
@subpackage currencies.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage currency.css
|
@subpackage currency.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage dashboard.css
|
@subpackage dashboard.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage health_data.css
|
@subpackage health_data.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage health_data_sets.css
|
@subpackage health_data_sets.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage help_document.css
|
@subpackage help_document.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage help_documents.css
|
@subpackage help_documents.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage intervention.css
|
@subpackage intervention.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage interventions.css
|
@subpackage interventions.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage scaling_factor.css
|
@subpackage scaling_factor.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage scaling_factors.css
|
@subpackage scaling_factors.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage service_provider.css
|
@subpackage service_provider.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage service_providers.css
|
@subpackage service_providers.css
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage admin.js
|
@subpackage admin.js
|
||||||
|
181
admin/config.xml
181
admin/config.xml
@ -79,32 +79,32 @@
|
|||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="Health Economist"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="nameContributor1"
|
<field name="nameContributor1"
|
||||||
type="text"
|
type="text"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="Patrick Hanlon, M.Sc. PH"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="emailContributor1"
|
<field name="emailContributor1"
|
||||||
type="email"
|
type="email"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="Patrick.Hanlon@unibas.ch"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="linkContributor1"
|
<field name="linkContributor1"
|
||||||
type="url"
|
type="url"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="https://www.swisstph.ch/en/staff/profile/people/patrick-hanlon/"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="useContributor1"
|
<field name="useContributor1"
|
||||||
type="list"
|
type="list"
|
||||||
default="2"
|
default="0"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||||
@ -113,7 +113,7 @@
|
|||||||
</field>
|
</field>
|
||||||
<field name="showContributor1"
|
<field name="showContributor1"
|
||||||
type="list"
|
type="list"
|
||||||
default="3"
|
default="0"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
||||||
@ -132,32 +132,32 @@
|
|||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="Development Advisor"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="nameContributor2"
|
<field name="nameContributor2"
|
||||||
type="text"
|
type="text"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="Matthew Black"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="emailContributor2"
|
<field name="emailContributor2"
|
||||||
type="email"
|
type="email"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="matthew.black@giz.de"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="linkContributor2"
|
<field name="linkContributor2"
|
||||||
type="url"
|
type="url"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
||||||
size="60"
|
size="60"
|
||||||
default="http://www.giz.de"
|
default=""
|
||||||
/>
|
/>
|
||||||
<field name="useContributor2"
|
<field name="useContributor2"
|
||||||
type="list"
|
type="list"
|
||||||
default="2"
|
default="0"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
||||||
@ -165,165 +165,6 @@
|
|||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
||||||
</field>
|
</field>
|
||||||
<field name="showContributor2"
|
<field name="showContributor2"
|
||||||
type="list"
|
|
||||||
default="3"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
|
||||||
<option value="1">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
|
||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
|
||||||
<option value="3">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
|
||||||
</field>
|
|
||||||
<field type="spacer" name="spacerContributor3" hr="true" />
|
|
||||||
<field name="contributor3"
|
|
||||||
type="spacer"
|
|
||||||
class="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_THREE"
|
|
||||||
/>
|
|
||||||
<field name="titleContributor3"
|
|
||||||
type="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
|
||||||
size="60"
|
|
||||||
default="Associate Expert"
|
|
||||||
/>
|
|
||||||
<field name="nameContributor3"
|
|
||||||
type="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
|
||||||
size="60"
|
|
||||||
default="Dr. Pascal Geldsetzer"
|
|
||||||
/>
|
|
||||||
<field name="emailContributor3"
|
|
||||||
type="email"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
|
||||||
size="60"
|
|
||||||
default="pascal.geldsetzer@giz.de"
|
|
||||||
/>
|
|
||||||
<field name="linkContributor3"
|
|
||||||
type="url"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
|
||||||
size="60"
|
|
||||||
default="http://www.giz.de"
|
|
||||||
/>
|
|
||||||
<field name="useContributor3"
|
|
||||||
type="list"
|
|
||||||
default="2"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
|
||||||
<option value="1">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
|
||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
|
||||||
</field>
|
|
||||||
<field name="showContributor3"
|
|
||||||
type="list"
|
|
||||||
default="3"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
|
||||||
<option value="1">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
|
||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
|
||||||
<option value="3">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
|
||||||
</field>
|
|
||||||
<field type="spacer" name="spacerContributor4" hr="true" />
|
|
||||||
<field name="contributor4"
|
|
||||||
type="spacer"
|
|
||||||
class="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_FOUR"
|
|
||||||
/>
|
|
||||||
<field name="titleContributor4"
|
|
||||||
type="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="nameContributor4"
|
|
||||||
type="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="emailContributor4"
|
|
||||||
type="email"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="linkContributor4"
|
|
||||||
type="url"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="useContributor4"
|
|
||||||
type="list"
|
|
||||||
default="0"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
|
||||||
<option value="1">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
|
||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
|
||||||
</field>
|
|
||||||
<field name="showContributor4"
|
|
||||||
type="list"
|
|
||||||
default="0"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_DESC">
|
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_NONE</option>
|
|
||||||
<option value="1">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_BACK</option>
|
|
||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_FRONT</option>
|
|
||||||
<option value="3">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_ALL</option>
|
|
||||||
</field>
|
|
||||||
<field type="spacer" name="spacerContributor5" hr="true" />
|
|
||||||
<field name="contributor5"
|
|
||||||
type="spacer"
|
|
||||||
class="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_FIVE"
|
|
||||||
/>
|
|
||||||
<field name="titleContributor5"
|
|
||||||
type="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_TITLE_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="nameContributor5"
|
|
||||||
type="text"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_NAME_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="emailContributor5"
|
|
||||||
type="email"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_EMAIL_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="linkContributor5"
|
|
||||||
type="url"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_LINK_DESC"
|
|
||||||
size="60"
|
|
||||||
default=""
|
|
||||||
/>
|
|
||||||
<field name="useContributor5"
|
|
||||||
type="list"
|
|
||||||
default="0"
|
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_LABEL"
|
|
||||||
description="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_DESC">
|
|
||||||
<option value="0">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_NONE</option>
|
|
||||||
<option value="1">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_EMAIL</option>
|
|
||||||
<option value="2">COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_USE_WWW</option>
|
|
||||||
</field>
|
|
||||||
<field name="showContributor5"
|
|
||||||
type="list"
|
type="list"
|
||||||
default="0"
|
default="0"
|
||||||
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
label="COM_COSTBENEFITPROJECTION_CONFIG_CONTRIBUTOR_SHOW_LABEL"
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage controller.php
|
@subpackage controller.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* General Controller of Costbenefitprojection component
|
* General Controller of Costbenefitprojection component
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage ajax.json.php
|
@subpackage ajax.json.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Costbenefitprojection Ajax Controller
|
* Costbenefitprojection Ajax Controller
|
||||||
*/
|
*/
|
||||||
@ -98,7 +100,7 @@ class CostbenefitprojectionControllerAjax extends JControllerLegacy
|
|||||||
$idNameValue = $jinput->get('idName', NULL, 'CMD');
|
$idNameValue = $jinput->get('idName', NULL, 'CMD');
|
||||||
$ojectValue = $jinput->get('oject', NULL, 'STRING');
|
$ojectValue = $jinput->get('oject', NULL, 'STRING');
|
||||||
$clusterValue = $jinput->get('cluster', NULL, 'WORD');
|
$clusterValue = $jinput->get('cluster', NULL, 'WORD');
|
||||||
if($idNameValue && $ojectValue && $clusterValue && $user->id != 0)
|
if($idNameValue && $user->id != 0 && $ojectValue && $clusterValue)
|
||||||
{
|
{
|
||||||
$result = $this->getModel('ajax')->getInterventionBuildTable($idNameValue, $ojectValue, $clusterValue);
|
$result = $this->getModel('ajax')->getInterventionBuildTable($idNameValue, $ojectValue, $clusterValue);
|
||||||
}
|
}
|
||||||
@ -137,7 +139,7 @@ class CostbenefitprojectionControllerAjax extends JControllerLegacy
|
|||||||
$returnRaw = $jinput->get('raw', false, 'BOOLEAN');
|
$returnRaw = $jinput->get('raw', false, 'BOOLEAN');
|
||||||
$idNameValue = $jinput->get('idName', NULL, 'CMD');
|
$idNameValue = $jinput->get('idName', NULL, 'CMD');
|
||||||
$clusterValue = $jinput->get('cluster', NULL, 'STRING');
|
$clusterValue = $jinput->get('cluster', NULL, 'STRING');
|
||||||
if($idNameValue && $clusterValue && $user->id != 0)
|
if($idNameValue && $user->id != 0 && $clusterValue)
|
||||||
{
|
{
|
||||||
$result = $this->getModel('ajax')->getClusterData($idNameValue, $clusterValue);
|
$result = $this->getModel('ajax')->getClusterData($idNameValue, $clusterValue);
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage causerisk.php
|
@subpackage causerisk.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Causerisk Controller
|
* Causerisk Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage causesrisks.php
|
@subpackage causesrisks.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Causesrisks Controller
|
* Causesrisks Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerCausesrisks extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Causesrisks');
|
$model = $this->getModel('Causesrisks');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage combinedresults.php
|
@subpackage combinedresults.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Combinedresults Controller
|
* Combinedresults Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage companies.php
|
@subpackage companies.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Companies Controller
|
* Companies Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerCompanies extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Companies');
|
$model = $this->getModel('Companies');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
@ -124,7 +126,7 @@ class CostbenefitprojectionControllerCompanies extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// convert to string
|
// convert to string
|
||||||
$ids = implode('_', $pks);
|
$ids = implode('_', $pks);
|
||||||
$this->setRedirect(JRoute::_('index.php?option=com_costbenefitprojection&view=combinedresults&cid='.$ids, false));
|
$this->setRedirect(JRoute::_('index.php?option=com_costbenefitprojection&view=combinedresults&cid='.$ids, false));
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage company.php
|
@subpackage company.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Company Controller
|
* Company Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage companyresults.php
|
@subpackage companyresults.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Costbenefitprojection Companyresults Controller
|
* Costbenefitprojection Companyresults Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage costbenefitprojection.php
|
@subpackage costbenefitprojection.php
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage countries.php
|
@subpackage countries.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Countries Controller
|
* Countries Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerCountries extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Countries');
|
$model = $this->getModel('Countries');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage country.php
|
@subpackage country.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Country Controller
|
* Country Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage currencies.php
|
@subpackage currencies.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currencies Controller
|
* Currencies Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerCurrencies extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Currencies');
|
$model = $this->getModel('Currencies');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage currency.php
|
@subpackage currency.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currency Controller
|
* Currency Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage health_data.php
|
@subpackage health_data.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Health_data Controller
|
* Health_data Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage health_data_sets.php
|
@subpackage health_data_sets.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Health_data_sets Controller
|
* Health_data_sets Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerHealth_data_sets extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Health_data_sets');
|
$model = $this->getModel('Health_data_sets');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage help.php
|
@subpackage help.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Costbenefitprojection Help Controller
|
* Costbenefitprojection Help Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage help_document.php
|
@subpackage help_document.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Help_document Controller
|
* Help_document Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage help_documents.php
|
@subpackage help_documents.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Help_documents Controller
|
* Help_documents Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerHelp_documents extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Help_documents');
|
$model = $this->getModel('Help_documents');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage import.php
|
@subpackage import.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Costbenefitprojection Import Controller
|
* Costbenefitprojection Import Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage import_health_data_sets.php
|
@subpackage import_health_data_sets.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Costbenefitprojection Import_health_data_sets Controller
|
* Costbenefitprojection Import_health_data_sets Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage intervention.php
|
@subpackage intervention.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Intervention Controller
|
* Intervention Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage interventions.php
|
@subpackage interventions.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interventions Controller
|
* Interventions Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerInterventions extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Interventions');
|
$model = $this->getModel('Interventions');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage scaling_factor.php
|
@subpackage scaling_factor.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scaling_factor Controller
|
* Scaling_factor Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage scaling_factors.php
|
@subpackage scaling_factors.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scaling_factors Controller
|
* Scaling_factors Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerScaling_factors extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Scaling_factors');
|
$model = $this->getModel('Scaling_factors');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage service_provider.php
|
@subpackage service_provider.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service_provider Controller
|
* Service_provider Controller
|
||||||
*/
|
*/
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage service_providers.php
|
@subpackage service_providers.php
|
||||||
@ -20,6 +20,8 @@
|
|||||||
// No direct access to this file
|
// No direct access to this file
|
||||||
defined('_JEXEC') or die('Restricted access');
|
defined('_JEXEC') or die('Restricted access');
|
||||||
|
|
||||||
|
use Joomla\Utilities\ArrayHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service_providers Controller
|
* Service_providers Controller
|
||||||
*/
|
*/
|
||||||
@ -61,7 +63,7 @@ class CostbenefitprojectionControllerService_providers extends JControllerAdmin
|
|||||||
$input = JFactory::getApplication()->input;
|
$input = JFactory::getApplication()->input;
|
||||||
$pks = $input->post->get('cid', array(), 'array');
|
$pks = $input->post->get('cid', array(), 'array');
|
||||||
// Sanitize the input
|
// Sanitize the input
|
||||||
JArrayHelper::toInteger($pks);
|
ArrayHelper::toInteger($pks);
|
||||||
// Get the model
|
// Get the model
|
||||||
$model = $this->getModel('Service_providers');
|
$model = $this->getModel('Service_providers');
|
||||||
// get the data to export
|
// get the data to export
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
/-------------------------------------------------------------------------------------------------------/
|
/-------------------------------------------------------------------------------------------------------/
|
||||||
|
|
||||||
@version 3.4.x
|
@version 3.4.x
|
||||||
@build 14th August, 2019
|
@build 30th May, 2020
|
||||||
@created 15th June, 2012
|
@created 15th June, 2012
|
||||||
@package Cost Benefit Projection
|
@package Cost Benefit Projection
|
||||||
@subpackage costbenefitprojection.php
|
@subpackage costbenefitprojection.php
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,89 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
PHPExcel_Autoloader::Register();
|
|
||||||
// As we always try to run the autoloader before anything else, we can use it to do a few
|
|
||||||
// simple checks and initialisations
|
|
||||||
//PHPExcel_Shared_ZipStreamWrapper::register();
|
|
||||||
// check mbstring.func_overload
|
|
||||||
if (ini_get('mbstring.func_overload') & 2) {
|
|
||||||
throw new PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
|
|
||||||
}
|
|
||||||
PHPExcel_Shared_String::buildCharacterSets();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Autoloader
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Autoloader
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Register the Autoloader with SPL
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function Register() {
|
|
||||||
if (function_exists('__autoload')) {
|
|
||||||
// Register any existing autoloader function with SPL, so we don't get any clashes
|
|
||||||
spl_autoload_register('__autoload');
|
|
||||||
}
|
|
||||||
// Register ourselves with SPL
|
|
||||||
if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
|
|
||||||
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'), true, true);
|
|
||||||
} else {
|
|
||||||
return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));
|
|
||||||
}
|
|
||||||
} // function Register()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Autoload a class identified by name
|
|
||||||
*
|
|
||||||
* @param string $pClassName Name of the object to load
|
|
||||||
*/
|
|
||||||
public static function Load($pClassName){
|
|
||||||
if ((class_exists($pClassName,FALSE)) || (strpos($pClassName, 'PHPExcel') !== 0)) {
|
|
||||||
// Either already loaded, or not a PHPExcel class request
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pClassFilePath = PHPEXCEL_ROOT .
|
|
||||||
str_replace('_',DIRECTORY_SEPARATOR,$pClassName) .
|
|
||||||
'.php';
|
|
||||||
|
|
||||||
if ((file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) {
|
|
||||||
// Can't load
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
require($pClassFilePath);
|
|
||||||
} // function Load()
|
|
||||||
|
|
||||||
}
|
|
@ -1,295 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_APC
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_APC extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prefix used to uniquely identify cache data for this worksheet
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_cachePrefix = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache timeout
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_cacheTime = 600;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
if (!apc_store($this->_cachePrefix.$this->_currentObjectID.'.cache',serialize($this->_currentObject),$this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in APC');
|
|
||||||
}
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
$this->_cellCache[$pCoord] = true;
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord) {
|
|
||||||
// Check if the requested entry is the current object, or exists in the cache
|
|
||||||
if (parent::isDataSet($pCoord)) {
|
|
||||||
if ($this->_currentObjectID == $pCoord) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// Check if the requested entry still exists in apc
|
|
||||||
$success = apc_fetch($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
if ($success === FALSE) {
|
|
||||||
// Entry no longer exists in APC, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache');
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} // function isDataSet()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (parent::isDataSet($pCoord)) {
|
|
||||||
$obj = apc_fetch($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
if ($obj === FALSE) {
|
|
||||||
// Entry no longer exists in APC, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in APC cache');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = unserialize($obj);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord) {
|
|
||||||
// Delete the entry from APC
|
|
||||||
apc_delete($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
|
|
||||||
// Delete the entry from our cell address array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
} // function deleteCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::copyCellCollection($parent);
|
|
||||||
// Get a new id for the new file name
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$newCachePrefix = substr(md5($baseUnique),0,8).'.';
|
|
||||||
$cacheList = $this->getCellList();
|
|
||||||
foreach($cacheList as $cellID) {
|
|
||||||
if ($cellID != $this->_currentObjectID) {
|
|
||||||
$obj = apc_fetch($this->_cachePrefix.$cellID.'.cache');
|
|
||||||
if ($obj === FALSE) {
|
|
||||||
// Entry no longer exists in APC, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($cellID);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in APC');
|
|
||||||
}
|
|
||||||
if (!apc_store($newCachePrefix.$cellID.'.cache',$obj,$this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in APC');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_cachePrefix = $newCachePrefix;
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if ($this->_currentObject !== NULL) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flush the APC cache
|
|
||||||
$this->__destruct();
|
|
||||||
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
* @param array of mixed $arguments Additional initialisation arguments
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
|
|
||||||
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
|
|
||||||
|
|
||||||
if ($this->_cachePrefix === NULL) {
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
|
|
||||||
$this->_cacheTime = $cacheTime;
|
|
||||||
|
|
||||||
parent::__construct($parent);
|
|
||||||
}
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
$cacheList = $this->getCellList();
|
|
||||||
foreach($cacheList as $cellID) {
|
|
||||||
apc_delete($this->_cachePrefix.$cellID.'.cache');
|
|
||||||
}
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
if (!function_exists('apc_store')) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
if (apc_sma_info() === FALSE) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,347 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_CacheBase
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
abstract class PHPExcel_CachedObjectStorage_CacheBase {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parent worksheet
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Worksheet
|
|
||||||
*/
|
|
||||||
protected $_parent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The currently active Cell
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Cell
|
|
||||||
*/
|
|
||||||
protected $_currentObject = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Coordinate address of the currently active Cell
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $_currentObjectID = null;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flag indicating whether the currently active Cell requires saving
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of cells or cell pointers for the worksheet cells held in this cache,
|
|
||||||
* and indexed by their coordinate address within the worksheet
|
|
||||||
*
|
|
||||||
* @var array of mixed
|
|
||||||
*/
|
|
||||||
protected $_cellCache = array();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent) {
|
|
||||||
// Set our parent worksheet.
|
|
||||||
// This is maintained within the cache controller to facilitate re-attaching it to PHPExcel_Cell objects when
|
|
||||||
// they are woken from a serialized state
|
|
||||||
$this->_parent = $parent;
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the parent worksheet for this cell collection
|
|
||||||
*
|
|
||||||
* @return PHPExcel_Worksheet
|
|
||||||
*/
|
|
||||||
public function getParent()
|
|
||||||
{
|
|
||||||
return $this->_parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// Check if the requested entry exists in the cache
|
|
||||||
return isset($this->_cellCache[$pCoord]);
|
|
||||||
} // function isDataSet()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move a cell object from one address to another
|
|
||||||
*
|
|
||||||
* @param string $fromAddress Current address of the cell to move
|
|
||||||
* @param string $toAddress Destination address of the cell to move
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function moveCell($fromAddress, $toAddress) {
|
|
||||||
if ($fromAddress === $this->_currentObjectID) {
|
|
||||||
$this->_currentObjectID = $toAddress;
|
|
||||||
}
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
if (isset($this->_cellCache[$fromAddress])) {
|
|
||||||
$this->_cellCache[$toAddress] = &$this->_cellCache[$fromAddress];
|
|
||||||
unset($this->_cellCache[$fromAddress]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
} // function moveCell()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function updateCacheData(PHPExcel_Cell $cell) {
|
|
||||||
return $this->addCacheData($cell->getCoordinate(),$cell);
|
|
||||||
} // function updateCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_object($this->_cellCache[$pCoord])) {
|
|
||||||
$this->_cellCache[$pCoord]->detach();
|
|
||||||
unset($this->_cellCache[$pCoord]);
|
|
||||||
}
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
} // function deleteCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
return array_keys($this->_cellCache);
|
|
||||||
} // function getCellList()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sort the list of all cell addresses currently held in cache by row and column
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getSortedCellList() {
|
|
||||||
$sortKeys = array();
|
|
||||||
foreach ($this->getCellList() as $coord) {
|
|
||||||
sscanf($coord,'%[A-Z]%d', $column, $row);
|
|
||||||
$sortKeys[sprintf('%09d%3s',$row,$column)] = $coord;
|
|
||||||
}
|
|
||||||
ksort($sortKeys);
|
|
||||||
|
|
||||||
return array_values($sortKeys);
|
|
||||||
} // function sortCellList()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get highest worksheet column and highest row that have cell records
|
|
||||||
*
|
|
||||||
* @return array Highest column name and highest row number
|
|
||||||
*/
|
|
||||||
public function getHighestRowAndColumn()
|
|
||||||
{
|
|
||||||
// Lookup highest column and highest row
|
|
||||||
$col = array('A' => '1A');
|
|
||||||
$row = array(1);
|
|
||||||
foreach ($this->getCellList() as $coord) {
|
|
||||||
sscanf($coord,'%[A-Z]%d', $c, $r);
|
|
||||||
$row[$r] = $r;
|
|
||||||
$col[$c] = strlen($c).$c;
|
|
||||||
}
|
|
||||||
if (!empty($row)) {
|
|
||||||
// Determine highest column and row
|
|
||||||
$highestRow = max($row);
|
|
||||||
$highestColumn = substr(max($col),1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return array( 'row' => $highestRow,
|
|
||||||
'column' => $highestColumn
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the cell address of the currently active cell object
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getCurrentAddress()
|
|
||||||
{
|
|
||||||
return $this->_currentObjectID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the column address of the currently active cell object
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getCurrentColumn()
|
|
||||||
{
|
|
||||||
sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row);
|
|
||||||
return $column;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the row address of the currently active cell object
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function getCurrentRow()
|
|
||||||
{
|
|
||||||
sscanf($this->_currentObjectID, '%[A-Z]%d', $column, $row);
|
|
||||||
return (integer) $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get highest worksheet column
|
|
||||||
*
|
|
||||||
* @param string $row Return the highest column for the specified row,
|
|
||||||
* or the highest column of any row if no row number is passed
|
|
||||||
* @return string Highest column name
|
|
||||||
*/
|
|
||||||
public function getHighestColumn($row = null)
|
|
||||||
{
|
|
||||||
if ($row == null) {
|
|
||||||
$colRow = $this->getHighestRowAndColumn();
|
|
||||||
return $colRow['column'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$columnList = array(1);
|
|
||||||
foreach ($this->getCellList() as $coord) {
|
|
||||||
sscanf($coord,'%[A-Z]%d', $c, $r);
|
|
||||||
if ($r != $row) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$columnList[] = PHPExcel_Cell::columnIndexFromString($c);
|
|
||||||
}
|
|
||||||
return PHPExcel_Cell::stringFromColumnIndex(max($columnList) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get highest worksheet row
|
|
||||||
*
|
|
||||||
* @param string $column Return the highest row for the specified column,
|
|
||||||
* or the highest row of any column if no column letter is passed
|
|
||||||
* @return int Highest row number
|
|
||||||
*/
|
|
||||||
public function getHighestRow($column = null)
|
|
||||||
{
|
|
||||||
if ($column == null) {
|
|
||||||
$colRow = $this->getHighestRowAndColumn();
|
|
||||||
return $colRow['row'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$rowList = array(0);
|
|
||||||
foreach ($this->getCellList() as $coord) {
|
|
||||||
sscanf($coord,'%[A-Z]%d', $c, $r);
|
|
||||||
if ($c != $column) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$rowList[] = $r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return max($rowList);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a unique ID for cache referencing
|
|
||||||
*
|
|
||||||
* @return string Unique Reference
|
|
||||||
*/
|
|
||||||
protected function _getUniqueID() {
|
|
||||||
if (function_exists('posix_getpid')) {
|
|
||||||
$baseUnique = posix_getpid();
|
|
||||||
} else {
|
|
||||||
$baseUnique = mt_rand();
|
|
||||||
}
|
|
||||||
return uniqid($baseUnique,true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
$this->_currentCellIsDirty;
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
$this->_parent = $parent;
|
|
||||||
if (($this->_currentObject !== NULL) && (is_object($this->_currentObject))) {
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
}
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,219 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_DiscISAM
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_DiscISAM extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the file for this cache
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_fileName = NULL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File handle for this cache file
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
private $_fileHandle = NULL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Directory/Folder where the cache file is located
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_cacheDirectory = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
fseek($this->_fileHandle,0,SEEK_END);
|
|
||||||
|
|
||||||
$this->_cellCache[$this->_currentObjectID] = array(
|
|
||||||
'ptr' => ftell($this->_fileHandle),
|
|
||||||
'sz' => fwrite($this->_fileHandle, serialize($this->_currentObject))
|
|
||||||
);
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
fseek($this->_fileHandle, $this->_cellCache[$pCoord]['ptr']);
|
|
||||||
$this->_currentObject = unserialize(fread($this->_fileHandle, $this->_cellCache[$pCoord]['sz']));
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::copyCellCollection($parent);
|
|
||||||
// Get a new id for the new file name
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$newFileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
|
|
||||||
// Copy the existing cell cache file
|
|
||||||
copy ($this->_fileName,$newFileName);
|
|
||||||
$this->_fileName = $newFileName;
|
|
||||||
// Open the copied cell cache file
|
|
||||||
$this->_fileHandle = fopen($this->_fileName,'a+');
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
|
|
||||||
// Close down the temporary cache file
|
|
||||||
$this->__destruct();
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
* @param array of mixed $arguments Additional initialisation arguments
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
|
|
||||||
$this->_cacheDirectory = ((isset($arguments['dir'])) && ($arguments['dir'] !== NULL))
|
|
||||||
? $arguments['dir']
|
|
||||||
: PHPExcel_Shared_File::sys_get_temp_dir();
|
|
||||||
|
|
||||||
parent::__construct($parent);
|
|
||||||
if (is_null($this->_fileHandle)) {
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$this->_fileName = $this->_cacheDirectory.'/PHPExcel.'.$baseUnique.'.cache';
|
|
||||||
$this->_fileHandle = fopen($this->_fileName,'a+');
|
|
||||||
}
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
if (!is_null($this->_fileHandle)) {
|
|
||||||
fclose($this->_fileHandle);
|
|
||||||
unlink($this->_fileName);
|
|
||||||
}
|
|
||||||
$this->_fileHandle = null;
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
}
|
|
@ -1,112 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_ICache
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
interface PHPExcel_CachedObjectStorage_ICache
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function updateCacheData(PHPExcel_Cell $cell);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetch a cell from cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to retrieve
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the list of all cell addresses currently held in cache sorted by column and row
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getSortedCellList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable();
|
|
||||||
|
|
||||||
}
|
|
@ -1,152 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_Igbinary
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_Igbinary extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
$this->_cellCache[$this->_currentObjectID] = igbinary_serialize($this->_currentObject);
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = igbinary_unserialize($this->_cellCache[$pCoord]);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
if (!function_exists('igbinary_serialize')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,312 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_Memcache
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_Memcache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prefix used to uniquely identify cache data for this worksheet
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_cachePrefix = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache timeout
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_cacheTime = 600;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Memcache interface
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
private $_memcache = null;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
$obj = serialize($this->_currentObject);
|
|
||||||
if (!$this->_memcache->replace($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) {
|
|
||||||
if (!$this->_memcache->add($this->_cachePrefix.$this->_currentObjectID.'.cache',$obj,NULL,$this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in MemCache');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
$this->_cellCache[$pCoord] = true;
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @return boolean
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord) {
|
|
||||||
// Check if the requested entry is the current object, or exists in the cache
|
|
||||||
if (parent::isDataSet($pCoord)) {
|
|
||||||
if ($this->_currentObjectID == $pCoord) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// Check if the requested entry still exists in Memcache
|
|
||||||
$success = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
if ($success === false) {
|
|
||||||
// Entry no longer exists in Memcache, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in MemCache');
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} // function isDataSet()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (parent::isDataSet($pCoord)) {
|
|
||||||
$obj = $this->_memcache->get($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
if ($obj === false) {
|
|
||||||
// Entry no longer exists in Memcache, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in MemCache');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = unserialize($obj);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord) {
|
|
||||||
// Delete the entry from Memcache
|
|
||||||
$this->_memcache->delete($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
|
|
||||||
// Delete the entry from our cell address array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
} // function deleteCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::copyCellCollection($parent);
|
|
||||||
// Get a new id for the new file name
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$newCachePrefix = substr(md5($baseUnique),0,8).'.';
|
|
||||||
$cacheList = $this->getCellList();
|
|
||||||
foreach($cacheList as $cellID) {
|
|
||||||
if ($cellID != $this->_currentObjectID) {
|
|
||||||
$obj = $this->_memcache->get($this->_cachePrefix.$cellID.'.cache');
|
|
||||||
if ($obj === false) {
|
|
||||||
// Entry no longer exists in Memcache, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($cellID);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in MemCache');
|
|
||||||
}
|
|
||||||
if (!$this->_memcache->add($newCachePrefix.$cellID.'.cache',$obj,NULL,$this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in MemCache');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_cachePrefix = $newCachePrefix;
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flush the Memcache cache
|
|
||||||
$this->__destruct();
|
|
||||||
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
* @param array of mixed $arguments Additional initialisation arguments
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
|
|
||||||
$memcacheServer = (isset($arguments['memcacheServer'])) ? $arguments['memcacheServer'] : 'localhost';
|
|
||||||
$memcachePort = (isset($arguments['memcachePort'])) ? $arguments['memcachePort'] : 11211;
|
|
||||||
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
|
|
||||||
|
|
||||||
if (is_null($this->_cachePrefix)) {
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
|
|
||||||
|
|
||||||
// Set a new Memcache object and connect to the Memcache server
|
|
||||||
$this->_memcache = new Memcache();
|
|
||||||
if (!$this->_memcache->addServer($memcacheServer, $memcachePort, false, 50, 5, 5, true, array($this, 'failureCallback'))) {
|
|
||||||
throw new PHPExcel_Exception('Could not connect to MemCache server at '.$memcacheServer.':'.$memcachePort);
|
|
||||||
}
|
|
||||||
$this->_cacheTime = $cacheTime;
|
|
||||||
|
|
||||||
parent::__construct($parent);
|
|
||||||
}
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Memcache error handler
|
|
||||||
*
|
|
||||||
* @param string $host Memcache server
|
|
||||||
* @param integer $port Memcache port
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function failureCallback($host, $port) {
|
|
||||||
throw new PHPExcel_Exception('memcache '.$host.':'.$port.' failed');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
$cacheList = $this->getCellList();
|
|
||||||
foreach($cacheList as $cellID) {
|
|
||||||
$this->_memcache->delete($this->_cachePrefix.$cellID.'.cache');
|
|
||||||
}
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
if (!function_exists('memcache_add')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,125 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_Memory
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_Memory extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dummy method callable from CacheBase, but unused by Memory cache
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
$this->_cellCache[$pCoord] = $cell;
|
|
||||||
|
|
||||||
// Set current entry to the new/updated entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
|
||||||
$this->_currentObjectID = NULL;
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_cellCache[$pCoord];
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::copyCellCollection($parent);
|
|
||||||
|
|
||||||
$newCollection = array();
|
|
||||||
foreach($this->_cellCache as $k => &$cell) {
|
|
||||||
$newCollection[$k] = clone $cell;
|
|
||||||
$newCollection[$k]->attach($this);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_cellCache = $newCollection;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
// Because cells are all stored as intact objects in memory, we need to detach each one from the parent
|
|
||||||
foreach($this->_cellCache as $k => &$cell) {
|
|
||||||
$cell->detach();
|
|
||||||
$this->_cellCache[$k] = null;
|
|
||||||
}
|
|
||||||
unset($cell);
|
|
||||||
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
}
|
|
@ -1,137 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_MemoryGZip
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_MemoryGZip extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
$this->_cellCache[$this->_currentObjectID] = gzdeflate(serialize($this->_currentObject));
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = unserialize(gzinflate($this->_cellCache[$pCoord]));
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
}
|
|
@ -1,137 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_MemorySerialized
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_MemorySerialized extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
$this->_cellCache[$this->_currentObjectID] = serialize($this->_currentObject);
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = unserialize($this->_cellCache[$pCoord]);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
}
|
|
@ -1,206 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_PHPTemp
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_PHPTemp extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the file for this cache
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_fileHandle = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Memory limit to use before reverting to file cache
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_memoryCacheSize = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
fseek($this->_fileHandle,0,SEEK_END);
|
|
||||||
|
|
||||||
$this->_cellCache[$this->_currentObjectID] = array(
|
|
||||||
'ptr' => ftell($this->_fileHandle),
|
|
||||||
'sz' => fwrite($this->_fileHandle, serialize($this->_currentObject))
|
|
||||||
);
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
if (!isset($this->_cellCache[$pCoord])) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
fseek($this->_fileHandle,$this->_cellCache[$pCoord]['ptr']);
|
|
||||||
$this->_currentObject = unserialize(fread($this->_fileHandle,$this->_cellCache[$pCoord]['sz']));
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::copyCellCollection($parent);
|
|
||||||
// Open a new stream for the cell cache data
|
|
||||||
$newFileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');
|
|
||||||
// Copy the existing cell cache data to the new stream
|
|
||||||
fseek($this->_fileHandle,0);
|
|
||||||
while (!feof($this->_fileHandle)) {
|
|
||||||
fwrite($newFileHandle,fread($this->_fileHandle, 1024));
|
|
||||||
}
|
|
||||||
$this->_fileHandle = $newFileHandle;
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
|
|
||||||
// Close down the php://temp file
|
|
||||||
$this->__destruct();
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
* @param array of mixed $arguments Additional initialisation arguments
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
|
|
||||||
$this->_memoryCacheSize = (isset($arguments['memoryCacheSize'])) ? $arguments['memoryCacheSize'] : '1MB';
|
|
||||||
|
|
||||||
parent::__construct($parent);
|
|
||||||
if (is_null($this->_fileHandle)) {
|
|
||||||
$this->_fileHandle = fopen('php://temp/maxmemory:'.$this->_memoryCacheSize,'a+');
|
|
||||||
}
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
if (!is_null($this->_fileHandle)) {
|
|
||||||
fclose($this->_fileHandle);
|
|
||||||
}
|
|
||||||
$this->_fileHandle = null;
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
}
|
|
@ -1,306 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_SQLite
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_SQLite extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database table name
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_TableName = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database handle
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
private $_DBHandle = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
if (!$this->_DBHandle->queryExec("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES('".$this->_currentObjectID."','".sqlite_escape_string(serialize($this->_currentObject))."')"))
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
$query = "SELECT value FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'";
|
|
||||||
$cellResultSet = $this->_DBHandle->query($query,SQLITE_ASSOC);
|
|
||||||
if ($cellResultSet === false) {
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
} elseif ($cellResultSet->numRows() == 0) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
|
|
||||||
$cellResult = $cellResultSet->fetchSingle();
|
|
||||||
$this->_currentObject = unserialize($cellResult);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set for an indexed cell?
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the requested entry exists in the cache
|
|
||||||
$query = "SELECT id FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'";
|
|
||||||
$cellResultSet = $this->_DBHandle->query($query,SQLITE_ASSOC);
|
|
||||||
if ($cellResultSet === false) {
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
} elseif ($cellResultSet->numRows() == 0) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} // function isDataSet()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the requested entry exists in the cache
|
|
||||||
$query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$pCoord."'";
|
|
||||||
if (!$this->_DBHandle->queryExec($query))
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
} // function deleteCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move a cell object from one address to another
|
|
||||||
*
|
|
||||||
* @param string $fromAddress Current address of the cell to move
|
|
||||||
* @param string $toAddress Destination address of the cell to move
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function moveCell($fromAddress, $toAddress) {
|
|
||||||
if ($fromAddress === $this->_currentObjectID) {
|
|
||||||
$this->_currentObjectID = $toAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = "DELETE FROM kvp_".$this->_TableName." WHERE id='".$toAddress."'";
|
|
||||||
$result = $this->_DBHandle->exec($query);
|
|
||||||
if ($result === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
$query = "UPDATE kvp_".$this->_TableName." SET id='".$toAddress."' WHERE id='".$fromAddress."'";
|
|
||||||
$result = $this->_DBHandle->exec($query);
|
|
||||||
if ($result === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
} // function moveCell()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = "SELECT id FROM kvp_".$this->_TableName;
|
|
||||||
$cellIdsResult = $this->_DBHandle->unbufferedQuery($query,SQLITE_ASSOC);
|
|
||||||
if ($cellIdsResult === false)
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
|
|
||||||
$cellKeys = array();
|
|
||||||
foreach($cellIdsResult as $row) {
|
|
||||||
$cellKeys[] = $row['id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $cellKeys;
|
|
||||||
} // function getCellList()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
$this->_currentCellIsDirty;
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Get a new id for the new table name
|
|
||||||
$tableName = str_replace('.','_',$this->_getUniqueID());
|
|
||||||
if (!$this->_DBHandle->queryExec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
|
|
||||||
AS SELECT * FROM kvp_'.$this->_TableName))
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
|
|
||||||
// Copy the existing cell cache file
|
|
||||||
$this->_TableName = $tableName;
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
|
|
||||||
// Close down the temporary cache file
|
|
||||||
$this->__destruct();
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::__construct($parent);
|
|
||||||
if (is_null($this->_DBHandle)) {
|
|
||||||
$this->_TableName = str_replace('.','_',$this->_getUniqueID());
|
|
||||||
$_DBName = ':memory:';
|
|
||||||
|
|
||||||
$this->_DBHandle = new SQLiteDatabase($_DBName);
|
|
||||||
if ($this->_DBHandle === false)
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
if (!$this->_DBHandle->queryExec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)'))
|
|
||||||
throw new PHPExcel_Exception(sqlite_error_string($this->_DBHandle->lastError()));
|
|
||||||
}
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
if (!is_null($this->_DBHandle)) {
|
|
||||||
$this->_DBHandle->queryExec('DROP TABLE kvp_'.$this->_TableName);
|
|
||||||
}
|
|
||||||
$this->_DBHandle = null;
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
if (!function_exists('sqlite_open')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,345 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_SQLite3
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_SQLite3 extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database table name
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_TableName = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database handle
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
private $_DBHandle = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepared statement for a SQLite3 select query
|
|
||||||
*
|
|
||||||
* @var SQLite3Stmt
|
|
||||||
*/
|
|
||||||
private $_selectQuery;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepared statement for a SQLite3 insert query
|
|
||||||
*
|
|
||||||
* @var SQLite3Stmt
|
|
||||||
*/
|
|
||||||
private $_insertQuery;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepared statement for a SQLite3 update query
|
|
||||||
*
|
|
||||||
* @var SQLite3Stmt
|
|
||||||
*/
|
|
||||||
private $_updateQuery;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepared statement for a SQLite3 delete query
|
|
||||||
*
|
|
||||||
* @var SQLite3Stmt
|
|
||||||
*/
|
|
||||||
private $_deleteQuery;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
$this->_insertQuery->bindValue('id',$this->_currentObjectID,SQLITE3_TEXT);
|
|
||||||
$this->_insertQuery->bindValue('data',serialize($this->_currentObject),SQLITE3_BLOB);
|
|
||||||
$result = $this->_insertQuery->execute();
|
|
||||||
if ($result === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
$this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
|
|
||||||
$cellResult = $this->_selectQuery->execute();
|
|
||||||
if ($cellResult === FALSE) {
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
}
|
|
||||||
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
|
|
||||||
if ($cellData === FALSE) {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
|
|
||||||
$this->_currentObject = unserialize($cellData['value']);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set for an indexed cell?
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the requested entry exists in the cache
|
|
||||||
$this->_selectQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
|
|
||||||
$cellResult = $this->_selectQuery->execute();
|
|
||||||
if ($cellResult === FALSE) {
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
}
|
|
||||||
$cellData = $cellResult->fetchArray(SQLITE3_ASSOC);
|
|
||||||
|
|
||||||
return ($cellData === FALSE) ? FALSE : TRUE;
|
|
||||||
} // function isDataSet()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObjectID = $this->_currentObject = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the requested entry exists in the cache
|
|
||||||
$this->_deleteQuery->bindValue('id',$pCoord,SQLITE3_TEXT);
|
|
||||||
$result = $this->_deleteQuery->execute();
|
|
||||||
if ($result === FALSE)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
$this->_currentCellIsDirty = FALSE;
|
|
||||||
} // function deleteCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Move a cell object from one address to another
|
|
||||||
*
|
|
||||||
* @param string $fromAddress Current address of the cell to move
|
|
||||||
* @param string $toAddress Destination address of the cell to move
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function moveCell($fromAddress, $toAddress) {
|
|
||||||
if ($fromAddress === $this->_currentObjectID) {
|
|
||||||
$this->_currentObjectID = $toAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_deleteQuery->bindValue('id',$toAddress,SQLITE3_TEXT);
|
|
||||||
$result = $this->_deleteQuery->execute();
|
|
||||||
if ($result === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
$this->_updateQuery->bindValue('toid',$toAddress,SQLITE3_TEXT);
|
|
||||||
$this->_updateQuery->bindValue('fromid',$fromAddress,SQLITE3_TEXT);
|
|
||||||
$result = $this->_updateQuery->execute();
|
|
||||||
if ($result === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
} // function moveCell()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
$query = "SELECT id FROM kvp_".$this->_TableName;
|
|
||||||
$cellIdsResult = $this->_DBHandle->query($query);
|
|
||||||
if ($cellIdsResult === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
$cellKeys = array();
|
|
||||||
while ($row = $cellIdsResult->fetchArray(SQLITE3_ASSOC)) {
|
|
||||||
$cellKeys[] = $row['id'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $cellKeys;
|
|
||||||
} // function getCellList()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
$this->_currentCellIsDirty;
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Get a new id for the new table name
|
|
||||||
$tableName = str_replace('.','_',$this->_getUniqueID());
|
|
||||||
if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$tableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)
|
|
||||||
AS SELECT * FROM kvp_'.$this->_TableName))
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
|
|
||||||
// Copy the existing cell cache file
|
|
||||||
$this->_TableName = $tableName;
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
|
|
||||||
// Close down the temporary cache file
|
|
||||||
$this->__destruct();
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::__construct($parent);
|
|
||||||
if (is_null($this->_DBHandle)) {
|
|
||||||
$this->_TableName = str_replace('.','_',$this->_getUniqueID());
|
|
||||||
$_DBName = ':memory:';
|
|
||||||
|
|
||||||
$this->_DBHandle = new SQLite3($_DBName);
|
|
||||||
if ($this->_DBHandle === false)
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
if (!$this->_DBHandle->exec('CREATE TABLE kvp_'.$this->_TableName.' (id VARCHAR(12) PRIMARY KEY, value BLOB)'))
|
|
||||||
throw new PHPExcel_Exception($this->_DBHandle->lastErrorMsg());
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_selectQuery = $this->_DBHandle->prepare("SELECT value FROM kvp_".$this->_TableName." WHERE id = :id");
|
|
||||||
$this->_insertQuery = $this->_DBHandle->prepare("INSERT OR REPLACE INTO kvp_".$this->_TableName." VALUES(:id,:data)");
|
|
||||||
$this->_updateQuery = $this->_DBHandle->prepare("UPDATE kvp_".$this->_TableName." SET id=:toId WHERE id=:fromId");
|
|
||||||
$this->_deleteQuery = $this->_DBHandle->prepare("DELETE FROM kvp_".$this->_TableName." WHERE id = :id");
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
if (!is_null($this->_DBHandle)) {
|
|
||||||
$this->_DBHandle->exec('DROP TABLE kvp_'.$this->_TableName);
|
|
||||||
$this->_DBHandle->close();
|
|
||||||
}
|
|
||||||
$this->_DBHandle = null;
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
if (!class_exists('SQLite3',FALSE)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,294 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorage_Wincache
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorage_Wincache extends PHPExcel_CachedObjectStorage_CacheBase implements PHPExcel_CachedObjectStorage_ICache {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prefix used to uniquely identify cache data for this worksheet
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_cachePrefix = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cache timeout
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_cacheTime = 600;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Store cell data in cache for the current cell object if it's "dirty",
|
|
||||||
* and the 'nullify' the current cell object
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
protected function _storeData() {
|
|
||||||
if ($this->_currentCellIsDirty && !empty($this->_currentObjectID)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
|
|
||||||
$obj = serialize($this->_currentObject);
|
|
||||||
if (wincache_ucache_exists($this->_cachePrefix.$this->_currentObjectID.'.cache')) {
|
|
||||||
if (!wincache_ucache_set($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in WinCache');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (!wincache_ucache_add($this->_cachePrefix.$this->_currentObjectID.'.cache', $obj, $this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$this->_currentObjectID.' in WinCache');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_currentCellIsDirty = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_currentObjectID = $this->_currentObject = null;
|
|
||||||
} // function _storeData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add or Update a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to update
|
|
||||||
* @param PHPExcel_Cell $cell Cell to update
|
|
||||||
* @return PHPExcel_Cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function addCacheData($pCoord, PHPExcel_Cell $cell) {
|
|
||||||
if (($pCoord !== $this->_currentObjectID) && ($this->_currentObjectID !== null)) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
$this->_cellCache[$pCoord] = true;
|
|
||||||
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = $cell;
|
|
||||||
$this->_currentCellIsDirty = true;
|
|
||||||
|
|
||||||
return $cell;
|
|
||||||
} // function addCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is a value set in the current PHPExcel_CachedObjectStorage_ICache for an indexed cell?
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function isDataSet($pCoord) {
|
|
||||||
// Check if the requested entry is the current object, or exists in the cache
|
|
||||||
if (parent::isDataSet($pCoord)) {
|
|
||||||
if ($this->_currentObjectID == $pCoord) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// Check if the requested entry still exists in cache
|
|
||||||
$success = wincache_ucache_exists($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
if ($success === false) {
|
|
||||||
// Entry no longer exists in Wincache, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in WinCache');
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
} // function isDataSet()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get cell at a specific coordinate
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate of the cell
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
* @return PHPExcel_Cell Cell that was found, or null if not found
|
|
||||||
*/
|
|
||||||
public function getCacheData($pCoord) {
|
|
||||||
if ($pCoord === $this->_currentObjectID) {
|
|
||||||
return $this->_currentObject;
|
|
||||||
}
|
|
||||||
$this->_storeData();
|
|
||||||
|
|
||||||
// Check if the entry that has been requested actually exists
|
|
||||||
$obj = null;
|
|
||||||
if (parent::isDataSet($pCoord)) {
|
|
||||||
$success = false;
|
|
||||||
$obj = wincache_ucache_get($this->_cachePrefix.$pCoord.'.cache', $success);
|
|
||||||
if ($success === false) {
|
|
||||||
// Entry no longer exists in WinCache, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$pCoord.' no longer exists in WinCache');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Return null if requested entry doesn't exist in cache
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set current entry to the requested entry
|
|
||||||
$this->_currentObjectID = $pCoord;
|
|
||||||
$this->_currentObject = unserialize($obj);
|
|
||||||
// Re-attach this as the cell's parent
|
|
||||||
$this->_currentObject->attach($this);
|
|
||||||
|
|
||||||
// Return requested entry
|
|
||||||
return $this->_currentObject;
|
|
||||||
} // function getCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a list of all cell addresses currently held in cache
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getCellList() {
|
|
||||||
if ($this->_currentObjectID !== null) {
|
|
||||||
$this->_storeData();
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getCellList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a cell in cache identified by coordinate address
|
|
||||||
*
|
|
||||||
* @param string $pCoord Coordinate address of the cell to delete
|
|
||||||
* @throws PHPExcel_Exception
|
|
||||||
*/
|
|
||||||
public function deleteCacheData($pCoord) {
|
|
||||||
// Delete the entry from Wincache
|
|
||||||
wincache_ucache_delete($this->_cachePrefix.$pCoord.'.cache');
|
|
||||||
|
|
||||||
// Delete the entry from our cell address array
|
|
||||||
parent::deleteCacheData($pCoord);
|
|
||||||
} // function deleteCacheData()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clone the cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The new worksheet
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function copyCellCollection(PHPExcel_Worksheet $parent) {
|
|
||||||
parent::copyCellCollection($parent);
|
|
||||||
// Get a new id for the new file name
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$newCachePrefix = substr(md5($baseUnique),0,8).'.';
|
|
||||||
$cacheList = $this->getCellList();
|
|
||||||
foreach($cacheList as $cellID) {
|
|
||||||
if ($cellID != $this->_currentObjectID) {
|
|
||||||
$success = false;
|
|
||||||
$obj = wincache_ucache_get($this->_cachePrefix.$cellID.'.cache', $success);
|
|
||||||
if ($success === false) {
|
|
||||||
// Entry no longer exists in WinCache, so clear it from the cache array
|
|
||||||
parent::deleteCacheData($cellID);
|
|
||||||
throw new PHPExcel_Exception('Cell entry '.$cellID.' no longer exists in Wincache');
|
|
||||||
}
|
|
||||||
if (!wincache_ucache_add($newCachePrefix.$cellID.'.cache', $obj, $this->_cacheTime)) {
|
|
||||||
$this->__destruct();
|
|
||||||
throw new PHPExcel_Exception('Failed to store cell '.$cellID.' in Wincache');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->_cachePrefix = $newCachePrefix;
|
|
||||||
} // function copyCellCollection()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cell collection and disconnect from our parent
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function unsetWorksheetCells() {
|
|
||||||
if(!is_null($this->_currentObject)) {
|
|
||||||
$this->_currentObject->detach();
|
|
||||||
$this->_currentObject = $this->_currentObjectID = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flush the WinCache cache
|
|
||||||
$this->__destruct();
|
|
||||||
|
|
||||||
$this->_cellCache = array();
|
|
||||||
|
|
||||||
// detach ourself from the worksheet, so that it can then delete this object successfully
|
|
||||||
$this->_parent = null;
|
|
||||||
} // function unsetWorksheetCells()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise this new cell collection
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent The worksheet for this cell collection
|
|
||||||
* @param array of mixed $arguments Additional initialisation arguments
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_Worksheet $parent, $arguments) {
|
|
||||||
$cacheTime = (isset($arguments['cacheTime'])) ? $arguments['cacheTime'] : 600;
|
|
||||||
|
|
||||||
if (is_null($this->_cachePrefix)) {
|
|
||||||
$baseUnique = $this->_getUniqueID();
|
|
||||||
$this->_cachePrefix = substr(md5($baseUnique),0,8).'.';
|
|
||||||
$this->_cacheTime = $cacheTime;
|
|
||||||
|
|
||||||
parent::__construct($parent);
|
|
||||||
}
|
|
||||||
} // function __construct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy this cell collection
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
$cacheList = $this->getCellList();
|
|
||||||
foreach($cacheList as $cellID) {
|
|
||||||
wincache_ucache_delete($this->_cachePrefix.$cellID.'.cache');
|
|
||||||
}
|
|
||||||
} // function __destruct()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify whether the caching method is currently available
|
|
||||||
* Some methods are dependent on the availability of certain extensions being enabled in the PHP build
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function cacheMethodIsAvailable() {
|
|
||||||
if (!function_exists('wincache_ucache_add')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,251 +0,0 @@
|
|||||||
<?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_CachedObjectStorage
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CachedObjectStorageFactory
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_CachedObjectStorage
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CachedObjectStorageFactory
|
|
||||||
{
|
|
||||||
const cache_in_memory = 'Memory';
|
|
||||||
const cache_in_memory_gzip = 'MemoryGZip';
|
|
||||||
const cache_in_memory_serialized = 'MemorySerialized';
|
|
||||||
const cache_igbinary = 'Igbinary';
|
|
||||||
const cache_to_discISAM = 'DiscISAM';
|
|
||||||
const cache_to_apc = 'APC';
|
|
||||||
const cache_to_memcache = 'Memcache';
|
|
||||||
const cache_to_phpTemp = 'PHPTemp';
|
|
||||||
const cache_to_wincache = 'Wincache';
|
|
||||||
const cache_to_sqlite = 'SQLite';
|
|
||||||
const cache_to_sqlite3 = 'SQLite3';
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the method used for cell cacheing
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private static $_cacheStorageMethod = NULL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the class used for cell cacheing
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private static $_cacheStorageClass = NULL;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of all possible cache storage methods
|
|
||||||
*
|
|
||||||
* @var string[]
|
|
||||||
*/
|
|
||||||
private static $_storageMethods = array(
|
|
||||||
self::cache_in_memory,
|
|
||||||
self::cache_in_memory_gzip,
|
|
||||||
self::cache_in_memory_serialized,
|
|
||||||
self::cache_igbinary,
|
|
||||||
self::cache_to_phpTemp,
|
|
||||||
self::cache_to_discISAM,
|
|
||||||
self::cache_to_apc,
|
|
||||||
self::cache_to_memcache,
|
|
||||||
self::cache_to_wincache,
|
|
||||||
self::cache_to_sqlite,
|
|
||||||
self::cache_to_sqlite3,
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default arguments for each cache storage method
|
|
||||||
*
|
|
||||||
* @var array of mixed array
|
|
||||||
*/
|
|
||||||
private static $_storageMethodDefaultParameters = array(
|
|
||||||
self::cache_in_memory => array(
|
|
||||||
),
|
|
||||||
self::cache_in_memory_gzip => array(
|
|
||||||
),
|
|
||||||
self::cache_in_memory_serialized => array(
|
|
||||||
),
|
|
||||||
self::cache_igbinary => array(
|
|
||||||
),
|
|
||||||
self::cache_to_phpTemp => array( 'memoryCacheSize' => '1MB'
|
|
||||||
),
|
|
||||||
self::cache_to_discISAM => array( 'dir' => NULL
|
|
||||||
),
|
|
||||||
self::cache_to_apc => array( 'cacheTime' => 600
|
|
||||||
),
|
|
||||||
self::cache_to_memcache => array( 'memcacheServer' => 'localhost',
|
|
||||||
'memcachePort' => 11211,
|
|
||||||
'cacheTime' => 600
|
|
||||||
),
|
|
||||||
self::cache_to_wincache => array( 'cacheTime' => 600
|
|
||||||
),
|
|
||||||
self::cache_to_sqlite => array(
|
|
||||||
),
|
|
||||||
self::cache_to_sqlite3 => array(
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Arguments for the active cache storage method
|
|
||||||
*
|
|
||||||
* @var array of mixed array
|
|
||||||
*/
|
|
||||||
private static $_storageMethodParameters = array();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the current cache storage method
|
|
||||||
*
|
|
||||||
* @return string|NULL
|
|
||||||
**/
|
|
||||||
public static function getCacheStorageMethod()
|
|
||||||
{
|
|
||||||
return self::$_cacheStorageMethod;
|
|
||||||
} // function getCacheStorageMethod()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the current cache storage class
|
|
||||||
*
|
|
||||||
* @return PHPExcel_CachedObjectStorage_ICache|NULL
|
|
||||||
**/
|
|
||||||
public static function getCacheStorageClass()
|
|
||||||
{
|
|
||||||
return self::$_cacheStorageClass;
|
|
||||||
} // function getCacheStorageClass()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the list of all possible cache storage methods
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
**/
|
|
||||||
public static function getAllCacheStorageMethods()
|
|
||||||
{
|
|
||||||
return self::$_storageMethods;
|
|
||||||
} // function getCacheStorageMethods()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the list of all available cache storage methods
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
**/
|
|
||||||
public static function getCacheStorageMethods()
|
|
||||||
{
|
|
||||||
$activeMethods = array();
|
|
||||||
foreach(self::$_storageMethods as $storageMethod) {
|
|
||||||
$cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $storageMethod;
|
|
||||||
if (call_user_func(array($cacheStorageClass, 'cacheMethodIsAvailable'))) {
|
|
||||||
$activeMethods[] = $storageMethod;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $activeMethods;
|
|
||||||
} // function getCacheStorageMethods()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Identify the cache storage method to use
|
|
||||||
*
|
|
||||||
* @param string $method Name of the method to use for cell cacheing
|
|
||||||
* @param array of mixed $arguments Additional arguments to pass to the cell caching class
|
|
||||||
* when instantiating
|
|
||||||
* @return boolean
|
|
||||||
**/
|
|
||||||
public static function initialize($method = self::cache_in_memory, $arguments = array())
|
|
||||||
{
|
|
||||||
if (!in_array($method,self::$_storageMethods)) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$cacheStorageClass = 'PHPExcel_CachedObjectStorage_'.$method;
|
|
||||||
if (!call_user_func(array( $cacheStorageClass,
|
|
||||||
'cacheMethodIsAvailable'))) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
self::$_storageMethodParameters[$method] = self::$_storageMethodDefaultParameters[$method];
|
|
||||||
foreach($arguments as $k => $v) {
|
|
||||||
if (array_key_exists($k, self::$_storageMethodParameters[$method])) {
|
|
||||||
self::$_storageMethodParameters[$method][$k] = $v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self::$_cacheStorageMethod === NULL) {
|
|
||||||
self::$_cacheStorageClass = 'PHPExcel_CachedObjectStorage_' . $method;
|
|
||||||
self::$_cacheStorageMethod = $method;
|
|
||||||
}
|
|
||||||
return TRUE;
|
|
||||||
} // function initialize()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise the cache storage
|
|
||||||
*
|
|
||||||
* @param PHPExcel_Worksheet $parent Enable cell caching for this worksheet
|
|
||||||
* @return PHPExcel_CachedObjectStorage_ICache
|
|
||||||
**/
|
|
||||||
public static function getInstance(PHPExcel_Worksheet $parent)
|
|
||||||
{
|
|
||||||
$cacheMethodIsAvailable = TRUE;
|
|
||||||
if (self::$_cacheStorageMethod === NULL) {
|
|
||||||
$cacheMethodIsAvailable = self::initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($cacheMethodIsAvailable) {
|
|
||||||
$instance = new self::$_cacheStorageClass( $parent,
|
|
||||||
self::$_storageMethodParameters[self::$_cacheStorageMethod]
|
|
||||||
);
|
|
||||||
if ($instance !== NULL) {
|
|
||||||
return $instance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
} // function getInstance()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the cache storage
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
public static function finalize()
|
|
||||||
{
|
|
||||||
self::$_cacheStorageMethod = NULL;
|
|
||||||
self::$_cacheStorageClass = NULL;
|
|
||||||
self::$_storageMethodParameters = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CalcEngine_CyclicReferenceStack
|
|
||||||
*
|
|
||||||
* @category PHPExcel_CalcEngine_CyclicReferenceStack
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CalcEngine_CyclicReferenceStack {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The call stack for calculated cells
|
|
||||||
*
|
|
||||||
* @var mixed[]
|
|
||||||
*/
|
|
||||||
private $_stack = array();
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the number of entries on the stack
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function count() {
|
|
||||||
return count($this->_stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Push a new entry onto the stack
|
|
||||||
*
|
|
||||||
* @param mixed $value
|
|
||||||
*/
|
|
||||||
public function push($value) {
|
|
||||||
$this->_stack[] = $value;
|
|
||||||
} // function push()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pop the last entry from the stack
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function pop() {
|
|
||||||
return array_pop($this->_stack);
|
|
||||||
} // function pop()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test to see if a specified entry exists on the stack
|
|
||||||
*
|
|
||||||
* @param mixed $value The value to test
|
|
||||||
*/
|
|
||||||
public function onStack($value) {
|
|
||||||
return in_array($value, $this->_stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the stack
|
|
||||||
*/
|
|
||||||
public function clear() {
|
|
||||||
$this->_stack = array();
|
|
||||||
} // function push()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an array of all entries on the stack
|
|
||||||
*
|
|
||||||
* @return mixed[]
|
|
||||||
*/
|
|
||||||
public function showStack() {
|
|
||||||
return $this->_stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // class PHPExcel_CalcEngine_CyclicReferenceStack
|
|
@ -1,153 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_CalcEngine_Logger
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_CalcEngine_Logger {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flag to determine whether a debug log should be generated by the calculation engine
|
|
||||||
* If true, then a debug log will be generated
|
|
||||||
* If false, then a debug log will not be generated
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_writeDebugLog = FALSE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flag to determine whether a debug log should be echoed by the calculation engine
|
|
||||||
* If true, then a debug log will be echoed
|
|
||||||
* If false, then a debug log will not be echoed
|
|
||||||
* A debug log can only be echoed if it is generated
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_echoDebugLog = FALSE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The debug log generated by the calculation engine
|
|
||||||
*
|
|
||||||
* @var string[]
|
|
||||||
*/
|
|
||||||
private $_debugLog = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The calculation engine cell reference stack
|
|
||||||
*
|
|
||||||
* @var PHPExcel_CalcEngine_CyclicReferenceStack
|
|
||||||
*/
|
|
||||||
private $_cellStack;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instantiate a Calculation engine logger
|
|
||||||
*
|
|
||||||
* @param PHPExcel_CalcEngine_CyclicReferenceStack $stack
|
|
||||||
*/
|
|
||||||
public function __construct(PHPExcel_CalcEngine_CyclicReferenceStack $stack) {
|
|
||||||
$this->_cellStack = $stack;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable/Disable Calculation engine logging
|
|
||||||
*
|
|
||||||
* @param boolean $pValue
|
|
||||||
*/
|
|
||||||
public function setWriteDebugLog($pValue = FALSE) {
|
|
||||||
$this->_writeDebugLog = $pValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return whether calculation engine logging is enabled or disabled
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function getWriteDebugLog() {
|
|
||||||
return $this->_writeDebugLog;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Enable/Disable echoing of debug log information
|
|
||||||
*
|
|
||||||
* @param boolean $pValue
|
|
||||||
*/
|
|
||||||
public function setEchoDebugLog($pValue = FALSE) {
|
|
||||||
$this->_echoDebugLog = $pValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return whether echoing of debug log information is enabled or disabled
|
|
||||||
*
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function getEchoDebugLog() {
|
|
||||||
return $this->_echoDebugLog;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write an entry to the calculation engine debug log
|
|
||||||
*/
|
|
||||||
public function writeDebugLog() {
|
|
||||||
// Only write the debug log if logging is enabled
|
|
||||||
if ($this->_writeDebugLog) {
|
|
||||||
$message = implode(func_get_args());
|
|
||||||
$cellReference = implode(' -> ', $this->_cellStack->showStack());
|
|
||||||
if ($this->_echoDebugLog) {
|
|
||||||
echo $cellReference,
|
|
||||||
($this->_cellStack->count() > 0 ? ' => ' : ''),
|
|
||||||
$message,
|
|
||||||
PHP_EOL;
|
|
||||||
}
|
|
||||||
$this->_debugLog[] = $cellReference .
|
|
||||||
($this->_cellStack->count() > 0 ? ' => ' : '') .
|
|
||||||
$message;
|
|
||||||
}
|
|
||||||
} // function _writeDebug()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the calculation engine debug log
|
|
||||||
*/
|
|
||||||
public function clearLog() {
|
|
||||||
$this->_debugLog = array();
|
|
||||||
} // function flushLogger()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the calculation engine debug log
|
|
||||||
*
|
|
||||||
* @return string[]
|
|
||||||
*/
|
|
||||||
public function getLog() {
|
|
||||||
return $this->_debugLog;
|
|
||||||
} // function flushLogger()
|
|
||||||
|
|
||||||
} // class PHPExcel_CalcEngine_Logger
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
<html><body bgcolor="#FFFFFF"></body></html>
|
|
File diff suppressed because it is too large
Load Diff
@ -1,725 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** PHPExcel root directory */
|
|
||||||
if (!defined('PHPEXCEL_ROOT')) {
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
|
|
||||||
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_Database
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_Database {
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* __fieldExtract
|
|
||||||
*
|
|
||||||
* Extracts the column ID to use for the data field.
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param mixed $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @return string|NULL
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static function __fieldExtract($database,$field) {
|
|
||||||
$field = strtoupper(PHPExcel_Calculation_Functions::flattenSingleValue($field));
|
|
||||||
$fieldNames = array_map('strtoupper',array_shift($database));
|
|
||||||
|
|
||||||
if (is_numeric($field)) {
|
|
||||||
$keys = array_keys($fieldNames);
|
|
||||||
return $keys[$field-1];
|
|
||||||
}
|
|
||||||
$key = array_search($field,$fieldNames);
|
|
||||||
return ($key) ? $key : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* __filter
|
|
||||||
*
|
|
||||||
* Parses the selection criteria, extracts the database rows that match those criteria, and
|
|
||||||
* returns that subset of rows.
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return array of mixed
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
private static function __filter($database,$criteria) {
|
|
||||||
$fieldNames = array_shift($database);
|
|
||||||
$criteriaNames = array_shift($criteria);
|
|
||||||
|
|
||||||
// Convert the criteria into a set of AND/OR conditions with [:placeholders]
|
|
||||||
$testConditions = $testValues = array();
|
|
||||||
$testConditionsCount = 0;
|
|
||||||
foreach($criteriaNames as $key => $criteriaName) {
|
|
||||||
$testCondition = array();
|
|
||||||
$testConditionCount = 0;
|
|
||||||
foreach($criteria as $row => $criterion) {
|
|
||||||
if ($criterion[$key] > '') {
|
|
||||||
$testCondition[] = '[:'.$criteriaName.']'.PHPExcel_Calculation_Functions::_ifCondition($criterion[$key]);
|
|
||||||
$testConditionCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($testConditionCount > 1) {
|
|
||||||
$testConditions[] = 'OR('.implode(',',$testCondition).')';
|
|
||||||
$testConditionsCount++;
|
|
||||||
} elseif($testConditionCount == 1) {
|
|
||||||
$testConditions[] = $testCondition[0];
|
|
||||||
$testConditionsCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($testConditionsCount > 1) {
|
|
||||||
$testConditionSet = 'AND('.implode(',',$testConditions).')';
|
|
||||||
} elseif($testConditionsCount == 1) {
|
|
||||||
$testConditionSet = $testConditions[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop through each row of the database
|
|
||||||
foreach($database as $dataRow => $dataValues) {
|
|
||||||
// Substitute actual values from the database row for our [:placeholders]
|
|
||||||
$testConditionList = $testConditionSet;
|
|
||||||
foreach($criteriaNames as $key => $criteriaName) {
|
|
||||||
$k = array_search($criteriaName,$fieldNames);
|
|
||||||
if (isset($dataValues[$k])) {
|
|
||||||
$dataValue = $dataValues[$k];
|
|
||||||
$dataValue = (is_string($dataValue)) ? PHPExcel_Calculation::_wrapResult(strtoupper($dataValue)) : $dataValue;
|
|
||||||
$testConditionList = str_replace('[:'.$criteriaName.']',$dataValue,$testConditionList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// evaluate the criteria against the row data
|
|
||||||
$result = PHPExcel_Calculation::getInstance()->_calculateFormulaValue('='.$testConditionList);
|
|
||||||
// If the row failed to meet the criteria, remove it from the database
|
|
||||||
if (!$result) {
|
|
||||||
unset($database[$dataRow]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $database;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DAVERAGE
|
|
||||||
*
|
|
||||||
* Averages the values in a column of a list or database that match conditions you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DAVERAGE(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DAVERAGE($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::AVERAGE($colData);
|
|
||||||
} // function DAVERAGE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DCOUNT
|
|
||||||
*
|
|
||||||
* Counts the cells that contain numbers in a column of a list or database that match conditions
|
|
||||||
* that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DCOUNT(database,[field],criteria)
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DAVERAGE(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return integer
|
|
||||||
*
|
|
||||||
* @TODO The field argument is optional. If field is omitted, DCOUNT counts all records in the
|
|
||||||
* database that match the criteria.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DCOUNT($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::COUNT($colData);
|
|
||||||
} // function DCOUNT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DCOUNTA
|
|
||||||
*
|
|
||||||
* Counts the nonblank cells in a column of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DCOUNTA(database,[field],criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return integer
|
|
||||||
*
|
|
||||||
* @TODO The field argument is optional. If field is omitted, DCOUNTA counts all records in the
|
|
||||||
* database that match the criteria.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DCOUNTA($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::COUNTA($colData);
|
|
||||||
} // function DCOUNTA()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DGET
|
|
||||||
*
|
|
||||||
* Extracts a single value from a column of a list or database that matches conditions that you
|
|
||||||
* specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DGET(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return mixed
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DGET($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
if (count($colData) > 1) {
|
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $colData[0];
|
|
||||||
} // function DGET()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DMAX
|
|
||||||
*
|
|
||||||
* Returns the largest number in a column of a list or database that matches conditions you that
|
|
||||||
* specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DMAX(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DMAX($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::MAX($colData);
|
|
||||||
} // function DMAX()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DMIN
|
|
||||||
*
|
|
||||||
* Returns the smallest number in a column of a list or database that matches conditions you that
|
|
||||||
* specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DMIN(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DMIN($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::MIN($colData);
|
|
||||||
} // function DMIN()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DPRODUCT
|
|
||||||
*
|
|
||||||
* Multiplies the values in a column of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DPRODUCT(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DPRODUCT($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_MathTrig::PRODUCT($colData);
|
|
||||||
} // function DPRODUCT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DSTDEV
|
|
||||||
*
|
|
||||||
* Estimates the standard deviation of a population based on a sample by using the numbers in a
|
|
||||||
* column of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DSTDEV(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DSTDEV($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::STDEV($colData);
|
|
||||||
} // function DSTDEV()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DSTDEVP
|
|
||||||
*
|
|
||||||
* Calculates the standard deviation of a population based on the entire population by using the
|
|
||||||
* numbers in a column of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DSTDEVP(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DSTDEVP($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::STDEVP($colData);
|
|
||||||
} // function DSTDEVP()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DSUM
|
|
||||||
*
|
|
||||||
* Adds the numbers in a column of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DSUM(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DSUM($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_MathTrig::SUM($colData);
|
|
||||||
} // function DSUM()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DVAR
|
|
||||||
*
|
|
||||||
* Estimates the variance of a population based on a sample by using the numbers in a column
|
|
||||||
* of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DVAR(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DVAR($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::VARFunc($colData);
|
|
||||||
} // function DVAR()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DVARP
|
|
||||||
*
|
|
||||||
* Calculates the variance of a population based on the entire population by using the numbers
|
|
||||||
* in a column of a list or database that match conditions that you specify.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* DVARP(database,field,criteria)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Database Functions
|
|
||||||
* @param mixed[] $database The range of cells that makes up the list or database.
|
|
||||||
* A database is a list of related data in which rows of related
|
|
||||||
* information are records, and columns of data are fields. The
|
|
||||||
* first row of the list contains labels for each column.
|
|
||||||
* @param string|integer $field Indicates which column is used in the function. Enter the
|
|
||||||
* column label enclosed between double quotation marks, such as
|
|
||||||
* "Age" or "Yield," or a number (without quotation marks) that
|
|
||||||
* represents the position of the column within the list: 1 for
|
|
||||||
* the first column, 2 for the second column, and so on.
|
|
||||||
* @param mixed[] $criteria The range of cells that contains the conditions you specify.
|
|
||||||
* You can use any range for the criteria argument, as long as it
|
|
||||||
* includes at least one column label and at least one cell below
|
|
||||||
* the column label in which you specify a condition for the
|
|
||||||
* column.
|
|
||||||
* @return float
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function DVARP($database,$field,$criteria) {
|
|
||||||
$field = self::__fieldExtract($database,$field);
|
|
||||||
if (is_null($field)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// reduce the database to a set of rows that match all the criteria
|
|
||||||
$database = self::__filter($database,$criteria);
|
|
||||||
// extract an array of values for the requested column
|
|
||||||
$colData = array();
|
|
||||||
foreach($database as $row) {
|
|
||||||
$colData[] = $row[$field];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return PHPExcel_Calculation_Statistical::VARP($colData);
|
|
||||||
} // function DVARP()
|
|
||||||
|
|
||||||
|
|
||||||
} // class PHPExcel_Calculation_Database
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,52 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_Exception
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_ExceptionHandler
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_ExceptionHandler {
|
|
||||||
/**
|
|
||||||
* Register errorhandler
|
|
||||||
*/
|
|
||||||
public function __construct() {
|
|
||||||
set_error_handler(array('PHPExcel_Calculation_Exception', 'errorHandlerCallback'), E_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregister errorhandler
|
|
||||||
*/
|
|
||||||
public function __destruct() {
|
|
||||||
restore_error_handler();
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,614 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
PARTLY BASED ON:
|
|
||||||
Copyright (c) 2007 E. W. Bachtal, Inc.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
||||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
||||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
||||||
portions of the Software.
|
|
||||||
|
|
||||||
The software is provided "as is", without warranty of any kind, express or implied, including but not
|
|
||||||
limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In
|
|
||||||
no event shall the authors or copyright holders be liable for any claim, damages or other liability,
|
|
||||||
whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
|
|
||||||
software or the use or other dealings in the software.
|
|
||||||
|
|
||||||
http://ewbi.blogs.com/develops/2007/03/excel_formula_p.html
|
|
||||||
http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_FormulaParser
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_FormulaParser {
|
|
||||||
/* Character constants */
|
|
||||||
const QUOTE_DOUBLE = '"';
|
|
||||||
const QUOTE_SINGLE = '\'';
|
|
||||||
const BRACKET_CLOSE = ']';
|
|
||||||
const BRACKET_OPEN = '[';
|
|
||||||
const BRACE_OPEN = '{';
|
|
||||||
const BRACE_CLOSE = '}';
|
|
||||||
const PAREN_OPEN = '(';
|
|
||||||
const PAREN_CLOSE = ')';
|
|
||||||
const SEMICOLON = ';';
|
|
||||||
const WHITESPACE = ' ';
|
|
||||||
const COMMA = ',';
|
|
||||||
const ERROR_START = '#';
|
|
||||||
|
|
||||||
const OPERATORS_SN = "+-";
|
|
||||||
const OPERATORS_INFIX = "+-*/^&=><";
|
|
||||||
const OPERATORS_POSTFIX = "%";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Formula
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_formula;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tokens
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Calculation_FormulaToken[]
|
|
||||||
*/
|
|
||||||
private $_tokens = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new PHPExcel_Calculation_FormulaParser
|
|
||||||
*
|
|
||||||
* @param string $pFormula Formula to parse
|
|
||||||
* @throws PHPExcel_Calculation_Exception
|
|
||||||
*/
|
|
||||||
public function __construct($pFormula = '')
|
|
||||||
{
|
|
||||||
// Check parameters
|
|
||||||
if (is_null($pFormula)) {
|
|
||||||
throw new PHPExcel_Calculation_Exception("Invalid parameter passed: formula");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialise values
|
|
||||||
$this->_formula = trim($pFormula);
|
|
||||||
// Parse!
|
|
||||||
$this->_parseToTokens();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Formula
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getFormula() {
|
|
||||||
return $this->_formula;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Token
|
|
||||||
*
|
|
||||||
* @param int $pId Token id
|
|
||||||
* @return string
|
|
||||||
* @throws PHPExcel_Calculation_Exception
|
|
||||||
*/
|
|
||||||
public function getToken($pId = 0) {
|
|
||||||
if (isset($this->_tokens[$pId])) {
|
|
||||||
return $this->_tokens[$pId];
|
|
||||||
} else {
|
|
||||||
throw new PHPExcel_Calculation_Exception("Token with id $pId does not exist.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Token count
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getTokenCount() {
|
|
||||||
return count($this->_tokens);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Tokens
|
|
||||||
*
|
|
||||||
* @return PHPExcel_Calculation_FormulaToken[]
|
|
||||||
*/
|
|
||||||
public function getTokens() {
|
|
||||||
return $this->_tokens;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parse to tokens
|
|
||||||
*/
|
|
||||||
private function _parseToTokens() {
|
|
||||||
// No attempt is made to verify formulas; assumes formulas are derived from Excel, where
|
|
||||||
// they can only exist if valid; stack overflows/underflows sunk as nulls without exceptions.
|
|
||||||
|
|
||||||
// Check if the formula has a valid starting =
|
|
||||||
$formulaLength = strlen($this->_formula);
|
|
||||||
if ($formulaLength < 2 || $this->_formula{0} != '=') return;
|
|
||||||
|
|
||||||
// Helper variables
|
|
||||||
$tokens1 = $tokens2 = $stack = array();
|
|
||||||
$inString = $inPath = $inRange = $inError = false;
|
|
||||||
$token = $previousToken = $nextToken = null;
|
|
||||||
|
|
||||||
$index = 1;
|
|
||||||
$value = '';
|
|
||||||
|
|
||||||
$ERRORS = array("#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A");
|
|
||||||
$COMPARATORS_MULTI = array(">=", "<=", "<>");
|
|
||||||
|
|
||||||
while ($index < $formulaLength) {
|
|
||||||
// state-dependent character evaluation (order is important)
|
|
||||||
|
|
||||||
// double-quoted strings
|
|
||||||
// embeds are doubled
|
|
||||||
// end marks token
|
|
||||||
if ($inString) {
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
|
|
||||||
if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE)) {
|
|
||||||
$value .= PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE;
|
|
||||||
++$index;
|
|
||||||
} else {
|
|
||||||
$inString = false;
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_TEXT);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$value .= $this->_formula{$index};
|
|
||||||
}
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// single-quoted strings (links)
|
|
||||||
// embeds are double
|
|
||||||
// end does not mark a token
|
|
||||||
if ($inPath) {
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
|
|
||||||
if ((($index + 2) <= $formulaLength) && ($this->_formula{$index + 1} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE)) {
|
|
||||||
$value .= PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE;
|
|
||||||
++$index;
|
|
||||||
} else {
|
|
||||||
$inPath = false;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$value .= $this->_formula{$index};
|
|
||||||
}
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// bracked strings (R1C1 range index or linked workbook name)
|
|
||||||
// no embeds (changed to "()" by Excel)
|
|
||||||
// end does not mark a token
|
|
||||||
if ($inRange) {
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_CLOSE) {
|
|
||||||
$inRange = false;
|
|
||||||
}
|
|
||||||
$value .= $this->_formula{$index};
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// error values
|
|
||||||
// end marks a token, determined from absolute list of values
|
|
||||||
if ($inError) {
|
|
||||||
$value .= $this->_formula{$index};
|
|
||||||
++$index;
|
|
||||||
if (in_array($value, $ERRORS)) {
|
|
||||||
$inError = false;
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_ERROR);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// scientific notation check
|
|
||||||
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_SN, $this->_formula{$index}) !== false) {
|
|
||||||
if (strlen($value) > 1) {
|
|
||||||
if (preg_match("/^[1-9]{1}(\.[0-9]+)?E{1}$/", $this->_formula{$index}) != 0) {
|
|
||||||
$value .= $this->_formula{$index};
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// independent character evaluation (order not important)
|
|
||||||
|
|
||||||
// establish state-dependent character evaluations
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_DOUBLE) {
|
|
||||||
if (strlen($value > 0)) { // unexpected
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$inString = true;
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::QUOTE_SINGLE) {
|
|
||||||
if (strlen($value) > 0) { // unexpected
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$inPath = true;
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACKET_OPEN) {
|
|
||||||
$inRange = true;
|
|
||||||
$value .= PHPExcel_Calculation_FormulaParser::BRACKET_OPEN;
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::ERROR_START) {
|
|
||||||
if (strlen($value) > 0) { // unexpected
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$inError = true;
|
|
||||||
$value .= PHPExcel_Calculation_FormulaParser::ERROR_START;
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// mark start and end of arrays and array rows
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_OPEN) {
|
|
||||||
if (strlen($value) > 0) { // unexpected
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmp = new PHPExcel_Calculation_FormulaToken("ARRAY", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
$stack[] = clone $tmp;
|
|
||||||
|
|
||||||
$tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
$stack[] = clone $tmp;
|
|
||||||
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::SEMICOLON) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmp = array_pop($stack);
|
|
||||||
$tmp->setValue("");
|
|
||||||
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
|
|
||||||
$tmp = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
|
|
||||||
$tmp = new PHPExcel_Calculation_FormulaToken("ARRAYROW", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
$stack[] = clone $tmp;
|
|
||||||
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::BRACE_CLOSE) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmp = array_pop($stack);
|
|
||||||
$tmp->setValue("");
|
|
||||||
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
|
|
||||||
$tmp = array_pop($stack);
|
|
||||||
$tmp->setValue("");
|
|
||||||
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// trim white-space
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE);
|
|
||||||
++$index;
|
|
||||||
while (($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::WHITESPACE) && ($index < $formulaLength)) {
|
|
||||||
++$index;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// multi-character comparators
|
|
||||||
if (($index + 2) <= $formulaLength) {
|
|
||||||
if (in_array(substr($this->_formula, $index, 2), $COMPARATORS_MULTI)) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken(substr($this->_formula, $index, 2), PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
|
|
||||||
$index += 2;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// standard infix operators
|
|
||||||
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_INFIX, $this->_formula{$index}) !== false) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] =new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX);
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// standard postfix operators (only one)
|
|
||||||
if (strpos(PHPExcel_Calculation_FormulaParser::OPERATORS_POSTFIX, $this->_formula{$index}) !== false) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($this->_formula{$index}, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX);
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// start subexpression or function
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_OPEN) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tmp = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
$stack[] = clone $tmp;
|
|
||||||
$value = "";
|
|
||||||
} else {
|
|
||||||
$tmp = new PHPExcel_Calculation_FormulaToken("", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
$stack[] = clone $tmp;
|
|
||||||
}
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// function, subexpression, or array parameters, or operand unions
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::COMMA) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmp = array_pop($stack);
|
|
||||||
$tmp->setValue("");
|
|
||||||
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
|
|
||||||
$stack[] = $tmp;
|
|
||||||
|
|
||||||
if ($tmp->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_UNION);
|
|
||||||
} else {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken(",", PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_ARGUMENT);
|
|
||||||
}
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop subexpression
|
|
||||||
if ($this->_formula{$index} == PHPExcel_Calculation_FormulaParser::PAREN_CLOSE) {
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
$value = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
$tmp = array_pop($stack);
|
|
||||||
$tmp->setValue("");
|
|
||||||
$tmp->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP);
|
|
||||||
$tokens1[] = $tmp;
|
|
||||||
|
|
||||||
++$index;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// token accumulation
|
|
||||||
$value .= $this->_formula{$index};
|
|
||||||
++$index;
|
|
||||||
}
|
|
||||||
|
|
||||||
// dump remaining accumulation
|
|
||||||
if (strlen($value) > 0) {
|
|
||||||
$tokens1[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND);
|
|
||||||
}
|
|
||||||
|
|
||||||
// move tokenList to new set, excluding unnecessary white-space tokens and converting necessary ones to intersections
|
|
||||||
$tokenCount = count($tokens1);
|
|
||||||
for ($i = 0; $i < $tokenCount; ++$i) {
|
|
||||||
$token = $tokens1[$i];
|
|
||||||
if (isset($tokens1[$i - 1])) {
|
|
||||||
$previousToken = $tokens1[$i - 1];
|
|
||||||
} else {
|
|
||||||
$previousToken = null;
|
|
||||||
}
|
|
||||||
if (isset($tokens1[$i + 1])) {
|
|
||||||
$nextToken = $tokens1[$i + 1];
|
|
||||||
} else {
|
|
||||||
$nextToken = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($token)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($token->getTokenType() != PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_WHITESPACE) {
|
|
||||||
$tokens2[] = $token;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($previousToken)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! (
|
|
||||||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
|
|
||||||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
|
|
||||||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
|
|
||||||
) ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($nextToken)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! (
|
|
||||||
(($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) ||
|
|
||||||
(($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($nextToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_START)) ||
|
|
||||||
($nextToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
|
|
||||||
) ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$tokens2[] = new PHPExcel_Calculation_FormulaToken($value, PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX, PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_INTERSECTION);
|
|
||||||
}
|
|
||||||
|
|
||||||
// move tokens to final list, switching infix "-" operators to prefix when appropriate, switching infix "+" operators
|
|
||||||
// to noop when appropriate, identifying operand and infix-operator subtypes, and pulling "@" from function names
|
|
||||||
$this->_tokens = array();
|
|
||||||
|
|
||||||
$tokenCount = count($tokens2);
|
|
||||||
for ($i = 0; $i < $tokenCount; ++$i) {
|
|
||||||
$token = $tokens2[$i];
|
|
||||||
if (isset($tokens2[$i - 1])) {
|
|
||||||
$previousToken = $tokens2[$i - 1];
|
|
||||||
} else {
|
|
||||||
$previousToken = null;
|
|
||||||
}
|
|
||||||
if (isset($tokens2[$i + 1])) {
|
|
||||||
$nextToken = $tokens2[$i + 1];
|
|
||||||
} else {
|
|
||||||
$nextToken = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($token)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "-") {
|
|
||||||
if ($i == 0) {
|
|
||||||
$token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
|
|
||||||
} else if (
|
|
||||||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
|
|
||||||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
|
|
||||||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
|
|
||||||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
|
|
||||||
) {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
|
|
||||||
} else {
|
|
||||||
$token->setTokenType(PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPREFIX);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_tokens[] = $token;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getValue() == "+") {
|
|
||||||
if ($i == 0) {
|
|
||||||
continue;
|
|
||||||
} else if (
|
|
||||||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
|
|
||||||
(($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_SUBEXPRESSION) && ($previousToken->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_STOP)) ||
|
|
||||||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORPOSTFIX) ||
|
|
||||||
($previousToken->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND)
|
|
||||||
) {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
|
|
||||||
} else {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_tokens[] = $token;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERATORINFIX && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
|
|
||||||
if (strpos("<>=", substr($token->getValue(), 0, 1)) !== false) {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
|
|
||||||
} else if ($token->getValue() == "&") {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_CONCATENATION);
|
|
||||||
} else {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_MATH);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_tokens[] = $token;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_OPERAND && $token->getTokenSubType() == PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
|
|
||||||
if (!is_numeric($token->getValue())) {
|
|
||||||
if (strtoupper($token->getValue()) == "TRUE" || strtoupper($token->getValue() == "FALSE")) {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_LOGICAL);
|
|
||||||
} else {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_RANGE);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$token->setTokenSubType(PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NUMBER);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_tokens[] = $token;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($token->getTokenType() == PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_FUNCTION) {
|
|
||||||
if (strlen($token->getValue() > 0)) {
|
|
||||||
if (substr($token->getValue(), 0, 1) == "@") {
|
|
||||||
$token->setValue(substr($token->getValue(), 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->_tokens[] = $token;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,176 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
PARTLY BASED ON:
|
|
||||||
Copyright (c) 2007 E. W. Bachtal, Inc.
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
|
||||||
and associated documentation files (the "Software"), to deal in the Software without restriction,
|
|
||||||
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
|
||||||
portions of the Software.
|
|
||||||
|
|
||||||
The software is provided "as is", without warranty of any kind, express or implied, including but not
|
|
||||||
limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In
|
|
||||||
no event shall the authors or copyright holders be liable for any claim, damages or other liability,
|
|
||||||
whether in an action of contract, tort or otherwise, arising from, out of or in connection with the
|
|
||||||
software or the use or other dealings in the software.
|
|
||||||
|
|
||||||
http://ewbi.blogs.com/develops/2007/03/excel_formula_p.html
|
|
||||||
http://ewbi.blogs.com/develops/2004/12/excel_formula_p.html
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_FormulaToken
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_FormulaToken {
|
|
||||||
/* Token types */
|
|
||||||
const TOKEN_TYPE_NOOP = 'Noop';
|
|
||||||
const TOKEN_TYPE_OPERAND = 'Operand';
|
|
||||||
const TOKEN_TYPE_FUNCTION = 'Function';
|
|
||||||
const TOKEN_TYPE_SUBEXPRESSION = 'Subexpression';
|
|
||||||
const TOKEN_TYPE_ARGUMENT = 'Argument';
|
|
||||||
const TOKEN_TYPE_OPERATORPREFIX = 'OperatorPrefix';
|
|
||||||
const TOKEN_TYPE_OPERATORINFIX = 'OperatorInfix';
|
|
||||||
const TOKEN_TYPE_OPERATORPOSTFIX = 'OperatorPostfix';
|
|
||||||
const TOKEN_TYPE_WHITESPACE = 'Whitespace';
|
|
||||||
const TOKEN_TYPE_UNKNOWN = 'Unknown';
|
|
||||||
|
|
||||||
/* Token subtypes */
|
|
||||||
const TOKEN_SUBTYPE_NOTHING = 'Nothing';
|
|
||||||
const TOKEN_SUBTYPE_START = 'Start';
|
|
||||||
const TOKEN_SUBTYPE_STOP = 'Stop';
|
|
||||||
const TOKEN_SUBTYPE_TEXT = 'Text';
|
|
||||||
const TOKEN_SUBTYPE_NUMBER = 'Number';
|
|
||||||
const TOKEN_SUBTYPE_LOGICAL = 'Logical';
|
|
||||||
const TOKEN_SUBTYPE_ERROR = 'Error';
|
|
||||||
const TOKEN_SUBTYPE_RANGE = 'Range';
|
|
||||||
const TOKEN_SUBTYPE_MATH = 'Math';
|
|
||||||
const TOKEN_SUBTYPE_CONCATENATION = 'Concatenation';
|
|
||||||
const TOKEN_SUBTYPE_INTERSECTION = 'Intersection';
|
|
||||||
const TOKEN_SUBTYPE_UNION = 'Union';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Value
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_value;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Token Type (represented by TOKEN_TYPE_*)
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_tokenType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Token SubType (represented by TOKEN_SUBTYPE_*)
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_tokenSubType;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new PHPExcel_Calculation_FormulaToken
|
|
||||||
*
|
|
||||||
* @param string $pValue
|
|
||||||
* @param string $pTokenType Token type (represented by TOKEN_TYPE_*)
|
|
||||||
* @param string $pTokenSubType Token Subtype (represented by TOKEN_SUBTYPE_*)
|
|
||||||
*/
|
|
||||||
public function __construct($pValue, $pTokenType = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN, $pTokenSubType = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING)
|
|
||||||
{
|
|
||||||
// Initialise values
|
|
||||||
$this->_value = $pValue;
|
|
||||||
$this->_tokenType = $pTokenType;
|
|
||||||
$this->_tokenSubType = $pTokenSubType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Value
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getValue() {
|
|
||||||
return $this->_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Value
|
|
||||||
*
|
|
||||||
* @param string $value
|
|
||||||
*/
|
|
||||||
public function setValue($value) {
|
|
||||||
$this->_value = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Token Type (represented by TOKEN_TYPE_*)
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getTokenType() {
|
|
||||||
return $this->_tokenType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Token Type
|
|
||||||
*
|
|
||||||
* @param string $value
|
|
||||||
*/
|
|
||||||
public function setTokenType($value = PHPExcel_Calculation_FormulaToken::TOKEN_TYPE_UNKNOWN) {
|
|
||||||
$this->_tokenType = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Token SubType (represented by TOKEN_SUBTYPE_*)
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getTokenSubType() {
|
|
||||||
return $this->_tokenSubType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Token SubType
|
|
||||||
*
|
|
||||||
* @param string $value
|
|
||||||
*/
|
|
||||||
public function setTokenSubType($value = PHPExcel_Calculation_FormulaToken::TOKEN_SUBTYPE_NOTHING) {
|
|
||||||
$this->_tokenSubType = $value;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,149 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_Function
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_Function {
|
|
||||||
/* Function categories */
|
|
||||||
const CATEGORY_CUBE = 'Cube';
|
|
||||||
const CATEGORY_DATABASE = 'Database';
|
|
||||||
const CATEGORY_DATE_AND_TIME = 'Date and Time';
|
|
||||||
const CATEGORY_ENGINEERING = 'Engineering';
|
|
||||||
const CATEGORY_FINANCIAL = 'Financial';
|
|
||||||
const CATEGORY_INFORMATION = 'Information';
|
|
||||||
const CATEGORY_LOGICAL = 'Logical';
|
|
||||||
const CATEGORY_LOOKUP_AND_REFERENCE = 'Lookup and Reference';
|
|
||||||
const CATEGORY_MATH_AND_TRIG = 'Math and Trig';
|
|
||||||
const CATEGORY_STATISTICAL = 'Statistical';
|
|
||||||
const CATEGORY_TEXT_AND_DATA = 'Text and Data';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Category (represented by CATEGORY_*)
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_category;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Excel name
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_excelName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel name
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_phpExcelName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new PHPExcel_Calculation_Function
|
|
||||||
*
|
|
||||||
* @param string $pCategory Category (represented by CATEGORY_*)
|
|
||||||
* @param string $pExcelName Excel function name
|
|
||||||
* @param string $pPHPExcelName PHPExcel function mapping
|
|
||||||
* @throws PHPExcel_Calculation_Exception
|
|
||||||
*/
|
|
||||||
public function __construct($pCategory = NULL, $pExcelName = NULL, $pPHPExcelName = NULL)
|
|
||||||
{
|
|
||||||
if (($pCategory !== NULL) && ($pExcelName !== NULL) && ($pPHPExcelName !== NULL)) {
|
|
||||||
// Initialise values
|
|
||||||
$this->_category = $pCategory;
|
|
||||||
$this->_excelName = $pExcelName;
|
|
||||||
$this->_phpExcelName = $pPHPExcelName;
|
|
||||||
} else {
|
|
||||||
throw new PHPExcel_Calculation_Exception("Invalid parameters passed.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Category (represented by CATEGORY_*)
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getCategory() {
|
|
||||||
return $this->_category;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Category (represented by CATEGORY_*)
|
|
||||||
*
|
|
||||||
* @param string $value
|
|
||||||
* @throws PHPExcel_Calculation_Exception
|
|
||||||
*/
|
|
||||||
public function setCategory($value = null) {
|
|
||||||
if (!is_null($value)) {
|
|
||||||
$this->_category = $value;
|
|
||||||
} else {
|
|
||||||
throw new PHPExcel_Calculation_Exception("Invalid parameter passed.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Excel name
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getExcelName() {
|
|
||||||
return $this->_excelName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Excel name
|
|
||||||
*
|
|
||||||
* @param string $value
|
|
||||||
*/
|
|
||||||
public function setExcelName($value) {
|
|
||||||
$this->_excelName = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get PHPExcel name
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getPHPExcelName() {
|
|
||||||
return $this->_phpExcelName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set PHPExcel name
|
|
||||||
*
|
|
||||||
* @param string $value
|
|
||||||
*/
|
|
||||||
public function setPHPExcelName($value) {
|
|
||||||
$this->_phpExcelName = $value;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,725 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** PHPExcel root directory */
|
|
||||||
if (!defined('PHPEXCEL_ROOT')) {
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
|
|
||||||
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/** MAX_VALUE */
|
|
||||||
define('MAX_VALUE', 1.2e308);
|
|
||||||
|
|
||||||
/** 2 / PI */
|
|
||||||
define('M_2DIVPI', 0.63661977236758134307553505349006);
|
|
||||||
|
|
||||||
/** MAX_ITERATIONS */
|
|
||||||
define('MAX_ITERATIONS', 256);
|
|
||||||
|
|
||||||
/** PRECISION */
|
|
||||||
define('PRECISION', 8.88E-016);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_Functions
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_Functions {
|
|
||||||
|
|
||||||
/** constants */
|
|
||||||
const COMPATIBILITY_EXCEL = 'Excel';
|
|
||||||
const COMPATIBILITY_GNUMERIC = 'Gnumeric';
|
|
||||||
const COMPATIBILITY_OPENOFFICE = 'OpenOfficeCalc';
|
|
||||||
|
|
||||||
const RETURNDATE_PHP_NUMERIC = 'P';
|
|
||||||
const RETURNDATE_PHP_OBJECT = 'O';
|
|
||||||
const RETURNDATE_EXCEL = 'E';
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Compatibility mode to use for error checking and responses
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected static $compatibilityMode = self::COMPATIBILITY_EXCEL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Data Type to use when returning date values
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected static $ReturnDateType = self::RETURNDATE_EXCEL;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of error codes
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected static $_errorCodes = array( 'null' => '#NULL!',
|
|
||||||
'divisionbyzero' => '#DIV/0!',
|
|
||||||
'value' => '#VALUE!',
|
|
||||||
'reference' => '#REF!',
|
|
||||||
'name' => '#NAME?',
|
|
||||||
'num' => '#NUM!',
|
|
||||||
'na' => '#N/A',
|
|
||||||
'gettingdata' => '#GETTING_DATA'
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the Compatibility Mode
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Function Configuration
|
|
||||||
* @param string $compatibilityMode Compatibility Mode
|
|
||||||
* Permitted values are:
|
|
||||||
* PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL 'Excel'
|
|
||||||
* PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric'
|
|
||||||
* PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc'
|
|
||||||
* @return boolean (Success or Failure)
|
|
||||||
*/
|
|
||||||
public static function setCompatibilityMode($compatibilityMode) {
|
|
||||||
if (($compatibilityMode == self::COMPATIBILITY_EXCEL) ||
|
|
||||||
($compatibilityMode == self::COMPATIBILITY_GNUMERIC) ||
|
|
||||||
($compatibilityMode == self::COMPATIBILITY_OPENOFFICE)) {
|
|
||||||
self::$compatibilityMode = $compatibilityMode;
|
|
||||||
return True;
|
|
||||||
}
|
|
||||||
return False;
|
|
||||||
} // function setCompatibilityMode()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the current Compatibility Mode
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Function Configuration
|
|
||||||
* @return string Compatibility Mode
|
|
||||||
* Possible Return values are:
|
|
||||||
* PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL 'Excel'
|
|
||||||
* PHPExcel_Calculation_Functions::COMPATIBILITY_GNUMERIC 'Gnumeric'
|
|
||||||
* PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE 'OpenOfficeCalc'
|
|
||||||
*/
|
|
||||||
public static function getCompatibilityMode() {
|
|
||||||
return self::$compatibilityMode;
|
|
||||||
} // function getCompatibilityMode()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the Return Date Format used by functions that return a date/time (Excel, PHP Serialized Numeric or PHP Object)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Function Configuration
|
|
||||||
* @param string $returnDateType Return Date Format
|
|
||||||
* Permitted values are:
|
|
||||||
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC 'P'
|
|
||||||
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O'
|
|
||||||
* PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E'
|
|
||||||
* @return boolean Success or failure
|
|
||||||
*/
|
|
||||||
public static function setReturnDateType($returnDateType) {
|
|
||||||
if (($returnDateType == self::RETURNDATE_PHP_NUMERIC) ||
|
|
||||||
($returnDateType == self::RETURNDATE_PHP_OBJECT) ||
|
|
||||||
($returnDateType == self::RETURNDATE_EXCEL)) {
|
|
||||||
self::$ReturnDateType = $returnDateType;
|
|
||||||
return True;
|
|
||||||
}
|
|
||||||
return False;
|
|
||||||
} // function setReturnDateType()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the current Return Date Format for functions that return a date/time (Excel, PHP Serialized Numeric or PHP Object)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Function Configuration
|
|
||||||
* @return string Return Date Format
|
|
||||||
* Possible Return values are:
|
|
||||||
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC 'P'
|
|
||||||
* PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT 'O'
|
|
||||||
* PHPExcel_Calculation_Functions::RETURNDATE_EXCEL 'E'
|
|
||||||
*/
|
|
||||||
public static function getReturnDateType() {
|
|
||||||
return self::$ReturnDateType;
|
|
||||||
} // function getReturnDateType()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DUMMY
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #Not Yet Implemented
|
|
||||||
*/
|
|
||||||
public static function DUMMY() {
|
|
||||||
return '#Not Yet Implemented';
|
|
||||||
} // function DUMMY()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DIV0
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #Not Yet Implemented
|
|
||||||
*/
|
|
||||||
public static function DIV0() {
|
|
||||||
return self::$_errorCodes['divisionbyzero'];
|
|
||||||
} // function DIV0()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NA
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =NA()
|
|
||||||
*
|
|
||||||
* Returns the error value #N/A
|
|
||||||
* #N/A is the error value that means "no value is available."
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @return string #N/A!
|
|
||||||
*/
|
|
||||||
public static function NA() {
|
|
||||||
return self::$_errorCodes['na'];
|
|
||||||
} // function NA()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NaN
|
|
||||||
*
|
|
||||||
* Returns the error value #NUM!
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #NUM!
|
|
||||||
*/
|
|
||||||
public static function NaN() {
|
|
||||||
return self::$_errorCodes['num'];
|
|
||||||
} // function NaN()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NAME
|
|
||||||
*
|
|
||||||
* Returns the error value #NAME?
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #NAME?
|
|
||||||
*/
|
|
||||||
public static function NAME() {
|
|
||||||
return self::$_errorCodes['name'];
|
|
||||||
} // function NAME()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* REF
|
|
||||||
*
|
|
||||||
* Returns the error value #REF!
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #REF!
|
|
||||||
*/
|
|
||||||
public static function REF() {
|
|
||||||
return self::$_errorCodes['reference'];
|
|
||||||
} // function REF()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NULL
|
|
||||||
*
|
|
||||||
* Returns the error value #NULL!
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #NULL!
|
|
||||||
*/
|
|
||||||
public static function NULL() {
|
|
||||||
return self::$_errorCodes['null'];
|
|
||||||
} // function NULL()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VALUE
|
|
||||||
*
|
|
||||||
* Returns the error value #VALUE!
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Error Returns
|
|
||||||
* @return string #VALUE!
|
|
||||||
*/
|
|
||||||
public static function VALUE() {
|
|
||||||
return self::$_errorCodes['value'];
|
|
||||||
} // function VALUE()
|
|
||||||
|
|
||||||
|
|
||||||
public static function isMatrixValue($idx) {
|
|
||||||
return ((substr_count($idx,'.') <= 1) || (preg_match('/\.[A-Z]/',$idx) > 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function isValue($idx) {
|
|
||||||
return (substr_count($idx,'.') == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function isCellValue($idx) {
|
|
||||||
return (substr_count($idx,'.') > 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static function _ifCondition($condition) {
|
|
||||||
$condition = PHPExcel_Calculation_Functions::flattenSingleValue($condition);
|
|
||||||
if (!isset($condition{0}))
|
|
||||||
$condition = '=""';
|
|
||||||
if (!in_array($condition{0},array('>', '<', '='))) {
|
|
||||||
if (!is_numeric($condition)) { $condition = PHPExcel_Calculation::_wrapResult(strtoupper($condition)); }
|
|
||||||
return '='.$condition;
|
|
||||||
} else {
|
|
||||||
preg_match('/([<>=]+)(.*)/',$condition,$matches);
|
|
||||||
list(,$operator,$operand) = $matches;
|
|
||||||
|
|
||||||
if (!is_numeric($operand)) {
|
|
||||||
$operand = str_replace('"', '""', $operand);
|
|
||||||
$operand = PHPExcel_Calculation::_wrapResult(strtoupper($operand));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $operator.$operand;
|
|
||||||
}
|
|
||||||
} // function _ifCondition()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ERROR_TYPE
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function ERROR_TYPE($value = '') {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
$i = 1;
|
|
||||||
foreach(self::$_errorCodes as $errorCode) {
|
|
||||||
if ($value === $errorCode) {
|
|
||||||
return $i;
|
|
||||||
}
|
|
||||||
++$i;
|
|
||||||
}
|
|
||||||
return self::NA();
|
|
||||||
} // function ERROR_TYPE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_BLANK
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_BLANK($value = NULL) {
|
|
||||||
if (!is_null($value)) {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return is_null($value);
|
|
||||||
} // function IS_BLANK()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_ERR
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_ERR($value = '') {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
return self::IS_ERROR($value) && (!self::IS_NA($value));
|
|
||||||
} // function IS_ERR()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_ERROR
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_ERROR($value = '') {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if (!is_string($value))
|
|
||||||
return false;
|
|
||||||
return in_array($value, array_values(self::$_errorCodes));
|
|
||||||
} // function IS_ERROR()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_NA
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_NA($value = '') {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
return ($value === self::NA());
|
|
||||||
} // function IS_NA()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_EVEN
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_EVEN($value = NULL) {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if ($value === NULL)
|
|
||||||
return self::NAME();
|
|
||||||
if ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value))))
|
|
||||||
return self::VALUE();
|
|
||||||
return ($value % 2 == 0);
|
|
||||||
} // function IS_EVEN()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_ODD
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_ODD($value = NULL) {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if ($value === NULL)
|
|
||||||
return self::NAME();
|
|
||||||
if ((is_bool($value)) || ((is_string($value)) && (!is_numeric($value))))
|
|
||||||
return self::VALUE();
|
|
||||||
return (abs($value) % 2 == 1);
|
|
||||||
} // function IS_ODD()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_NUMBER
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_NUMBER($value = NULL) {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if (is_string($value)) {
|
|
||||||
return False;
|
|
||||||
}
|
|
||||||
return is_numeric($value);
|
|
||||||
} // function IS_NUMBER()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_LOGICAL
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_LOGICAL($value = NULL) {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
return is_bool($value);
|
|
||||||
} // function IS_LOGICAL()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_TEXT
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_TEXT($value = NULL) {
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
return (is_string($value) && !self::IS_ERROR($value));
|
|
||||||
} // function IS_TEXT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IS_NONTEXT
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function IS_NONTEXT($value = NULL) {
|
|
||||||
return !self::IS_TEXT($value);
|
|
||||||
} // function IS_NONTEXT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VERSION
|
|
||||||
*
|
|
||||||
* @return string Version information
|
|
||||||
*/
|
|
||||||
public static function VERSION() {
|
|
||||||
return 'PHPExcel ##VERSION##, ##DATE##';
|
|
||||||
} // function VERSION()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* N
|
|
||||||
*
|
|
||||||
* Returns a value converted to a number
|
|
||||||
*
|
|
||||||
* @param value The value you want converted
|
|
||||||
* @return number N converts values listed in the following table
|
|
||||||
* If value is or refers to N returns
|
|
||||||
* A number That number
|
|
||||||
* A date The serial number of that date
|
|
||||||
* TRUE 1
|
|
||||||
* FALSE 0
|
|
||||||
* An error value The error value
|
|
||||||
* Anything else 0
|
|
||||||
*/
|
|
||||||
public static function N($value = NULL) {
|
|
||||||
while (is_array($value)) {
|
|
||||||
$value = array_shift($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (gettype($value)) {
|
|
||||||
case 'double' :
|
|
||||||
case 'float' :
|
|
||||||
case 'integer' :
|
|
||||||
return $value;
|
|
||||||
break;
|
|
||||||
case 'boolean' :
|
|
||||||
return (integer) $value;
|
|
||||||
break;
|
|
||||||
case 'string' :
|
|
||||||
// Errors
|
|
||||||
if ((strlen($value) > 0) && ($value{0} == '#')) {
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
} // function N()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TYPE
|
|
||||||
*
|
|
||||||
* Returns a number that identifies the type of a value
|
|
||||||
*
|
|
||||||
* @param value The value you want tested
|
|
||||||
* @return number N converts values listed in the following table
|
|
||||||
* If value is or refers to N returns
|
|
||||||
* A number 1
|
|
||||||
* Text 2
|
|
||||||
* Logical Value 4
|
|
||||||
* An error value 16
|
|
||||||
* Array or Matrix 64
|
|
||||||
*/
|
|
||||||
public static function TYPE($value = NULL) {
|
|
||||||
$value = self::flattenArrayIndexed($value);
|
|
||||||
if (is_array($value) && (count($value) > 1)) {
|
|
||||||
$a = array_keys($value);
|
|
||||||
$a = array_pop($a);
|
|
||||||
// Range of cells is an error
|
|
||||||
if (self::isCellValue($a)) {
|
|
||||||
return 16;
|
|
||||||
// Test for Matrix
|
|
||||||
} elseif (self::isMatrixValue($a)) {
|
|
||||||
return 64;
|
|
||||||
}
|
|
||||||
} elseif(empty($value)) {
|
|
||||||
// Empty Cell
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
$value = self::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if (($value === NULL) || (is_float($value)) || (is_int($value))) {
|
|
||||||
return 1;
|
|
||||||
} elseif(is_bool($value)) {
|
|
||||||
return 4;
|
|
||||||
} elseif(is_array($value)) {
|
|
||||||
return 64;
|
|
||||||
} elseif(is_string($value)) {
|
|
||||||
// Errors
|
|
||||||
if ((strlen($value) > 0) && ($value{0} == '#')) {
|
|
||||||
return 16;
|
|
||||||
}
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
} // function TYPE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a multi-dimensional array to a simple 1-dimensional array
|
|
||||||
*
|
|
||||||
* @param array $array Array to be flattened
|
|
||||||
* @return array Flattened array
|
|
||||||
*/
|
|
||||||
public static function flattenArray($array) {
|
|
||||||
if (!is_array($array)) {
|
|
||||||
return (array) $array;
|
|
||||||
}
|
|
||||||
|
|
||||||
$arrayValues = array();
|
|
||||||
foreach ($array as $value) {
|
|
||||||
if (is_array($value)) {
|
|
||||||
foreach ($value as $val) {
|
|
||||||
if (is_array($val)) {
|
|
||||||
foreach ($val as $v) {
|
|
||||||
$arrayValues[] = $v;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$arrayValues[] = $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$arrayValues[] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $arrayValues;
|
|
||||||
} // function flattenArray()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert a multi-dimensional array to a simple 1-dimensional array, but retain an element of indexing
|
|
||||||
*
|
|
||||||
* @param array $array Array to be flattened
|
|
||||||
* @return array Flattened array
|
|
||||||
*/
|
|
||||||
public static function flattenArrayIndexed($array) {
|
|
||||||
if (!is_array($array)) {
|
|
||||||
return (array) $array;
|
|
||||||
}
|
|
||||||
|
|
||||||
$arrayValues = array();
|
|
||||||
foreach ($array as $k1 => $value) {
|
|
||||||
if (is_array($value)) {
|
|
||||||
foreach ($value as $k2 => $val) {
|
|
||||||
if (is_array($val)) {
|
|
||||||
foreach ($val as $k3 => $v) {
|
|
||||||
$arrayValues[$k1.'.'.$k2.'.'.$k3] = $v;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$arrayValues[$k1.'.'.$k2] = $val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$arrayValues[$k1] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $arrayValues;
|
|
||||||
} // function flattenArrayIndexed()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert an array to a single scalar value by extracting the first element
|
|
||||||
*
|
|
||||||
* @param mixed $value Array or scalar value
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public static function flattenSingleValue($value = '') {
|
|
||||||
while (is_array($value)) {
|
|
||||||
$value = array_pop($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $value;
|
|
||||||
} // function flattenSingleValue()
|
|
||||||
|
|
||||||
} // class PHPExcel_Calculation_Functions
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// There are a few mathematical functions that aren't available on all versions of PHP for all platforms
|
|
||||||
// These functions aren't available in Windows implementations of PHP prior to version 5.3.0
|
|
||||||
// So we test if they do exist for this version of PHP/operating platform; and if not we create them
|
|
||||||
//
|
|
||||||
if (!function_exists('acosh')) {
|
|
||||||
function acosh($x) {
|
|
||||||
return 2 * log(sqrt(($x + 1) / 2) + sqrt(($x - 1) / 2));
|
|
||||||
} // function acosh()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!function_exists('asinh')) {
|
|
||||||
function asinh($x) {
|
|
||||||
return log($x + sqrt(1 + $x * $x));
|
|
||||||
} // function asinh()
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!function_exists('atanh')) {
|
|
||||||
function atanh($x) {
|
|
||||||
return (log(1 + $x) - log(1 - $x)) / 2;
|
|
||||||
} // function atanh()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Strangely, PHP doesn't have a mb_str_replace multibyte function
|
|
||||||
// As we'll only ever use this function with UTF-8 characters, we can simply "hard-code" the character set
|
|
||||||
//
|
|
||||||
if ((!function_exists('mb_str_replace')) &&
|
|
||||||
(function_exists('mb_substr')) && (function_exists('mb_strlen')) && (function_exists('mb_strpos'))) {
|
|
||||||
function mb_str_replace($search, $replace, $subject) {
|
|
||||||
if(is_array($subject)) {
|
|
||||||
$ret = array();
|
|
||||||
foreach($subject as $key => $val) {
|
|
||||||
$ret[$key] = mb_str_replace($search, $replace, $val);
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach((array) $search as $key => $s) {
|
|
||||||
if($s == '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$r = !is_array($replace) ? $replace : (array_key_exists($key, $replace) ? $replace[$key] : '');
|
|
||||||
$pos = mb_strpos($subject, $s, 0, 'UTF-8');
|
|
||||||
while($pos !== false) {
|
|
||||||
$subject = mb_substr($subject, 0, $pos, 'UTF-8') . $r . mb_substr($subject, $pos + mb_strlen($s, 'UTF-8'), 65535, 'UTF-8');
|
|
||||||
$pos = mb_strpos($subject, $s, $pos + mb_strlen($r, 'UTF-8'), 'UTF-8');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $subject;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,288 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** PHPExcel root directory */
|
|
||||||
if (!defined('PHPEXCEL_ROOT')) {
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
|
|
||||||
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_Logical
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_Logical {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TRUE
|
|
||||||
*
|
|
||||||
* Returns the boolean TRUE.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =TRUE()
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @return boolean True
|
|
||||||
*/
|
|
||||||
public static function TRUE() {
|
|
||||||
return TRUE;
|
|
||||||
} // function TRUE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FALSE
|
|
||||||
*
|
|
||||||
* Returns the boolean FALSE.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =FALSE()
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @return boolean False
|
|
||||||
*/
|
|
||||||
public static function FALSE() {
|
|
||||||
return FALSE;
|
|
||||||
} // function FALSE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LOGICAL_AND
|
|
||||||
*
|
|
||||||
* Returns boolean TRUE if all its arguments are TRUE; returns FALSE if one or more argument is FALSE.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =AND(logical1[,logical2[, ...]])
|
|
||||||
*
|
|
||||||
* The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays
|
|
||||||
* or references that contain logical values.
|
|
||||||
*
|
|
||||||
* Boolean arguments are treated as True or False as appropriate
|
|
||||||
* Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
|
|
||||||
* If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
|
|
||||||
* the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @param mixed $arg,... Data values
|
|
||||||
* @return boolean The logical AND of the arguments.
|
|
||||||
*/
|
|
||||||
public static function LOGICAL_AND() {
|
|
||||||
// Return value
|
|
||||||
$returnValue = TRUE;
|
|
||||||
|
|
||||||
// Loop through the arguments
|
|
||||||
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
|
||||||
$argCount = -1;
|
|
||||||
foreach ($aArgs as $argCount => $arg) {
|
|
||||||
// Is it a boolean value?
|
|
||||||
if (is_bool($arg)) {
|
|
||||||
$returnValue = $returnValue && $arg;
|
|
||||||
} elseif ((is_numeric($arg)) && (!is_string($arg))) {
|
|
||||||
$returnValue = $returnValue && ($arg != 0);
|
|
||||||
} elseif (is_string($arg)) {
|
|
||||||
$arg = strtoupper($arg);
|
|
||||||
if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) {
|
|
||||||
$arg = TRUE;
|
|
||||||
} elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) {
|
|
||||||
$arg = FALSE;
|
|
||||||
} else {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
$returnValue = $returnValue && ($arg != 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
if ($argCount < 0) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
return $returnValue;
|
|
||||||
} // function LOGICAL_AND()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LOGICAL_OR
|
|
||||||
*
|
|
||||||
* Returns boolean TRUE if any argument is TRUE; returns FALSE if all arguments are FALSE.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =OR(logical1[,logical2[, ...]])
|
|
||||||
*
|
|
||||||
* The arguments must evaluate to logical values such as TRUE or FALSE, or the arguments must be arrays
|
|
||||||
* or references that contain logical values.
|
|
||||||
*
|
|
||||||
* Boolean arguments are treated as True or False as appropriate
|
|
||||||
* Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
|
|
||||||
* If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
|
|
||||||
* the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @param mixed $arg,... Data values
|
|
||||||
* @return boolean The logical OR of the arguments.
|
|
||||||
*/
|
|
||||||
public static function LOGICAL_OR() {
|
|
||||||
// Return value
|
|
||||||
$returnValue = FALSE;
|
|
||||||
|
|
||||||
// Loop through the arguments
|
|
||||||
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
|
||||||
$argCount = -1;
|
|
||||||
foreach ($aArgs as $argCount => $arg) {
|
|
||||||
// Is it a boolean value?
|
|
||||||
if (is_bool($arg)) {
|
|
||||||
$returnValue = $returnValue || $arg;
|
|
||||||
} elseif ((is_numeric($arg)) && (!is_string($arg))) {
|
|
||||||
$returnValue = $returnValue || ($arg != 0);
|
|
||||||
} elseif (is_string($arg)) {
|
|
||||||
$arg = strtoupper($arg);
|
|
||||||
if (($arg == 'TRUE') || ($arg == PHPExcel_Calculation::getTRUE())) {
|
|
||||||
$arg = TRUE;
|
|
||||||
} elseif (($arg == 'FALSE') || ($arg == PHPExcel_Calculation::getFALSE())) {
|
|
||||||
$arg = FALSE;
|
|
||||||
} else {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
$returnValue = $returnValue || ($arg != 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
if ($argCount < 0) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
return $returnValue;
|
|
||||||
} // function LOGICAL_OR()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* NOT
|
|
||||||
*
|
|
||||||
* Returns the boolean inverse of the argument.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =NOT(logical)
|
|
||||||
*
|
|
||||||
* The argument must evaluate to a logical value such as TRUE or FALSE
|
|
||||||
*
|
|
||||||
* Boolean arguments are treated as True or False as appropriate
|
|
||||||
* Integer or floating point arguments are treated as True, except for 0 or 0.0 which are False
|
|
||||||
* If any argument value is a string, or a Null, the function returns a #VALUE! error, unless the string holds
|
|
||||||
* the value TRUE or FALSE, in which case it is evaluated as the corresponding boolean value
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @param mixed $logical A value or expression that can be evaluated to TRUE or FALSE
|
|
||||||
* @return boolean The boolean inverse of the argument.
|
|
||||||
*/
|
|
||||||
public static function NOT($logical=FALSE) {
|
|
||||||
$logical = PHPExcel_Calculation_Functions::flattenSingleValue($logical);
|
|
||||||
if (is_string($logical)) {
|
|
||||||
$logical = strtoupper($logical);
|
|
||||||
if (($logical == 'TRUE') || ($logical == PHPExcel_Calculation::getTRUE())) {
|
|
||||||
return FALSE;
|
|
||||||
} elseif (($logical == 'FALSE') || ($logical == PHPExcel_Calculation::getFALSE())) {
|
|
||||||
return TRUE;
|
|
||||||
} else {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return !$logical;
|
|
||||||
} // function NOT()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* STATEMENT_IF
|
|
||||||
*
|
|
||||||
* Returns one value if a condition you specify evaluates to TRUE and another value if it evaluates to FALSE.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =IF(condition[,returnIfTrue[,returnIfFalse]])
|
|
||||||
*
|
|
||||||
* Condition is any value or expression that can be evaluated to TRUE or FALSE.
|
|
||||||
* For example, A10=100 is a logical expression; if the value in cell A10 is equal to 100,
|
|
||||||
* the expression evaluates to TRUE. Otherwise, the expression evaluates to FALSE.
|
|
||||||
* This argument can use any comparison calculation operator.
|
|
||||||
* ReturnIfTrue is the value that is returned if condition evaluates to TRUE.
|
|
||||||
* For example, if this argument is the text string "Within budget" and the condition argument evaluates to TRUE,
|
|
||||||
* then the IF function returns the text "Within budget"
|
|
||||||
* If condition is TRUE and ReturnIfTrue is blank, this argument returns 0 (zero). To display the word TRUE, use
|
|
||||||
* the logical value TRUE for this argument.
|
|
||||||
* ReturnIfTrue can be another formula.
|
|
||||||
* ReturnIfFalse is the value that is returned if condition evaluates to FALSE.
|
|
||||||
* For example, if this argument is the text string "Over budget" and the condition argument evaluates to FALSE,
|
|
||||||
* then the IF function returns the text "Over budget".
|
|
||||||
* If condition is FALSE and ReturnIfFalse is omitted, then the logical value FALSE is returned.
|
|
||||||
* If condition is FALSE and ReturnIfFalse is blank, then the value 0 (zero) is returned.
|
|
||||||
* ReturnIfFalse can be another formula.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @param mixed $condition Condition to evaluate
|
|
||||||
* @param mixed $returnIfTrue Value to return when condition is true
|
|
||||||
* @param mixed $returnIfFalse Optional value to return when condition is false
|
|
||||||
* @return mixed The value of returnIfTrue or returnIfFalse determined by condition
|
|
||||||
*/
|
|
||||||
public static function STATEMENT_IF($condition = TRUE, $returnIfTrue = 0, $returnIfFalse = FALSE) {
|
|
||||||
$condition = (is_null($condition)) ? TRUE : (boolean) PHPExcel_Calculation_Functions::flattenSingleValue($condition);
|
|
||||||
$returnIfTrue = (is_null($returnIfTrue)) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfTrue);
|
|
||||||
$returnIfFalse = (is_null($returnIfFalse)) ? FALSE : PHPExcel_Calculation_Functions::flattenSingleValue($returnIfFalse);
|
|
||||||
|
|
||||||
return ($condition) ? $returnIfTrue : $returnIfFalse;
|
|
||||||
} // function STATEMENT_IF()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* IFERROR
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =IFERROR(testValue,errorpart)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @param mixed $testValue Value to check, is also the value returned when no error
|
|
||||||
* @param mixed $errorpart Value to return when testValue is an error condition
|
|
||||||
* @return mixed The value of errorpart or testValue determined by error condition
|
|
||||||
*/
|
|
||||||
public static function IFERROR($testValue = '', $errorpart = '') {
|
|
||||||
$testValue = (is_null($testValue)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($testValue);
|
|
||||||
$errorpart = (is_null($errorpart)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($errorpart);
|
|
||||||
|
|
||||||
return self::STATEMENT_IF(PHPExcel_Calculation_Functions::IS_ERROR($testValue), $errorpart, $testValue);
|
|
||||||
} // function IFERROR()
|
|
||||||
|
|
||||||
} // class PHPExcel_Calculation_Logical
|
|
@ -1,881 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** PHPExcel root directory */
|
|
||||||
if (!defined('PHPEXCEL_ROOT')) {
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
|
|
||||||
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_LookupRef
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_LookupRef {
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CELL_ADDRESS
|
|
||||||
*
|
|
||||||
* Creates a cell address as text, given specified row and column numbers.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =ADDRESS(row, column, [relativity], [referenceStyle], [sheetText])
|
|
||||||
*
|
|
||||||
* @param row Row number to use in the cell reference
|
|
||||||
* @param column Column number to use in the cell reference
|
|
||||||
* @param relativity Flag indicating the type of reference to return
|
|
||||||
* 1 or omitted Absolute
|
|
||||||
* 2 Absolute row; relative column
|
|
||||||
* 3 Relative row; absolute column
|
|
||||||
* 4 Relative
|
|
||||||
* @param referenceStyle A logical value that specifies the A1 or R1C1 reference style.
|
|
||||||
* TRUE or omitted CELL_ADDRESS returns an A1-style reference
|
|
||||||
* FALSE CELL_ADDRESS returns an R1C1-style reference
|
|
||||||
* @param sheetText Optional Name of worksheet to use
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function CELL_ADDRESS($row, $column, $relativity=1, $referenceStyle=True, $sheetText='') {
|
|
||||||
$row = PHPExcel_Calculation_Functions::flattenSingleValue($row);
|
|
||||||
$column = PHPExcel_Calculation_Functions::flattenSingleValue($column);
|
|
||||||
$relativity = PHPExcel_Calculation_Functions::flattenSingleValue($relativity);
|
|
||||||
$sheetText = PHPExcel_Calculation_Functions::flattenSingleValue($sheetText);
|
|
||||||
|
|
||||||
if (($row < 1) || ($column < 1)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($sheetText > '') {
|
|
||||||
if (strpos($sheetText,' ') !== False) { $sheetText = "'".$sheetText."'"; }
|
|
||||||
$sheetText .='!';
|
|
||||||
}
|
|
||||||
if ((!is_bool($referenceStyle)) || $referenceStyle) {
|
|
||||||
$rowRelative = $columnRelative = '$';
|
|
||||||
$column = PHPExcel_Cell::stringFromColumnIndex($column-1);
|
|
||||||
if (($relativity == 2) || ($relativity == 4)) { $columnRelative = ''; }
|
|
||||||
if (($relativity == 3) || ($relativity == 4)) { $rowRelative = ''; }
|
|
||||||
return $sheetText.$columnRelative.$column.$rowRelative.$row;
|
|
||||||
} else {
|
|
||||||
if (($relativity == 2) || ($relativity == 4)) { $column = '['.$column.']'; }
|
|
||||||
if (($relativity == 3) || ($relativity == 4)) { $row = '['.$row.']'; }
|
|
||||||
return $sheetText.'R'.$row.'C'.$column;
|
|
||||||
}
|
|
||||||
} // function CELL_ADDRESS()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* COLUMN
|
|
||||||
*
|
|
||||||
* Returns the column number of the given cell reference
|
|
||||||
* If the cell reference is a range of cells, COLUMN returns the column numbers of each column in the reference as a horizontal array.
|
|
||||||
* If cell reference is omitted, and the function is being called through the calculation engine, then it is assumed to be the
|
|
||||||
* reference of the cell in which the COLUMN function appears; otherwise this function returns 0.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =COLUMN([cellAddress])
|
|
||||||
*
|
|
||||||
* @param cellAddress A reference to a range of cells for which you want the column numbers
|
|
||||||
* @return integer or array of integer
|
|
||||||
*/
|
|
||||||
public static function COLUMN($cellAddress=Null) {
|
|
||||||
if (is_null($cellAddress) || trim($cellAddress) === '') { return 0; }
|
|
||||||
|
|
||||||
if (is_array($cellAddress)) {
|
|
||||||
foreach($cellAddress as $columnKey => $value) {
|
|
||||||
$columnKey = preg_replace('/[^a-z]/i','',$columnKey);
|
|
||||||
return (integer) PHPExcel_Cell::columnIndexFromString($columnKey);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (strpos($cellAddress,'!') !== false) {
|
|
||||||
list($sheet,$cellAddress) = explode('!',$cellAddress);
|
|
||||||
}
|
|
||||||
if (strpos($cellAddress,':') !== false) {
|
|
||||||
list($startAddress,$endAddress) = explode(':',$cellAddress);
|
|
||||||
$startAddress = preg_replace('/[^a-z]/i','',$startAddress);
|
|
||||||
$endAddress = preg_replace('/[^a-z]/i','',$endAddress);
|
|
||||||
$returnValue = array();
|
|
||||||
do {
|
|
||||||
$returnValue[] = (integer) PHPExcel_Cell::columnIndexFromString($startAddress);
|
|
||||||
} while ($startAddress++ != $endAddress);
|
|
||||||
return $returnValue;
|
|
||||||
} else {
|
|
||||||
$cellAddress = preg_replace('/[^a-z]/i','',$cellAddress);
|
|
||||||
return (integer) PHPExcel_Cell::columnIndexFromString($cellAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // function COLUMN()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* COLUMNS
|
|
||||||
*
|
|
||||||
* Returns the number of columns in an array or reference.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =COLUMNS(cellAddress)
|
|
||||||
*
|
|
||||||
* @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of columns
|
|
||||||
* @return integer The number of columns in cellAddress
|
|
||||||
*/
|
|
||||||
public static function COLUMNS($cellAddress=Null) {
|
|
||||||
if (is_null($cellAddress) || $cellAddress === '') {
|
|
||||||
return 1;
|
|
||||||
} elseif (!is_array($cellAddress)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
$x = array_keys($cellAddress);
|
|
||||||
$x = array_shift($x);
|
|
||||||
$isMatrix = (is_numeric($x));
|
|
||||||
list($columns,$rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
|
|
||||||
|
|
||||||
if ($isMatrix) {
|
|
||||||
return $rows;
|
|
||||||
} else {
|
|
||||||
return $columns;
|
|
||||||
}
|
|
||||||
} // function COLUMNS()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ROW
|
|
||||||
*
|
|
||||||
* Returns the row number of the given cell reference
|
|
||||||
* If the cell reference is a range of cells, ROW returns the row numbers of each row in the reference as a vertical array.
|
|
||||||
* If cell reference is omitted, and the function is being called through the calculation engine, then it is assumed to be the
|
|
||||||
* reference of the cell in which the ROW function appears; otherwise this function returns 0.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =ROW([cellAddress])
|
|
||||||
*
|
|
||||||
* @param cellAddress A reference to a range of cells for which you want the row numbers
|
|
||||||
* @return integer or array of integer
|
|
||||||
*/
|
|
||||||
public static function ROW($cellAddress=Null) {
|
|
||||||
if (is_null($cellAddress) || trim($cellAddress) === '') { return 0; }
|
|
||||||
|
|
||||||
if (is_array($cellAddress)) {
|
|
||||||
foreach($cellAddress as $columnKey => $rowValue) {
|
|
||||||
foreach($rowValue as $rowKey => $cellValue) {
|
|
||||||
return (integer) preg_replace('/[^0-9]/i','',$rowKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (strpos($cellAddress,'!') !== false) {
|
|
||||||
list($sheet,$cellAddress) = explode('!',$cellAddress);
|
|
||||||
}
|
|
||||||
if (strpos($cellAddress,':') !== false) {
|
|
||||||
list($startAddress,$endAddress) = explode(':',$cellAddress);
|
|
||||||
$startAddress = preg_replace('/[^0-9]/','',$startAddress);
|
|
||||||
$endAddress = preg_replace('/[^0-9]/','',$endAddress);
|
|
||||||
$returnValue = array();
|
|
||||||
do {
|
|
||||||
$returnValue[][] = (integer) $startAddress;
|
|
||||||
} while ($startAddress++ != $endAddress);
|
|
||||||
return $returnValue;
|
|
||||||
} else {
|
|
||||||
list($cellAddress) = explode(':',$cellAddress);
|
|
||||||
return (integer) preg_replace('/[^0-9]/','',$cellAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // function ROW()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ROWS
|
|
||||||
*
|
|
||||||
* Returns the number of rows in an array or reference.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =ROWS(cellAddress)
|
|
||||||
*
|
|
||||||
* @param cellAddress An array or array formula, or a reference to a range of cells for which you want the number of rows
|
|
||||||
* @return integer The number of rows in cellAddress
|
|
||||||
*/
|
|
||||||
public static function ROWS($cellAddress=Null) {
|
|
||||||
if (is_null($cellAddress) || $cellAddress === '') {
|
|
||||||
return 1;
|
|
||||||
} elseif (!is_array($cellAddress)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
$i = array_keys($cellAddress);
|
|
||||||
$isMatrix = (is_numeric(array_shift($i)));
|
|
||||||
list($columns,$rows) = PHPExcel_Calculation::_getMatrixDimensions($cellAddress);
|
|
||||||
|
|
||||||
if ($isMatrix) {
|
|
||||||
return $columns;
|
|
||||||
} else {
|
|
||||||
return $rows;
|
|
||||||
}
|
|
||||||
} // function ROWS()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HYPERLINK
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =HYPERLINK(linkURL,displayName)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @category Logical Functions
|
|
||||||
* @param string $linkURL Value to check, is also the value returned when no error
|
|
||||||
* @param string $displayName Value to return when testValue is an error condition
|
|
||||||
* @param PHPExcel_Cell $pCell The cell to set the hyperlink in
|
|
||||||
* @return mixed The value of $displayName (or $linkURL if $displayName was blank)
|
|
||||||
*/
|
|
||||||
public static function HYPERLINK($linkURL = '', $displayName = null, PHPExcel_Cell $pCell = null) {
|
|
||||||
$args = func_get_args();
|
|
||||||
$pCell = array_pop($args);
|
|
||||||
|
|
||||||
$linkURL = (is_null($linkURL)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($linkURL);
|
|
||||||
$displayName = (is_null($displayName)) ? '' : PHPExcel_Calculation_Functions::flattenSingleValue($displayName);
|
|
||||||
|
|
||||||
if ((!is_object($pCell)) || (trim($linkURL) == '')) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((is_object($displayName)) || trim($displayName) == '') {
|
|
||||||
$displayName = $linkURL;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pCell->getHyperlink()->setUrl($linkURL);
|
|
||||||
|
|
||||||
return $displayName;
|
|
||||||
} // function HYPERLINK()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* INDIRECT
|
|
||||||
*
|
|
||||||
* Returns the reference specified by a text string.
|
|
||||||
* References are immediately evaluated to display their contents.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =INDIRECT(cellAddress)
|
|
||||||
*
|
|
||||||
* NOTE - INDIRECT() does not yet support the optional a1 parameter introduced in Excel 2010
|
|
||||||
*
|
|
||||||
* @param cellAddress $cellAddress The cell address of the current cell (containing this formula)
|
|
||||||
* @param PHPExcel_Cell $pCell The current cell (containing this formula)
|
|
||||||
* @return mixed The cells referenced by cellAddress
|
|
||||||
*
|
|
||||||
* @todo Support for the optional a1 parameter introduced in Excel 2010
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static function INDIRECT($cellAddress = NULL, PHPExcel_Cell $pCell = NULL) {
|
|
||||||
$cellAddress = PHPExcel_Calculation_Functions::flattenSingleValue($cellAddress);
|
|
||||||
if (is_null($cellAddress) || $cellAddress === '') {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
|
|
||||||
$cellAddress1 = $cellAddress;
|
|
||||||
$cellAddress2 = NULL;
|
|
||||||
if (strpos($cellAddress,':') !== false) {
|
|
||||||
list($cellAddress1,$cellAddress2) = explode(':',$cellAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress1, $matches)) ||
|
|
||||||
((!is_null($cellAddress2)) && (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_CELLREF.'$/i', $cellAddress2, $matches)))) {
|
|
||||||
if (!preg_match('/^'.PHPExcel_Calculation::CALCULATION_REGEXP_NAMEDRANGE.'$/i', $cellAddress1, $matches)) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($cellAddress,'!') !== FALSE) {
|
|
||||||
list($sheetName, $cellAddress) = explode('!',$cellAddress);
|
|
||||||
$sheetName = trim($sheetName, "'");
|
|
||||||
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
|
|
||||||
} else {
|
|
||||||
$pSheet = $pCell->getWorksheet();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Calculation::getInstance()->extractNamedRange($cellAddress, $pSheet, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($cellAddress,'!') !== FALSE) {
|
|
||||||
list($sheetName,$cellAddress) = explode('!',$cellAddress);
|
|
||||||
$sheetName = trim($sheetName, "'");
|
|
||||||
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
|
|
||||||
} else {
|
|
||||||
$pSheet = $pCell->getWorksheet();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, FALSE);
|
|
||||||
} // function INDIRECT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OFFSET
|
|
||||||
*
|
|
||||||
* Returns a reference to a range that is a specified number of rows and columns from a cell or range of cells.
|
|
||||||
* The reference that is returned can be a single cell or a range of cells. You can specify the number of rows and
|
|
||||||
* the number of columns to be returned.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =OFFSET(cellAddress, rows, cols, [height], [width])
|
|
||||||
*
|
|
||||||
* @param cellAddress The reference from which you want to base the offset. Reference must refer to a cell or
|
|
||||||
* range of adjacent cells; otherwise, OFFSET returns the #VALUE! error value.
|
|
||||||
* @param rows The number of rows, up or down, that you want the upper-left cell to refer to.
|
|
||||||
* Using 5 as the rows argument specifies that the upper-left cell in the reference is
|
|
||||||
* five rows below reference. Rows can be positive (which means below the starting reference)
|
|
||||||
* or negative (which means above the starting reference).
|
|
||||||
* @param cols The number of columns, to the left or right, that you want the upper-left cell of the result
|
|
||||||
* to refer to. Using 5 as the cols argument specifies that the upper-left cell in the
|
|
||||||
* reference is five columns to the right of reference. Cols can be positive (which means
|
|
||||||
* to the right of the starting reference) or negative (which means to the left of the
|
|
||||||
* starting reference).
|
|
||||||
* @param height The height, in number of rows, that you want the returned reference to be. Height must be a positive number.
|
|
||||||
* @param width The width, in number of columns, that you want the returned reference to be. Width must be a positive number.
|
|
||||||
* @return string A reference to a cell or range of cells
|
|
||||||
*/
|
|
||||||
public static function OFFSET($cellAddress=Null,$rows=0,$columns=0,$height=null,$width=null) {
|
|
||||||
$rows = PHPExcel_Calculation_Functions::flattenSingleValue($rows);
|
|
||||||
$columns = PHPExcel_Calculation_Functions::flattenSingleValue($columns);
|
|
||||||
$height = PHPExcel_Calculation_Functions::flattenSingleValue($height);
|
|
||||||
$width = PHPExcel_Calculation_Functions::flattenSingleValue($width);
|
|
||||||
if ($cellAddress == Null) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$args = func_get_args();
|
|
||||||
$pCell = array_pop($args);
|
|
||||||
if (!is_object($pCell)) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
|
|
||||||
$sheetName = NULL;
|
|
||||||
if (strpos($cellAddress,"!")) {
|
|
||||||
list($sheetName,$cellAddress) = explode("!",$cellAddress);
|
|
||||||
$sheetName = trim($sheetName, "'");
|
|
||||||
}
|
|
||||||
if (strpos($cellAddress,":")) {
|
|
||||||
list($startCell,$endCell) = explode(":",$cellAddress);
|
|
||||||
} else {
|
|
||||||
$startCell = $endCell = $cellAddress;
|
|
||||||
}
|
|
||||||
list($startCellColumn,$startCellRow) = PHPExcel_Cell::coordinateFromString($startCell);
|
|
||||||
list($endCellColumn,$endCellRow) = PHPExcel_Cell::coordinateFromString($endCell);
|
|
||||||
|
|
||||||
$startCellRow += $rows;
|
|
||||||
$startCellColumn = PHPExcel_Cell::columnIndexFromString($startCellColumn) - 1;
|
|
||||||
$startCellColumn += $columns;
|
|
||||||
|
|
||||||
if (($startCellRow <= 0) || ($startCellColumn < 0)) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
$endCellColumn = PHPExcel_Cell::columnIndexFromString($endCellColumn) - 1;
|
|
||||||
if (($width != null) && (!is_object($width))) {
|
|
||||||
$endCellColumn = $startCellColumn + $width - 1;
|
|
||||||
} else {
|
|
||||||
$endCellColumn += $columns;
|
|
||||||
}
|
|
||||||
$startCellColumn = PHPExcel_Cell::stringFromColumnIndex($startCellColumn);
|
|
||||||
|
|
||||||
if (($height != null) && (!is_object($height))) {
|
|
||||||
$endCellRow = $startCellRow + $height - 1;
|
|
||||||
} else {
|
|
||||||
$endCellRow += $rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($endCellRow <= 0) || ($endCellColumn < 0)) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
$endCellColumn = PHPExcel_Cell::stringFromColumnIndex($endCellColumn);
|
|
||||||
|
|
||||||
$cellAddress = $startCellColumn.$startCellRow;
|
|
||||||
if (($startCellColumn != $endCellColumn) || ($startCellRow != $endCellRow)) {
|
|
||||||
$cellAddress .= ':'.$endCellColumn.$endCellRow;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($sheetName !== NULL) {
|
|
||||||
$pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName);
|
|
||||||
} else {
|
|
||||||
$pSheet = $pCell->getWorksheet();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Calculation::getInstance()->extractCellRange($cellAddress, $pSheet, False);
|
|
||||||
} // function OFFSET()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CHOOSE
|
|
||||||
*
|
|
||||||
* Uses lookup_value to return a value from the list of value arguments.
|
|
||||||
* Use CHOOSE to select one of up to 254 values based on the lookup_value.
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =CHOOSE(index_num, value1, [value2], ...)
|
|
||||||
*
|
|
||||||
* @param index_num Specifies which value argument is selected.
|
|
||||||
* Index_num must be a number between 1 and 254, or a formula or reference to a cell containing a number
|
|
||||||
* between 1 and 254.
|
|
||||||
* @param value1... Value1 is required, subsequent values are optional.
|
|
||||||
* Between 1 to 254 value arguments from which CHOOSE selects a value or an action to perform based on
|
|
||||||
* index_num. The arguments can be numbers, cell references, defined names, formulas, functions, or
|
|
||||||
* text.
|
|
||||||
* @return mixed The selected value
|
|
||||||
*/
|
|
||||||
public static function CHOOSE() {
|
|
||||||
$chooseArgs = func_get_args();
|
|
||||||
$chosenEntry = PHPExcel_Calculation_Functions::flattenArray(array_shift($chooseArgs));
|
|
||||||
$entryCount = count($chooseArgs) - 1;
|
|
||||||
|
|
||||||
if(is_array($chosenEntry)) {
|
|
||||||
$chosenEntry = array_shift($chosenEntry);
|
|
||||||
}
|
|
||||||
if ((is_numeric($chosenEntry)) && (!is_bool($chosenEntry))) {
|
|
||||||
--$chosenEntry;
|
|
||||||
} else {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
$chosenEntry = floor($chosenEntry);
|
|
||||||
if (($chosenEntry < 0) || ($chosenEntry > $entryCount)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_array($chooseArgs[$chosenEntry])) {
|
|
||||||
return PHPExcel_Calculation_Functions::flattenArray($chooseArgs[$chosenEntry]);
|
|
||||||
} else {
|
|
||||||
return $chooseArgs[$chosenEntry];
|
|
||||||
}
|
|
||||||
} // function CHOOSE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MATCH
|
|
||||||
*
|
|
||||||
* The MATCH function searches for a specified item in a range of cells
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =MATCH(lookup_value, lookup_array, [match_type])
|
|
||||||
*
|
|
||||||
* @param lookup_value The value that you want to match in lookup_array
|
|
||||||
* @param lookup_array The range of cells being searched
|
|
||||||
* @param match_type The number -1, 0, or 1. -1 means above, 0 means exact match, 1 means below. If match_type is 1 or -1, the list has to be ordered.
|
|
||||||
* @return integer The relative position of the found item
|
|
||||||
*/
|
|
||||||
public static function MATCH($lookup_value, $lookup_array, $match_type=1) {
|
|
||||||
$lookup_array = PHPExcel_Calculation_Functions::flattenArray($lookup_array);
|
|
||||||
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
|
|
||||||
$match_type = (is_null($match_type)) ? 1 : (int) PHPExcel_Calculation_Functions::flattenSingleValue($match_type);
|
|
||||||
// MATCH is not case sensitive
|
|
||||||
$lookup_value = strtolower($lookup_value);
|
|
||||||
|
|
||||||
// lookup_value type has to be number, text, or logical values
|
|
||||||
if ((!is_numeric($lookup_value)) && (!is_string($lookup_value)) && (!is_bool($lookup_value))) {
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
}
|
|
||||||
|
|
||||||
// match_type is 0, 1 or -1
|
|
||||||
if (($match_type !== 0) && ($match_type !== -1) && ($match_type !== 1)) {
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
}
|
|
||||||
|
|
||||||
// lookup_array should not be empty
|
|
||||||
$lookupArraySize = count($lookup_array);
|
|
||||||
if ($lookupArraySize <= 0) {
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
}
|
|
||||||
|
|
||||||
// lookup_array should contain only number, text, or logical values, or empty (null) cells
|
|
||||||
foreach($lookup_array as $i => $lookupArrayValue) {
|
|
||||||
// check the type of the value
|
|
||||||
if ((!is_numeric($lookupArrayValue)) && (!is_string($lookupArrayValue)) &&
|
|
||||||
(!is_bool($lookupArrayValue)) && (!is_null($lookupArrayValue))) {
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
}
|
|
||||||
// convert strings to lowercase for case-insensitive testing
|
|
||||||
if (is_string($lookupArrayValue)) {
|
|
||||||
$lookup_array[$i] = strtolower($lookupArrayValue);
|
|
||||||
}
|
|
||||||
if ((is_null($lookupArrayValue)) && (($match_type == 1) || ($match_type == -1))) {
|
|
||||||
$lookup_array = array_slice($lookup_array,0,$i-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// if match_type is 1 or -1, the list has to be ordered
|
|
||||||
if ($match_type == 1) {
|
|
||||||
asort($lookup_array);
|
|
||||||
$keySet = array_keys($lookup_array);
|
|
||||||
} elseif($match_type == -1) {
|
|
||||||
arsort($lookup_array);
|
|
||||||
$keySet = array_keys($lookup_array);
|
|
||||||
}
|
|
||||||
|
|
||||||
// **
|
|
||||||
// find the match
|
|
||||||
// **
|
|
||||||
// loop on the cells
|
|
||||||
// var_dump($lookup_array);
|
|
||||||
// echo '<br />';
|
|
||||||
foreach($lookup_array as $i => $lookupArrayValue) {
|
|
||||||
if (($match_type == 0) && ($lookupArrayValue == $lookup_value)) {
|
|
||||||
// exact match
|
|
||||||
return ++$i;
|
|
||||||
} elseif (($match_type == -1) && ($lookupArrayValue <= $lookup_value)) {
|
|
||||||
// echo '$i = '.$i.' => ';
|
|
||||||
// var_dump($lookupArrayValue);
|
|
||||||
// echo '<br />';
|
|
||||||
// echo 'Keyset = ';
|
|
||||||
// var_dump($keySet);
|
|
||||||
// echo '<br />';
|
|
||||||
$i = array_search($i,$keySet);
|
|
||||||
// echo '$i='.$i.'<br />';
|
|
||||||
// if match_type is -1 <=> find the smallest value that is greater than or equal to lookup_value
|
|
||||||
if ($i < 1){
|
|
||||||
// 1st cell was allready smaller than the lookup_value
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
// the previous cell was the match
|
|
||||||
return $keySet[$i-1]+1;
|
|
||||||
}
|
|
||||||
} elseif (($match_type == 1) && ($lookupArrayValue >= $lookup_value)) {
|
|
||||||
// echo '$i = '.$i.' => ';
|
|
||||||
// var_dump($lookupArrayValue);
|
|
||||||
// echo '<br />';
|
|
||||||
// echo 'Keyset = ';
|
|
||||||
// var_dump($keySet);
|
|
||||||
// echo '<br />';
|
|
||||||
$i = array_search($i,$keySet);
|
|
||||||
// echo '$i='.$i.'<br />';
|
|
||||||
// if match_type is 1 <=> find the largest value that is less than or equal to lookup_value
|
|
||||||
if ($i < 1){
|
|
||||||
// 1st cell was allready bigger than the lookup_value
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
// the previous cell was the match
|
|
||||||
return $keySet[$i-1]+1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// unsuccessful in finding a match, return #N/A error value
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
} // function MATCH()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* INDEX
|
|
||||||
*
|
|
||||||
* Uses an index to choose a value from a reference or array
|
|
||||||
*
|
|
||||||
* Excel Function:
|
|
||||||
* =INDEX(range_array, row_num, [column_num])
|
|
||||||
*
|
|
||||||
* @param range_array A range of cells or an array constant
|
|
||||||
* @param row_num The row in array from which to return a value. If row_num is omitted, column_num is required.
|
|
||||||
* @param column_num The column in array from which to return a value. If column_num is omitted, row_num is required.
|
|
||||||
* @return mixed the value of a specified cell or array of cells
|
|
||||||
*/
|
|
||||||
public static function INDEX($arrayValues,$rowNum = 0,$columnNum = 0) {
|
|
||||||
|
|
||||||
if (($rowNum < 0) || ($columnNum < 0)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_array($arrayValues)) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
}
|
|
||||||
|
|
||||||
$rowKeys = array_keys($arrayValues);
|
|
||||||
$columnKeys = @array_keys($arrayValues[$rowKeys[0]]);
|
|
||||||
|
|
||||||
if ($columnNum > count($columnKeys)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
} elseif ($columnNum == 0) {
|
|
||||||
if ($rowNum == 0) {
|
|
||||||
return $arrayValues;
|
|
||||||
}
|
|
||||||
$rowNum = $rowKeys[--$rowNum];
|
|
||||||
$returnArray = array();
|
|
||||||
foreach($arrayValues as $arrayColumn) {
|
|
||||||
if (is_array($arrayColumn)) {
|
|
||||||
if (isset($arrayColumn[$rowNum])) {
|
|
||||||
$returnArray[] = $arrayColumn[$rowNum];
|
|
||||||
} else {
|
|
||||||
return $arrayValues[$rowNum];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return $arrayValues[$rowNum];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $returnArray;
|
|
||||||
}
|
|
||||||
$columnNum = $columnKeys[--$columnNum];
|
|
||||||
if ($rowNum > count($rowKeys)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
} elseif ($rowNum == 0) {
|
|
||||||
return $arrayValues[$columnNum];
|
|
||||||
}
|
|
||||||
$rowNum = $rowKeys[--$rowNum];
|
|
||||||
|
|
||||||
return $arrayValues[$rowNum][$columnNum];
|
|
||||||
} // function INDEX()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TRANSPOSE
|
|
||||||
*
|
|
||||||
* @param array $matrixData A matrix of values
|
|
||||||
* @return array
|
|
||||||
*
|
|
||||||
* Unlike the Excel TRANSPOSE function, which will only work on a single row or column, this function will transpose a full matrix.
|
|
||||||
*/
|
|
||||||
public static function TRANSPOSE($matrixData) {
|
|
||||||
$returnMatrix = array();
|
|
||||||
if (!is_array($matrixData)) { $matrixData = array(array($matrixData)); }
|
|
||||||
|
|
||||||
$column = 0;
|
|
||||||
foreach($matrixData as $matrixRow) {
|
|
||||||
$row = 0;
|
|
||||||
foreach($matrixRow as $matrixCell) {
|
|
||||||
$returnMatrix[$row][$column] = $matrixCell;
|
|
||||||
++$row;
|
|
||||||
}
|
|
||||||
++$column;
|
|
||||||
}
|
|
||||||
return $returnMatrix;
|
|
||||||
} // function TRANSPOSE()
|
|
||||||
|
|
||||||
|
|
||||||
private static function _vlookupSort($a,$b) {
|
|
||||||
$f = array_keys($a);
|
|
||||||
$firstColumn = array_shift($f);
|
|
||||||
if (strtolower($a[$firstColumn]) == strtolower($b[$firstColumn])) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return (strtolower($a[$firstColumn]) < strtolower($b[$firstColumn])) ? -1 : 1;
|
|
||||||
} // function _vlookupSort()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VLOOKUP
|
|
||||||
* The VLOOKUP function searches for value in the left-most column of lookup_array and returns the value in the same row based on the index_number.
|
|
||||||
* @param lookup_value The value that you want to match in lookup_array
|
|
||||||
* @param lookup_array The range of cells being searched
|
|
||||||
* @param index_number The column number in table_array from which the matching value must be returned. The first column is 1.
|
|
||||||
* @param not_exact_match Determines if you are looking for an exact match based on lookup_value.
|
|
||||||
* @return mixed The value of the found cell
|
|
||||||
*/
|
|
||||||
public static function VLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match=true) {
|
|
||||||
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
|
|
||||||
$index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number);
|
|
||||||
$not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match);
|
|
||||||
|
|
||||||
// index_number must be greater than or equal to 1
|
|
||||||
if ($index_number < 1) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
// index_number must be less than or equal to the number of columns in lookup_array
|
|
||||||
if ((!is_array($lookup_array)) || (empty($lookup_array))) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
} else {
|
|
||||||
$f = array_keys($lookup_array);
|
|
||||||
$firstRow = array_pop($f);
|
|
||||||
if ((!is_array($lookup_array[$firstRow])) || ($index_number > count($lookup_array[$firstRow]))) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
} else {
|
|
||||||
$columnKeys = array_keys($lookup_array[$firstRow]);
|
|
||||||
$returnColumn = $columnKeys[--$index_number];
|
|
||||||
$firstColumn = array_shift($columnKeys);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$not_exact_match) {
|
|
||||||
uasort($lookup_array,array('self','_vlookupSort'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$rowNumber = $rowValue = False;
|
|
||||||
foreach($lookup_array as $rowKey => $rowData) {
|
|
||||||
if ((is_numeric($lookup_value) && is_numeric($rowData[$firstColumn]) && ($rowData[$firstColumn] > $lookup_value)) ||
|
|
||||||
(!is_numeric($lookup_value) && !is_numeric($rowData[$firstColumn]) && (strtolower($rowData[$firstColumn]) > strtolower($lookup_value)))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$rowNumber = $rowKey;
|
|
||||||
$rowValue = $rowData[$firstColumn];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($rowNumber !== false) {
|
|
||||||
if ((!$not_exact_match) && ($rowValue != $lookup_value)) {
|
|
||||||
// if an exact match is required, we have what we need to return an appropriate response
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
} else {
|
|
||||||
// otherwise return the appropriate value
|
|
||||||
$result = $lookup_array[$rowNumber][$returnColumn];
|
|
||||||
if ((is_numeric($lookup_value) && is_numeric($result)) ||
|
|
||||||
(!is_numeric($lookup_value) && !is_numeric($result))) {
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
} // function VLOOKUP()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HLOOKUP
|
|
||||||
* The HLOOKUP function searches for value in the top-most row of lookup_array and returns the value in the same column based on the index_number.
|
|
||||||
* @param lookup_value The value that you want to match in lookup_array
|
|
||||||
* @param lookup_array The range of cells being searched
|
|
||||||
* @param index_number The row number in table_array from which the matching value must be returned. The first row is 1.
|
|
||||||
* @param not_exact_match Determines if you are looking for an exact match based on lookup_value.
|
|
||||||
* @return mixed The value of the found cell
|
|
||||||
*/
|
|
||||||
public static function HLOOKUP($lookup_value, $lookup_array, $index_number, $not_exact_match=true) {
|
|
||||||
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
|
|
||||||
$index_number = PHPExcel_Calculation_Functions::flattenSingleValue($index_number);
|
|
||||||
$not_exact_match = PHPExcel_Calculation_Functions::flattenSingleValue($not_exact_match);
|
|
||||||
|
|
||||||
// index_number must be greater than or equal to 1
|
|
||||||
if ($index_number < 1) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
// index_number must be less than or equal to the number of columns in lookup_array
|
|
||||||
if ((!is_array($lookup_array)) || (empty($lookup_array))) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
} else {
|
|
||||||
$f = array_keys($lookup_array);
|
|
||||||
$firstRow = array_pop($f);
|
|
||||||
if ((!is_array($lookup_array[$firstRow])) || ($index_number > count($lookup_array[$firstRow]))) {
|
|
||||||
return PHPExcel_Calculation_Functions::REF();
|
|
||||||
} else {
|
|
||||||
$columnKeys = array_keys($lookup_array[$firstRow]);
|
|
||||||
$firstkey = $f[0] - 1;
|
|
||||||
$returnColumn = $firstkey + $index_number;
|
|
||||||
$firstColumn = array_shift($f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$not_exact_match) {
|
|
||||||
$firstRowH = asort($lookup_array[$firstColumn]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$rowNumber = $rowValue = False;
|
|
||||||
foreach($lookup_array[$firstColumn] as $rowKey => $rowData) {
|
|
||||||
if ((is_numeric($lookup_value) && is_numeric($rowData) && ($rowData > $lookup_value)) ||
|
|
||||||
(!is_numeric($lookup_value) && !is_numeric($rowData) && (strtolower($rowData) > strtolower($lookup_value)))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$rowNumber = $rowKey;
|
|
||||||
$rowValue = $rowData;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($rowNumber !== false) {
|
|
||||||
if ((!$not_exact_match) && ($rowValue != $lookup_value)) {
|
|
||||||
// if an exact match is required, we have what we need to return an appropriate response
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
} else {
|
|
||||||
// otherwise return the appropriate value
|
|
||||||
$result = $lookup_array[$returnColumn][$rowNumber];
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
} // function HLOOKUP()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LOOKUP
|
|
||||||
* The LOOKUP function searches for value either from a one-row or one-column range or from an array.
|
|
||||||
* @param lookup_value The value that you want to match in lookup_array
|
|
||||||
* @param lookup_vector The range of cells being searched
|
|
||||||
* @param result_vector The column from which the matching value must be returned
|
|
||||||
* @return mixed The value of the found cell
|
|
||||||
*/
|
|
||||||
public static function LOOKUP($lookup_value, $lookup_vector, $result_vector=null) {
|
|
||||||
$lookup_value = PHPExcel_Calculation_Functions::flattenSingleValue($lookup_value);
|
|
||||||
|
|
||||||
if (!is_array($lookup_vector)) {
|
|
||||||
return PHPExcel_Calculation_Functions::NA();
|
|
||||||
}
|
|
||||||
$lookupRows = count($lookup_vector);
|
|
||||||
$l = array_keys($lookup_vector);
|
|
||||||
$l = array_shift($l);
|
|
||||||
$lookupColumns = count($lookup_vector[$l]);
|
|
||||||
if ((($lookupRows == 1) && ($lookupColumns > 1)) || (($lookupRows == 2) && ($lookupColumns != 2))) {
|
|
||||||
$lookup_vector = self::TRANSPOSE($lookup_vector);
|
|
||||||
$lookupRows = count($lookup_vector);
|
|
||||||
$l = array_keys($lookup_vector);
|
|
||||||
$lookupColumns = count($lookup_vector[array_shift($l)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($result_vector)) {
|
|
||||||
$result_vector = $lookup_vector;
|
|
||||||
}
|
|
||||||
$resultRows = count($result_vector);
|
|
||||||
$l = array_keys($result_vector);
|
|
||||||
$l = array_shift($l);
|
|
||||||
$resultColumns = count($result_vector[$l]);
|
|
||||||
if ((($resultRows == 1) && ($resultColumns > 1)) || (($resultRows == 2) && ($resultColumns != 2))) {
|
|
||||||
$result_vector = self::TRANSPOSE($result_vector);
|
|
||||||
$resultRows = count($result_vector);
|
|
||||||
$r = array_keys($result_vector);
|
|
||||||
$resultColumns = count($result_vector[array_shift($r)]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($lookupRows == 2) {
|
|
||||||
$result_vector = array_pop($lookup_vector);
|
|
||||||
$lookup_vector = array_shift($lookup_vector);
|
|
||||||
}
|
|
||||||
if ($lookupColumns != 2) {
|
|
||||||
foreach($lookup_vector as &$value) {
|
|
||||||
if (is_array($value)) {
|
|
||||||
$k = array_keys($value);
|
|
||||||
$key1 = $key2 = array_shift($k);
|
|
||||||
$key2++;
|
|
||||||
$dataValue1 = $value[$key1];
|
|
||||||
} else {
|
|
||||||
$key1 = 0;
|
|
||||||
$key2 = 1;
|
|
||||||
$dataValue1 = $value;
|
|
||||||
}
|
|
||||||
$dataValue2 = array_shift($result_vector);
|
|
||||||
if (is_array($dataValue2)) {
|
|
||||||
$dataValue2 = array_shift($dataValue2);
|
|
||||||
}
|
|
||||||
$value = array($key1 => $dataValue1, $key2 => $dataValue2);
|
|
||||||
}
|
|
||||||
unset($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::VLOOKUP($lookup_value,$lookup_vector,2);
|
|
||||||
} // function LOOKUP()
|
|
||||||
|
|
||||||
} // class PHPExcel_Calculation_LookupRef
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,631 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** PHPExcel root directory */
|
|
||||||
if (!defined('PHPEXCEL_ROOT')) {
|
|
||||||
/**
|
|
||||||
* @ignore
|
|
||||||
*/
|
|
||||||
define('PHPEXCEL_ROOT', dirname(__FILE__) . '/../../');
|
|
||||||
require(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_TextData
|
|
||||||
*
|
|
||||||
* @category PHPExcel
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_TextData {
|
|
||||||
|
|
||||||
private static $_invalidChars = Null;
|
|
||||||
|
|
||||||
private static function _uniord($c) {
|
|
||||||
if (ord($c{0}) >=0 && ord($c{0}) <= 127)
|
|
||||||
return ord($c{0});
|
|
||||||
if (ord($c{0}) >= 192 && ord($c{0}) <= 223)
|
|
||||||
return (ord($c{0})-192)*64 + (ord($c{1})-128);
|
|
||||||
if (ord($c{0}) >= 224 && ord($c{0}) <= 239)
|
|
||||||
return (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128);
|
|
||||||
if (ord($c{0}) >= 240 && ord($c{0}) <= 247)
|
|
||||||
return (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128);
|
|
||||||
if (ord($c{0}) >= 248 && ord($c{0}) <= 251)
|
|
||||||
return (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128);
|
|
||||||
if (ord($c{0}) >= 252 && ord($c{0}) <= 253)
|
|
||||||
return (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128);
|
|
||||||
if (ord($c{0}) >= 254 && ord($c{0}) <= 255) //error
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
return 0;
|
|
||||||
} // function _uniord()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CHARACTER
|
|
||||||
*
|
|
||||||
* @param string $character Value
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public static function CHARACTER($character) {
|
|
||||||
$character = PHPExcel_Calculation_Functions::flattenSingleValue($character);
|
|
||||||
|
|
||||||
if ((!is_numeric($character)) || ($character < 0)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (function_exists('mb_convert_encoding')) {
|
|
||||||
return mb_convert_encoding('&#'.intval($character).';', 'UTF-8', 'HTML-ENTITIES');
|
|
||||||
} else {
|
|
||||||
return chr(intval($character));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TRIMNONPRINTABLE
|
|
||||||
*
|
|
||||||
* @param mixed $stringValue Value to check
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function TRIMNONPRINTABLE($stringValue = '') {
|
|
||||||
$stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue);
|
|
||||||
|
|
||||||
if (is_bool($stringValue)) {
|
|
||||||
return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self::$_invalidChars == Null) {
|
|
||||||
self::$_invalidChars = range(chr(0),chr(31));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_string($stringValue) || is_numeric($stringValue)) {
|
|
||||||
return str_replace(self::$_invalidChars, '', trim($stringValue, "\x00..\x1F"));
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
} // function TRIMNONPRINTABLE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TRIMSPACES
|
|
||||||
*
|
|
||||||
* @param mixed $stringValue Value to check
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function TRIMSPACES($stringValue = '') {
|
|
||||||
$stringValue = PHPExcel_Calculation_Functions::flattenSingleValue($stringValue);
|
|
||||||
|
|
||||||
if (is_bool($stringValue)) {
|
|
||||||
return ($stringValue) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_string($stringValue) || is_numeric($stringValue)) {
|
|
||||||
return trim(preg_replace('/ +/',' ',trim($stringValue,' ')));
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
} // function TRIMSPACES()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ASCIICODE
|
|
||||||
*
|
|
||||||
* @param string $characters Value
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
public static function ASCIICODE($characters) {
|
|
||||||
if (($characters === NULL) || ($characters === ''))
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
$characters = PHPExcel_Calculation_Functions::flattenSingleValue($characters);
|
|
||||||
if (is_bool($characters)) {
|
|
||||||
if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) {
|
|
||||||
$characters = (int) $characters;
|
|
||||||
} else {
|
|
||||||
$characters = ($characters) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$character = $characters;
|
|
||||||
if ((function_exists('mb_strlen')) && (function_exists('mb_substr'))) {
|
|
||||||
if (mb_strlen($characters, 'UTF-8') > 1) { $character = mb_substr($characters, 0, 1, 'UTF-8'); }
|
|
||||||
return self::_uniord($character);
|
|
||||||
} else {
|
|
||||||
if (strlen($characters) > 0) { $character = substr($characters, 0, 1); }
|
|
||||||
return ord($character);
|
|
||||||
}
|
|
||||||
} // function ASCIICODE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CONCATENATE
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function CONCATENATE() {
|
|
||||||
// Return value
|
|
||||||
$returnValue = '';
|
|
||||||
|
|
||||||
// Loop through arguments
|
|
||||||
$aArgs = PHPExcel_Calculation_Functions::flattenArray(func_get_args());
|
|
||||||
foreach ($aArgs as $arg) {
|
|
||||||
if (is_bool($arg)) {
|
|
||||||
if (PHPExcel_Calculation_Functions::getCompatibilityMode() == PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE) {
|
|
||||||
$arg = (int) $arg;
|
|
||||||
} else {
|
|
||||||
$arg = ($arg) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$returnValue .= $arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return
|
|
||||||
return $returnValue;
|
|
||||||
} // function CONCATENATE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DOLLAR
|
|
||||||
*
|
|
||||||
* This function converts a number to text using currency format, with the decimals rounded to the specified place.
|
|
||||||
* The format used is $#,##0.00_);($#,##0.00)..
|
|
||||||
*
|
|
||||||
* @param float $value The value to format
|
|
||||||
* @param int $decimals The number of digits to display to the right of the decimal point.
|
|
||||||
* If decimals is negative, number is rounded to the left of the decimal point.
|
|
||||||
* If you omit decimals, it is assumed to be 2
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function DOLLAR($value = 0, $decimals = 2) {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
$decimals = is_null($decimals) ? 0 : PHPExcel_Calculation_Functions::flattenSingleValue($decimals);
|
|
||||||
|
|
||||||
// Validate parameters
|
|
||||||
if (!is_numeric($value) || !is_numeric($decimals)) {
|
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
|
||||||
}
|
|
||||||
$decimals = floor($decimals);
|
|
||||||
|
|
||||||
$mask = '$#,##0';
|
|
||||||
if ($decimals > 0) {
|
|
||||||
$mask .= '.' . str_repeat('0',$decimals);
|
|
||||||
} else {
|
|
||||||
$round = pow(10,abs($decimals));
|
|
||||||
if ($value < 0) { $round = 0-$round; }
|
|
||||||
$value = PHPExcel_Calculation_MathTrig::MROUND($value, $round);
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Style_NumberFormat::toFormattedString($value, $mask);
|
|
||||||
|
|
||||||
} // function DOLLAR()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SEARCHSENSITIVE
|
|
||||||
*
|
|
||||||
* @param string $needle The string to look for
|
|
||||||
* @param string $haystack The string in which to look
|
|
||||||
* @param int $offset Offset within $haystack
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function SEARCHSENSITIVE($needle,$haystack,$offset=1) {
|
|
||||||
$needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle);
|
|
||||||
$haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack);
|
|
||||||
$offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset);
|
|
||||||
|
|
||||||
if (!is_bool($needle)) {
|
|
||||||
if (is_bool($haystack)) {
|
|
||||||
$haystack = ($haystack) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($offset > 0) && (PHPExcel_Shared_String::CountCharacters($haystack) > $offset)) {
|
|
||||||
if (PHPExcel_Shared_String::CountCharacters($needle) == 0) {
|
|
||||||
return $offset;
|
|
||||||
}
|
|
||||||
if (function_exists('mb_strpos')) {
|
|
||||||
$pos = mb_strpos($haystack, $needle, --$offset, 'UTF-8');
|
|
||||||
} else {
|
|
||||||
$pos = strpos($haystack, $needle, --$offset);
|
|
||||||
}
|
|
||||||
if ($pos !== false) {
|
|
||||||
return ++$pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
} // function SEARCHSENSITIVE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SEARCHINSENSITIVE
|
|
||||||
*
|
|
||||||
* @param string $needle The string to look for
|
|
||||||
* @param string $haystack The string in which to look
|
|
||||||
* @param int $offset Offset within $haystack
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function SEARCHINSENSITIVE($needle,$haystack,$offset=1) {
|
|
||||||
$needle = PHPExcel_Calculation_Functions::flattenSingleValue($needle);
|
|
||||||
$haystack = PHPExcel_Calculation_Functions::flattenSingleValue($haystack);
|
|
||||||
$offset = PHPExcel_Calculation_Functions::flattenSingleValue($offset);
|
|
||||||
|
|
||||||
if (!is_bool($needle)) {
|
|
||||||
if (is_bool($haystack)) {
|
|
||||||
$haystack = ($haystack) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (($offset > 0) && (PHPExcel_Shared_String::CountCharacters($haystack) > $offset)) {
|
|
||||||
if (PHPExcel_Shared_String::CountCharacters($needle) == 0) {
|
|
||||||
return $offset;
|
|
||||||
}
|
|
||||||
if (function_exists('mb_stripos')) {
|
|
||||||
$pos = mb_stripos($haystack, $needle, --$offset,'UTF-8');
|
|
||||||
} else {
|
|
||||||
$pos = stripos($haystack, $needle, --$offset);
|
|
||||||
}
|
|
||||||
if ($pos !== false) {
|
|
||||||
return ++$pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
} // function SEARCHINSENSITIVE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* FIXEDFORMAT
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @param integer $decimals
|
|
||||||
* @param boolean $no_commas
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function FIXEDFORMAT($value, $decimals = 2, $no_commas = FALSE) {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
$decimals = PHPExcel_Calculation_Functions::flattenSingleValue($decimals);
|
|
||||||
$no_commas = PHPExcel_Calculation_Functions::flattenSingleValue($no_commas);
|
|
||||||
|
|
||||||
// Validate parameters
|
|
||||||
if (!is_numeric($value) || !is_numeric($decimals)) {
|
|
||||||
return PHPExcel_Calculation_Functions::NaN();
|
|
||||||
}
|
|
||||||
$decimals = floor($decimals);
|
|
||||||
|
|
||||||
$valueResult = round($value,$decimals);
|
|
||||||
if ($decimals < 0) { $decimals = 0; }
|
|
||||||
if (!$no_commas) {
|
|
||||||
$valueResult = number_format($valueResult,$decimals);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) $valueResult;
|
|
||||||
} // function FIXEDFORMAT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LEFT
|
|
||||||
*
|
|
||||||
* @param string $value Value
|
|
||||||
* @param int $chars Number of characters
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function LEFT($value = '', $chars = 1) {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
|
|
||||||
|
|
||||||
if ($chars < 0) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_bool($value)) {
|
|
||||||
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (function_exists('mb_substr')) {
|
|
||||||
return mb_substr($value, 0, $chars, 'UTF-8');
|
|
||||||
} else {
|
|
||||||
return substr($value, 0, $chars);
|
|
||||||
}
|
|
||||||
} // function LEFT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* MID
|
|
||||||
*
|
|
||||||
* @param string $value Value
|
|
||||||
* @param int $start Start character
|
|
||||||
* @param int $chars Number of characters
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function MID($value = '', $start = 1, $chars = null) {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
$start = PHPExcel_Calculation_Functions::flattenSingleValue($start);
|
|
||||||
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
|
|
||||||
|
|
||||||
if (($start < 1) || ($chars < 0)) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_bool($value)) {
|
|
||||||
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (function_exists('mb_substr')) {
|
|
||||||
return mb_substr($value, --$start, $chars, 'UTF-8');
|
|
||||||
} else {
|
|
||||||
return substr($value, --$start, $chars);
|
|
||||||
}
|
|
||||||
} // function MID()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* RIGHT
|
|
||||||
*
|
|
||||||
* @param string $value Value
|
|
||||||
* @param int $chars Number of characters
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function RIGHT($value = '', $chars = 1) {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
|
|
||||||
|
|
||||||
if ($chars < 0) {
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_bool($value)) {
|
|
||||||
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((function_exists('mb_substr')) && (function_exists('mb_strlen'))) {
|
|
||||||
return mb_substr($value, mb_strlen($value, 'UTF-8') - $chars, $chars, 'UTF-8');
|
|
||||||
} else {
|
|
||||||
return substr($value, strlen($value) - $chars);
|
|
||||||
}
|
|
||||||
} // function RIGHT()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* STRINGLENGTH
|
|
||||||
*
|
|
||||||
* @param string $value Value
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function STRINGLENGTH($value = '') {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if (is_bool($value)) {
|
|
||||||
$value = ($value) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (function_exists('mb_strlen')) {
|
|
||||||
return mb_strlen($value, 'UTF-8');
|
|
||||||
} else {
|
|
||||||
return strlen($value);
|
|
||||||
}
|
|
||||||
} // function STRINGLENGTH()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* LOWERCASE
|
|
||||||
*
|
|
||||||
* Converts a string value to upper case.
|
|
||||||
*
|
|
||||||
* @param string $mixedCaseString
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function LOWERCASE($mixedCaseString) {
|
|
||||||
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
|
|
||||||
|
|
||||||
if (is_bool($mixedCaseString)) {
|
|
||||||
$mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Shared_String::StrToLower($mixedCaseString);
|
|
||||||
} // function LOWERCASE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* UPPERCASE
|
|
||||||
*
|
|
||||||
* Converts a string value to upper case.
|
|
||||||
*
|
|
||||||
* @param string $mixedCaseString
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function UPPERCASE($mixedCaseString) {
|
|
||||||
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
|
|
||||||
|
|
||||||
if (is_bool($mixedCaseString)) {
|
|
||||||
$mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Shared_String::StrToUpper($mixedCaseString);
|
|
||||||
} // function UPPERCASE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PROPERCASE
|
|
||||||
*
|
|
||||||
* Converts a string value to upper case.
|
|
||||||
*
|
|
||||||
* @param string $mixedCaseString
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function PROPERCASE($mixedCaseString) {
|
|
||||||
$mixedCaseString = PHPExcel_Calculation_Functions::flattenSingleValue($mixedCaseString);
|
|
||||||
|
|
||||||
if (is_bool($mixedCaseString)) {
|
|
||||||
$mixedCaseString = ($mixedCaseString) ? PHPExcel_Calculation::getTRUE() : PHPExcel_Calculation::getFALSE();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Shared_String::StrToTitle($mixedCaseString);
|
|
||||||
} // function PROPERCASE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* REPLACE
|
|
||||||
*
|
|
||||||
* @param string $oldText String to modify
|
|
||||||
* @param int $start Start character
|
|
||||||
* @param int $chars Number of characters
|
|
||||||
* @param string $newText String to replace in defined position
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function REPLACE($oldText = '', $start = 1, $chars = null, $newText) {
|
|
||||||
$oldText = PHPExcel_Calculation_Functions::flattenSingleValue($oldText);
|
|
||||||
$start = PHPExcel_Calculation_Functions::flattenSingleValue($start);
|
|
||||||
$chars = PHPExcel_Calculation_Functions::flattenSingleValue($chars);
|
|
||||||
$newText = PHPExcel_Calculation_Functions::flattenSingleValue($newText);
|
|
||||||
|
|
||||||
$left = self::LEFT($oldText,$start-1);
|
|
||||||
$right = self::RIGHT($oldText,self::STRINGLENGTH($oldText)-($start+$chars)+1);
|
|
||||||
|
|
||||||
return $left.$newText.$right;
|
|
||||||
} // function REPLACE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SUBSTITUTE
|
|
||||||
*
|
|
||||||
* @param string $text Value
|
|
||||||
* @param string $fromText From Value
|
|
||||||
* @param string $toText To Value
|
|
||||||
* @param integer $instance Instance Number
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function SUBSTITUTE($text = '', $fromText = '', $toText = '', $instance = 0) {
|
|
||||||
$text = PHPExcel_Calculation_Functions::flattenSingleValue($text);
|
|
||||||
$fromText = PHPExcel_Calculation_Functions::flattenSingleValue($fromText);
|
|
||||||
$toText = PHPExcel_Calculation_Functions::flattenSingleValue($toText);
|
|
||||||
$instance = floor(PHPExcel_Calculation_Functions::flattenSingleValue($instance));
|
|
||||||
|
|
||||||
if ($instance == 0) {
|
|
||||||
if(function_exists('mb_str_replace')) {
|
|
||||||
return mb_str_replace($fromText,$toText,$text);
|
|
||||||
} else {
|
|
||||||
return str_replace($fromText,$toText,$text);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$pos = -1;
|
|
||||||
while($instance > 0) {
|
|
||||||
if (function_exists('mb_strpos')) {
|
|
||||||
$pos = mb_strpos($text, $fromText, $pos+1, 'UTF-8');
|
|
||||||
} else {
|
|
||||||
$pos = strpos($text, $fromText, $pos+1);
|
|
||||||
}
|
|
||||||
if ($pos === false) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
--$instance;
|
|
||||||
}
|
|
||||||
if ($pos !== false) {
|
|
||||||
if (function_exists('mb_strlen')) {
|
|
||||||
return self::REPLACE($text,++$pos,mb_strlen($fromText, 'UTF-8'),$toText);
|
|
||||||
} else {
|
|
||||||
return self::REPLACE($text,++$pos,strlen($fromText),$toText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $text;
|
|
||||||
} // function SUBSTITUTE()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* RETURNSTRING
|
|
||||||
*
|
|
||||||
* @param mixed $testValue Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function RETURNSTRING($testValue = '') {
|
|
||||||
$testValue = PHPExcel_Calculation_Functions::flattenSingleValue($testValue);
|
|
||||||
|
|
||||||
if (is_string($testValue)) {
|
|
||||||
return $testValue;
|
|
||||||
}
|
|
||||||
return Null;
|
|
||||||
} // function RETURNSTRING()
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TEXTFORMAT
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @param string $format Format mask to use
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function TEXTFORMAT($value,$format) {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
$format = PHPExcel_Calculation_Functions::flattenSingleValue($format);
|
|
||||||
|
|
||||||
if ((is_string($value)) && (!is_numeric($value)) && PHPExcel_Shared_Date::isDateTimeFormatCode($format)) {
|
|
||||||
$value = PHPExcel_Calculation_DateTime::DATEVALUE($value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (string) PHPExcel_Style_NumberFormat::toFormattedString($value,$format);
|
|
||||||
} // function TEXTFORMAT()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* VALUE
|
|
||||||
*
|
|
||||||
* @param mixed $value Value to check
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public static function VALUE($value = '') {
|
|
||||||
$value = PHPExcel_Calculation_Functions::flattenSingleValue($value);
|
|
||||||
|
|
||||||
if (!is_numeric($value)) {
|
|
||||||
$numberValue = str_replace(
|
|
||||||
PHPExcel_Shared_String::getThousandsSeparator(),
|
|
||||||
'',
|
|
||||||
trim($value, " \t\n\r\0\x0B" . PHPExcel_Shared_String::getCurrencyCode())
|
|
||||||
);
|
|
||||||
if (is_numeric($numberValue)) {
|
|
||||||
return (float) $numberValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$dateSetting = PHPExcel_Calculation_Functions::getReturnDateType();
|
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
|
|
||||||
|
|
||||||
if (strpos($value, ':') !== false) {
|
|
||||||
$timeValue = PHPExcel_Calculation_DateTime::TIMEVALUE($value);
|
|
||||||
if ($timeValue !== PHPExcel_Calculation_Functions::VALUE()) {
|
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
|
|
||||||
return $timeValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$dateValue = PHPExcel_Calculation_DateTime::DATEVALUE($value);
|
|
||||||
if ($dateValue !== PHPExcel_Calculation_Functions::VALUE()) {
|
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
|
|
||||||
return $dateValue;
|
|
||||||
}
|
|
||||||
PHPExcel_Calculation_Functions::setReturnDateType($dateSetting);
|
|
||||||
|
|
||||||
return PHPExcel_Calculation_Functions::VALUE();
|
|
||||||
}
|
|
||||||
return (float) $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,115 +0,0 @@
|
|||||||
<?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_Calculation
|
|
||||||
* @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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PHPExcel_Calculation_Token_Stack
|
|
||||||
*
|
|
||||||
* @category PHPExcel_Calculation_Token_Stack
|
|
||||||
* @package PHPExcel_Calculation
|
|
||||||
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
|
|
||||||
*/
|
|
||||||
class PHPExcel_Calculation_Token_Stack {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The parser stack for formulae
|
|
||||||
*
|
|
||||||
* @var mixed[]
|
|
||||||
*/
|
|
||||||
private $_stack = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Count of entries in the parser stack
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_count = 0;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the number of entries on the stack
|
|
||||||
*
|
|
||||||
* @return integer
|
|
||||||
*/
|
|
||||||
public function count() {
|
|
||||||
return $this->_count;
|
|
||||||
} // function count()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Push a new entry onto the stack
|
|
||||||
*
|
|
||||||
* @param mixed $type
|
|
||||||
* @param mixed $value
|
|
||||||
* @param mixed $reference
|
|
||||||
*/
|
|
||||||
public function push($type, $value, $reference = NULL) {
|
|
||||||
$this->_stack[$this->_count++] = array('type' => $type,
|
|
||||||
'value' => $value,
|
|
||||||
'reference' => $reference
|
|
||||||
);
|
|
||||||
if ($type == 'Function') {
|
|
||||||
$localeFunction = PHPExcel_Calculation::_localeFunc($value);
|
|
||||||
if ($localeFunction != $value) {
|
|
||||||
$this->_stack[($this->_count - 1)]['localeValue'] = $localeFunction;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // function push()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Pop the last entry from the stack
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function pop() {
|
|
||||||
if ($this->_count > 0) {
|
|
||||||
return $this->_stack[--$this->_count];
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
} // function pop()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return an entry from the stack without removing it
|
|
||||||
*
|
|
||||||
* @param integer $n number indicating how far back in the stack we want to look
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function last($n = 1) {
|
|
||||||
if ($this->_count - $n < 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return $this->_stack[$this->_count - $n];
|
|
||||||
} // function last()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the stack
|
|
||||||
*/
|
|
||||||
function clear() {
|
|
||||||
$this->_stack = array();
|
|
||||||
$this->_count = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // class PHPExcel_Calculation_Token_Stack
|
|
@ -1 +0,0 @@
|
|||||||
<html><body bgcolor="#FFFFFF"></body></html>
|
|
@ -1 +0,0 @@
|
|||||||
<html><body bgcolor="#FFFFFF"></body></html>
|
|
File diff suppressed because it is too large
Load Diff
@ -1,192 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** 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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,472 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,100 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/** 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 ($pValue instanceof PHPExcel_RichText) {
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_INLINE;
|
|
||||||
} elseif ($pValue{0} === '=' && strlen($pValue) > 1) {
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_FORMULA;
|
|
||||||
} elseif (is_bool($pValue)) {
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_BOOL;
|
|
||||||
} 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)) {
|
|
||||||
if (is_string($pValue) && $pValue{0} === '0' && strlen($pValue) > 1 && $pValue{1} !== '.' ) {
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_STRING;
|
|
||||||
}
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_NUMERIC;
|
|
||||||
} elseif (is_string($pValue) && array_key_exists($pValue, PHPExcel_Cell_DataType::getErrorCodes())) {
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return PHPExcel_Cell_DataType::TYPE_STRING;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,126 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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__
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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);
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
<html><body bgcolor="#FFFFFF"></body></html>
|
|
@ -1,635 +0,0 @@
|
|||||||
<?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 ##VERSION##, ##DATE##
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chart Asix Y as
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Chart_Axis
|
|
||||||
*/
|
|
||||||
private $_yAxis = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chart Asix X as
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Chart_Axis
|
|
||||||
*/
|
|
||||||
private $_xAxis = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chart Major Gridlines as
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Chart_Gridlines
|
|
||||||
*/
|
|
||||||
private $_majorGridlines = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chart Minor Gridlines as
|
|
||||||
*
|
|
||||||
* @var PHPExcel_Chart_Gridlines
|
|
||||||
*/
|
|
||||||
private $_minorGridlines = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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, PHPExcel_Chart_Axis $xAxis = null, PHPExcel_Chart_Axis $yAxis = null, PHPExcel_Chart_Gridlines $majorGridlines = null, PHPExcel_Chart_Gridlines $minorGridlines = 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;
|
|
||||||
$this->_xAxis = $xAxis;
|
|
||||||
$this->_yAxis = $yAxis;
|
|
||||||
$this->_majorGridlines = $majorGridlines;
|
|
||||||
$this->_minorGridlines = $minorGridlines;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get yAxis
|
|
||||||
*
|
|
||||||
* @return PHPExcel_Chart_Axis
|
|
||||||
*/
|
|
||||||
public function getChartAxisY() {
|
|
||||||
if($this->_yAxis !== NULL){
|
|
||||||
return $this->_yAxis;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PHPExcel_Chart_Axis();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get xAxis
|
|
||||||
*
|
|
||||||
* @return PHPExcel_Chart_Axis
|
|
||||||
*/
|
|
||||||
public function getChartAxisX() {
|
|
||||||
if($this->_xAxis !== NULL){
|
|
||||||
return $this->_xAxis;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PHPExcel_Chart_Axis();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Major Gridlines
|
|
||||||
*
|
|
||||||
* @return PHPExcel_Chart_Gridlines
|
|
||||||
*/
|
|
||||||
public function getMajorGridlines() {
|
|
||||||
if($this->_majorGridlines !== NULL){
|
|
||||||
return $this->_majorGridlines;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PHPExcel_Chart_Gridlines();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Minor Gridlines
|
|
||||||
*
|
|
||||||
* @return PHPExcel_Chart_Gridlines
|
|
||||||
*/
|
|
||||||
public function getMinorGridlines() {
|
|
||||||
if($this->_minorGridlines !== NULL){
|
|
||||||
return $this->_minorGridlines;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PHPExcel_Chart_Gridlines();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user