Skip to content
This repository was archived by the owner on Jan 2, 2019. It is now read-only.

Commit 8d3548a

Browse files
author
MarkBaker
committed
New calculation example with cyclic formula
1 parent 0cdda0d commit 8d3548a

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
/**
3+
* PHPExcel
4+
*
5+
* Copyright (C) 2006 - 2014 PHPExcel
6+
*
7+
* This library is free software; you can redistribute it and/or
8+
* modify it under the terms of the GNU Lesser General Public
9+
* License as published by the Free Software Foundation; either
10+
* version 2.1 of the License, or (at your option) any later version.
11+
*
12+
* This library is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15+
* Lesser General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU Lesser General Public
18+
* License along with this library; if not, write to the Free Software
19+
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20+
*
21+
* @category PHPExcel
22+
* @package PHPExcel
23+
* @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
24+
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25+
* @version ##VERSION##, ##DATE##
26+
*/
27+
28+
/** Error reporting */
29+
error_reporting(E_ALL);
30+
ini_set('display_errors', TRUE);
31+
ini_set('display_startup_errors', TRUE);
32+
date_default_timezone_set('Europe/London');
33+
34+
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
35+
36+
date_default_timezone_set('Europe/London');
37+
38+
/** Include PHPExcel */
39+
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
40+
41+
42+
// Create new PHPExcel object
43+
echo date('H:i:s') , " Create new PHPExcel object" , EOL;
44+
$objPHPExcel = new PHPExcel();
45+
46+
// Add some data, we will use some formulas here
47+
echo date('H:i:s') , " Add some data and formulas" , EOL;
48+
$objPHPExcel->getActiveSheet()->setCellValue('A1', '=B1')
49+
->setCellValue('A2', '=B2+1')
50+
->setCellValue('B1', '=A1+1')
51+
->setCellValue('B2', '=A2');
52+
53+
PHPExcel_Calculation::getInstance($objPHPExcel)->cyclicFormulaCount = 100;
54+
55+
// Calculated data
56+
echo date('H:i:s') , " Calculated data" , EOL;
57+
for($row = 1; $row <= 2; ++$row) {
58+
for ($col = 'A'; $col != 'C'; ++$col) {
59+
if ((!is_null($formula = $objPHPExcel->getActiveSheet()->getCell($col.$row)->getValue())) &&
60+
($formula[0] == '=')) {
61+
echo 'Value of ' , $col , $row , ' [' , $formula , ']: ' ,
62+
$objPHPExcel->getActiveSheet()->getCell($col.$row)->getCalculatedValue() . EOL;
63+
}
64+
}
65+
}
66+
67+
68+
// Save Excel 2007 file
69+
echo date('H:i:s') , " Write to Excel2007 format" , EOL;
70+
$callStartTime = microtime(true);
71+
72+
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
73+
74+
//
75+
// If we set Pre Calculated Formulas to true then PHPExcel will calculate all formulae in the
76+
// workbook before saving. This adds time and memory overhead, and can cause some problems with formulae
77+
// using functions or features (such as array formulae) that aren't yet supported by the calculation engine
78+
// If the value is false (the default) for the Excel2007 Writer, then MS Excel (or the application used to
79+
// open the file) will need to recalculate values itself to guarantee that the correct results are available.
80+
//
81+
//$objWriter->setPreCalculateFormulas(true);
82+
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
83+
$callEndTime = microtime(true);
84+
$callTime = $callEndTime - $callStartTime;
85+
86+
echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
87+
echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
88+
// Echo memory usage
89+
echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
90+
91+
92+
// Echo memory peak usage
93+
echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
94+
95+
// Echo done
96+
echo date('H:i:s') , " Done writing file" , EOL;
97+
echo 'File has been created in ' , getcwd() , EOL;

0 commit comments

Comments
 (0)