Merge branch 'develop'

This commit is contained in:
Adrien Crivelli 2017-08-17 15:16:52 +02:00
commit 5e49a87746
No known key found for this signature in database
GPG Key ID: B182FD79DC6DE92E
62 changed files with 1880 additions and 1888 deletions

View File

@ -23,6 +23,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
- Fix to getCell() method when cell reference includes a worksheet reference - @MarkBaker
- Ignore inlineStr type if formula element exists - @ncrypthic [#570](https://github.com/PHPOffice/PHPExcel/issues/570)
- Excel 2007 Reader freezes because of conditional formatting - @rentalhost [#575](https://github.com/PHPOffice/PHPExcel/issues/575)
- Readers will now parse files containing worksheet titles over 31 characters [#176](https://github.com/PHPOffice/PhpSpreadsheet/pull/176)
### General

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DAVERAGE</h1>
<h2>Returns the average of selected database entries.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -75,7 +73,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DAVERAGE() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DCOUNT</h1>
<h2>Counts the cells that contain numbers in a database.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -75,7 +73,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DCOUNT() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DGET</h1>
<h2>Extracts a single value from a column of a list or database that matches conditions that you specify.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -71,7 +69,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DMAX() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DMAX</h1>
<h2>Returns the maximum value from selected database entries.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -74,7 +72,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DMAX() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DMIN</h1>
<h2>Returns the minimum value from selected database entries.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -74,7 +72,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DMIN() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DPRODUCT</h1>
<h2>Multiplies the values in a column of a list or database that match conditions that you specify.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -71,7 +69,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DMAX() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DSTDEV</h1>
<h2>Estimates the standard deviation based on a sample of selected database entries.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -75,7 +73,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DSTDEV() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DSTDEVP</h1>
<h2>Calculates the standard deviation based on the entire population of selected database entries.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -75,7 +73,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DSTDEVP() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DVAR</h1>
<h2>Estimates variance based on a sample from selected database entries.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -75,7 +73,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DVAR() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DVARP</h1>
<h2>Calculates variance based on the entire population of selected database entries,</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object
@ -75,7 +73,6 @@ var_dump($criteriaData);
echo $worksheet->getCell('A13')->getValue() . '<br />';
echo 'DVARP() Result is ' . $worksheet->getCell('B13')->getCalculatedValue();
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DATE</h1>
<h2>Returns the serial number of a particular date.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>DATEVALUE</h1>
<h2>Converts a date in the form of text to a serial number.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>TIME</h1>
<h2>Returns the serial number of a particular time.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>TIMEVALUE</h1>
<h2>Converts a time in the form of text to a serial number.</h2>
<?php
require_once __DIR__ . '/../../../../src/Bootstrap.php';
// Create new PhpSpreadsheet object

View File

@ -1,10 +1,8 @@
<?php
error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -16,7 +14,6 @@ date_default_timezone_set('Europe/London');
<body>
<?php
echo '<h1>PhpSpreadsheet Calculation Function Examples</h1>';
$exampleTypeList = glob('./*', GLOB_ONLYDIR);
@ -43,7 +40,6 @@ foreach ($exampleTypeList as $exampleType) {
}
}
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #01</h1>
<h2>Simple File Reader using IOFactory::load()</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileName = './sampleData/example1.xls';
@ -31,7 +29,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -8,7 +8,6 @@ set_time_limit(0);
date_default_timezone_set('Europe/London');
require_once __DIR__ . '/../../../src/Bootstrap.php';
?>
<html>
<head>
@ -22,24 +21,16 @@ require_once __DIR__ . '/../../../src/Bootstrap.php';
<h1>PhpSpreadsheet Reader Example #02</h1>
<h2>Simple File Reader using a Specified Reader</h2>
<?php
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using \PhpOffice\PhpSpreadsheet\Reader\Xls<br />';
$reader = new Xls();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric();
// $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
$spreadsheet = $reader->load($inputFileName);
echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,16 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #03</h1>
<h2>Simple File Reader using the IOFactory to Return a Reader</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Slk';
// $inputFileType = 'Gnumeric';
// $inputFileType = 'Csv';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -40,7 +32,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #04</h1>
<h2>Simple File Reader using the IOFactory to Identify a Reader to Use</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileName = './sampleData/example1.xls';
@ -36,7 +34,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #05</h1>
<h2>Simple File Reader using the "Read Data Only" Option</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -40,7 +34,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #06</h1>
<h2>Simple File Reader Loading All WorkSheets</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -43,7 +37,6 @@ $loadedSheetNames = $spreadsheet->getSheetNames();
foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
echo $sheetIndex, ' -> ', $loadedSheetName, '<br />';
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #07</h1>
<h2>Simple File Reader Loading a Single Named WorkSheet</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
$sheetname = 'Data Sheet #2';
@ -44,7 +38,6 @@ $loadedSheetNames = $spreadsheet->getSheetNames();
foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
echo $sheetIndex, ' -> ', $loadedSheetName, '<br />';
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #08</h1>
<h2>Simple File Reader Loading Several Named WorkSheets</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
$sheetnames = ['Data Sheet #1', 'Data Sheet #3'];
@ -44,7 +38,6 @@ $loadedSheetNames = $spreadsheet->getSheetNames();
foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
echo $sheetIndex, ' -> ', $loadedSheetName, '<br />';
}
?>
<body>
</html>

View File

@ -7,7 +7,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -21,14 +20,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #09</h1>
<h2>Simple File Reader Using a Read Filter</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
$sheetname = 'Data Sheet #3';
@ -45,6 +39,7 @@ class MyReadFilter implements IReadFilter
return false;
}
}
$filterSubset = new MyReadFilter();
@ -61,7 +56,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -7,7 +7,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -21,23 +20,17 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #10</h1>
<h2>Simple File Reader Using a Configurable Read Filter</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
$sheetname = 'Data Sheet #3';
class MyReadFilter implements IReadFilter
{
private $_startRow = 0;
private $_endRow = 0;
private $_columns = [];
public function __construct($startRow, $endRow, $columns)
@ -57,6 +50,7 @@ class MyReadFilter implements IReadFilter
return false;
}
}
$filterSubset = new MyReadFilter(9, 15, range('G', 'K'));
@ -73,7 +67,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -7,7 +7,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -21,21 +20,16 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #11</h1>
<h2>Reading a Workbook in "Chunks" Using a Configurable Read Filter (Version 1)</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example2.xls';
/** Define a Read Filter class implementing IReadFilter */
class chunkReadFilter implements IReadFilter
{
private $_startRow = 0;
private $_startRow = 0;
private $_endRow = 0;
/**
@ -59,6 +53,7 @@ class chunkReadFilter implements IReadFilter
return false;
}
}
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -86,7 +81,6 @@ for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) {
var_dump($sheetData);
echo '<br /><br />';
}
?>
<body>
</html>

View File

@ -7,7 +7,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -21,21 +20,16 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #12</h1>
<h2>Reading a Workbook in "Chunks" Using a Configurable Read Filter (Version 2)</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example2.xls';
/** Define a Read Filter class implementing IReadFilter */
class chunkReadFilter implements IReadFilter
{
private $_startRow = 0;
private $_startRow = 0;
private $_endRow = 0;
/**
@ -59,6 +53,7 @@ class chunkReadFilter implements IReadFilter
return false;
}
}
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -89,7 +84,6 @@ for ($startRow = 2; $startRow <= 240; $startRow += $chunkSize) {
var_dump($sheetData);
echo '<br /><br />';
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #13</h1>
<h2>Simple File Reader for Multiple CSV Files</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Csv';
@ -49,7 +47,6 @@ foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
var_dump($sheetData);
echo '<br /><br />';
}
?>
<body>
</html>

View File

@ -8,7 +8,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -22,7 +21,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #14</h1>
<h2>Reading a Large CSV file in "Chunks" to split across multiple Worksheets</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Csv';
@ -31,8 +29,8 @@ $inputFileName = './sampleData/example2.csv';
/** Define a Read Filter class implementing IReadFilter */
class chunkReadFilter implements IReadFilter
{
private $_startRow = 0;
private $_startRow = 0;
private $_endRow = 0;
/**
@ -56,6 +54,7 @@ class chunkReadFilter implements IReadFilter
return false;
}
}
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -106,7 +105,6 @@ foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
var_dump($sheetData);
echo '<br />';
}
?>
<body>
</html>

View File

@ -7,7 +7,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -21,7 +20,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #15</h1>
<h2>Simple File Reader for Tab-Separated Value File using the Advanced Value Binder</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
Cell::setValueBinder(new Cell\AdvancedValueBinder());
@ -66,7 +64,6 @@ foreach ($loadedSheetNames as $sheetIndex => $loadedSheetName) {
var_dump($sheetData);
echo '<br />';
}
?>
<body>
</html>

View File

@ -7,7 +7,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -21,7 +20,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #16</h1>
<h2>Handling Loader Exceptions using Try/Catch</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileName = './sampleData/example_1.xls';
@ -36,7 +34,6 @@ echo '<hr />';
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
var_dump($sheetData);
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #17</h1>
<h2>Simple File Reader Loading Several Named WorkSheets</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -41,7 +35,6 @@ echo 'There are ',count($worksheetNames),' worksheet',((count($worksheetNames) =
foreach ($worksheetNames as $worksheetName) {
echo $worksheetName, '<br />';
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #18</h1>
<h2>Reading list of WorkSheets without loading entire file</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' information using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -41,7 +35,6 @@ foreach ($worksheetNames as $worksheetName) {
echo '<li>', $worksheetName, '</li>';
}
echo '</ol>';
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,14 +19,9 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reader Example #19</h1>
<h2>Reading WorkSheet information without loading entire file</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
// $inputFileType = 'Xlsx';
// $inputFileType = 'Xml';
// $inputFileType = 'Ods';
// $inputFileType = 'Gnumeric';
$inputFileName = './sampleData/example1.xls';
echo 'Loading file ', pathinfo($inputFileName, PATHINFO_BASENAME), ' information using IOFactory with a defined reader type of ', $inputFileType, '<br />';
@ -44,7 +38,6 @@ foreach ($worksheetData as $worksheet) {
echo '</li>';
}
echo '</ol>';
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reading WorkBook Data Example #01</h1>
<h2>Read the WorkBook Properties</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
@ -82,7 +80,6 @@ echo '<b>Company: </b>',$company,'<br />';
/* Read the workbook manager property * */
$manager = $spreadsheet->getProperties()->getManager();
echo '<b>Manager: </b>', $manager, '<br />';
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reading WorkBook Data Example #02</h1>
<h2>Read a list of Custom Properties for a WorkBook</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xlsx';
@ -40,7 +38,6 @@ echo '<b>Custom Property names: </b><br />';
foreach ($customPropertyList as $customPropertyName) {
echo $customPropertyName, '<br />';
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reading WorkBook Data Example #03</h1>
<h2>Read Custom Property Values for a WorkBook</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xlsx';
@ -68,7 +66,6 @@ foreach ($customPropertyList as $customPropertyName) {
echo $propertyValue, ' (', $propertyType, ')<br />';
}
?>
<body>
</html>

View File

@ -6,7 +6,6 @@ error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -20,7 +19,6 @@ date_default_timezone_set('Europe/London');
<h1>PhpSpreadsheet Reading WorkBook Data Example #04</h1>
<h2>Get a List of the Worksheets in a WorkBook</h2>
<?php
require_once __DIR__ . '/../../../src/Bootstrap.php';
$inputFileType = 'Xls';
@ -44,7 +42,6 @@ $sheetNames = $spreadsheet->getSheetNames();
foreach ($sheetNames as $sheetIndex => $sheetName) {
echo 'WorkSheet #', $sheetIndex, ' is named "', $sheetName, '"<br />';
}
?>
<body>
</html>

View File

@ -1,10 +1,8 @@
<?php
error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('Europe/London');
?>
<html>
<head>
@ -16,7 +14,6 @@ date_default_timezone_set('Europe/London');
<body>
<?php
$exampleTypeList = glob('./*', GLOB_ONLYDIR);
foreach ($exampleTypeList as $exampleType) {
@ -42,7 +39,6 @@ foreach ($exampleTypeList as $exampleType) {
}
}
}
?>
<body>
</html>

View File

@ -90,7 +90,7 @@ calculated values, or force recalculation in Excel2003.
### Excel functions that return a Date and Time value
Any of the Date and Time functions that return a date value in Excel can
return either an Excel timestamp or a PHP timestamp or date object.
return either an Excel timestamp or a PHP timestamp or `DateTime` object.
It is possible for scripts to change the data type used for returning
date values by calling the
@ -117,11 +117,11 @@ method can be used to determine the current value of this setting:
$returnDateType = \PhpOffice\PhpSpreadsheet\Calculation\Functions::getReturnDateType();
```
The default is RETURNDATE\_PHP\_NUMERIC.
The default is `RETURNDATE_PHP_NUMERIC`.
#### PHP Timestamps
If RETURNDATE\_PHP\_NUMERIC is set for the Return Date Type, then any
If `RETURNDATE_PHP_NUMERIC` is set for the Return Date Type, then any
date value returned to the calling script by any access to the Date and
Time functions in Excel will be an integer value that represents the
number of seconds from the PHP/Unix base date. The PHP/Unix base date
@ -131,15 +131,15 @@ while a value of +3600 would be 01:00 hrs on 1st January 1970. This
gives PHP a date range of between 14th December 1901 and 19th January
2038.
#### PHP DateTime Objects
#### PHP `DateTime` Objects
If the Return Date Type is set for RETURNDATE\_PHP\_NUMERIC, then any
If the Return Date Type is set for `RETURNDATE_PHP_OBJECT`, then any
date value returned to the calling script by any access to the Date and
Time functions in Excel will be a PHP date/time object.
Time functions in Excel will be a PHP `DateTime` object.
#### Excel Timestamps
If RETURNDATE\_EXCEL is set for the Return Date Type, then the returned
If `RETURNDATE_EXCEL` is set for the Return Date Type, then the returned
date value by any access to the Date and Time functions in Excel will be
a floating point value that represents a number of days from the Excel
base date. The Excel base date is determined by which calendar Excel
@ -157,8 +157,8 @@ Excel date values by calling the
where the following constants can be used for `$baseDate`:
- \PhpOffice\PhpSpreadsheet\Shared\Date::CALENDAR\_WINDOWS\_1900
- \PhpOffice\PhpSpreadsheet\Shared\Date::CALENDAR\_MAC\_1904
- `\PhpOffice\PhpSpreadsheet\Shared\Date::CALENDAR_WINDOWS_1900`
- `\PhpOffice\PhpSpreadsheet\Shared\Date::CALENDAR_MAC_1904`
The method will return a Boolean True on success, False on failure (e.g.
if an invalid value is passed in).
@ -170,7 +170,7 @@ be used to determine the current value of this setting:
$baseDate = \PhpOffice\PhpSpreadsheet\Shared\Date::getExcelCalendar();
```
The default is CALENDAR\_WINDOWS\_1900.
The default is `CALENDAR_WINDOWS_1900`.
#### Functions that return a Date/Time Value
@ -186,15 +186,15 @@ The default is CALENDAR\_WINDOWS\_1900.
### Excel functions that accept Date and Time values as parameters
Date values passed in as parameters to a function can be an Excel
timestamp or a PHP timestamp; or date object; or a string containing a
timestamp or a PHP timestamp; or `DateTime` object; or a string containing a
date value (e.g. '1-Jan-2009'). PhpSpreadsheet will attempt to identify
their type based on the PHP datatype:
An integer numeric value will be treated as a PHP/Unix timestamp. A real
(floating point) numeric value will be treated as an Excel
date/timestamp. Any PHP DateTime object will be treated as a DateTime
date/timestamp. Any PHP `DateTime` object will be treated as a `DateTime`
object. Any string value (even one containing straight numeric data)
will be converted to a date/time object for validation as a date value
will be converted to a `DateTime` object for validation as a date value
based on the server locale settings, so passing through an ambiguous
value of '07/08/2008' will be treated as 7th August 2008 if your server
settings are UK, but as 8th July 2008 if your server settings are US.
@ -202,7 +202,7 @@ However, if you pass through a value such as '31/12/2008' that would be
considered an error by a US-based server, but which is not ambiguous,
then PhpSpreadsheet will attempt to correct this to 31st December 2008.
If the content of the string doesnt match any of the formats recognised
by the php date/time object implementation of `strtotime()` (which can
by the php `DateTime` object implementation of `strtotime()` (which can
handle a wider range of formats than the normal `strtotime()` function),
then the function will return a `#VALUE` error. However, Excel
recommends that you should always use date/timestamps for your date
@ -213,7 +213,7 @@ The same principle applies when data is being written to Excel. Cells
containing date actual values (rather than Excel functions that return a
date value) are always written as Excel dates, converting where
necessary. If a cell formatted as a date contains an integer or
date/time object value, then it is converted to an Excel value for
`DateTime` object value, then it is converted to an Excel value for
writing: if a cell formatted as a date contains a real value, then no
conversion is required. Note that string values are written as strings
rather than converted to Excel date timestamp values.
@ -243,7 +243,7 @@ number of other methods are available in the
\PhpOffice\PhpSpreadsheet\Shared\Date class that can help when working
with dates:
#### \PhpOffice\PhpSpreadsheet\Shared\Date::ExcelToPHP($excelDate)
#### \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimestamp($excelDate)
Converts a date/time from an Excel date timestamp to return a PHP
serialized date/timestamp.
@ -251,17 +251,17 @@ serialized date/timestamp.
Note that this method does not trap for Excel dates that fall outside of
the valid range for a PHP date timestamp.
#### \PhpOffice\PhpSpreadsheet\Shared\Date::ExcelToPHPObject($excelDate)
#### \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($excelDate)
Converts a date from an Excel date/timestamp to return a PHP DateTime
Converts a date from an Excel date/timestamp to return a PHP `DateTime`
object.
#### \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($PHPDate)
Converts a PHP serialized date/timestamp or a PHP DateTime object to
Converts a PHP serialized date/timestamp or a PHP `DateTime` object to
return an Excel date timestamp.
#### \PhpOffice\PhpSpreadsheet\Shared\Date::FormattedPHPToExcel($year, $month, $day, $hours=0, $minutes=0, $seconds=0)
#### \PhpOffice\PhpSpreadsheet\Shared\Date::formattedPHPToExcel($year, $month, $day, $hours=0, $minutes=0, $seconds=0)
Takes year, month and day values (and optional hour, minute and second
values) and returns an Excel date timestamp value.
@ -979,7 +979,7 @@ Excel and in PHP.
#### DATE
The DATE function returns an Excel timestamp or a PHP timestamp or date
The DATE function returns an Excel timestamp or a PHP timestamp or `DateTime`
object representing the date that is referenced by the parameters.
##### Syntax
@ -1025,7 +1025,7 @@ February 27, 2008.
**mixed** A date/time stamp that corresponds to the given date.
This could be a PHP timestamp value (integer), a PHP date/time object,
This could be a PHP timestamp value (integer), a PHP `DateTime` object,
or an Excel timestamp value (real), depending on the value of
\PhpOffice\PhpSpreadsheet\Calculation\Functions::getReturnDateType().
@ -1093,12 +1093,12 @@ variety of different intervals, such number of years, months, or days.
**date1** First Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**date2** Second Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**unit** The interval type to use for the calculation
@ -1230,7 +1230,7 @@ A string, representing a date value.
**mixed** A date/time stamp that corresponds to the given date.
This could be a PHP timestamp value (integer), a PHP date/time object,
This could be a PHP timestamp value (integer), a PHP `DateTime` object,
or an Excel timestamp value (real), depending on the value of
\PhpOffice\PhpSpreadsheet\Calculation\Functions::getReturnDateType().
@ -1290,7 +1290,7 @@ $retVal = call_user_func_array(
##### Notes
DATEVALUE uses the php date/time object implementation of `strtotime()`
DATEVALUE uses the php `DateTime` object implementation of `strtotime()`
(which can handle a wider range of formats than the normal `strtotime()`
function), and it is also called for any date parameter passed to other
date functions (such as DATEDIF) when the parameter value is a string.
@ -1317,7 +1317,7 @@ integer ranging from 1 to 31.
**datetime** Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
##### Return Value
@ -1371,12 +1371,12 @@ accounting systems.
**date1** First Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**date2** Second Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**method** A boolean flag (TRUE or FALSE)
@ -1453,7 +1453,7 @@ Excel `TRUE()` and `FALSE()` functions are used instead.
#### EDATE
The EDATE function returns an Excel timestamp or a PHP timestamp or date
The EDATE function returns an Excel timestamp or a PHP timestamp or `DateTime`
object representing the date that is the indicated number of months
before or after a specified date (the start\_date). Use EDATE to
calculate maturity dates or due dates that fall on the same day of the
@ -1467,7 +1467,7 @@ month as the date of issue.
**baseDate** Start Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**months** Number of months to add.
@ -1480,7 +1480,7 @@ value yields a past date.
**mixed** A date/time stamp that corresponds to the basedate + months.
This could be a PHP timestamp value (integer), a PHP date/time object,
This could be a PHP timestamp value (integer), a PHP `DateTime` object,
or an Excel timestamp value (real), depending on the value of
\PhpOffice\PhpSpreadsheet\Calculation\Functions::getReturnDateType().
@ -1526,7 +1526,7 @@ the Analysis ToolPak.
#### EOMONTH
The EOMONTH function returns an Excel timestamp or a PHP timestamp or
date object representing the date of the last day of the month that is
`DateTime` object representing the date of the last day of the month that is
the indicated number of months before or after a specified date (the
start\_date). Use EOMONTH to calculate maturity dates or due dates that
fall on the last day of the month.
@ -1539,7 +1539,7 @@ fall on the last day of the month.
**baseDate** Start Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**months** Number of months to add.
@ -1553,7 +1553,7 @@ value yields a past date.
**mixed** A date/time stamp that corresponds to the last day of basedate
+ months.
This could be a PHP timestamp value (integer), a PHP date/time object,
This could be a PHP timestamp value (integer), a PHP `DateTime` object,
or an Excel timestamp value (real), depending on the value of
\PhpOffice\PhpSpreadsheet\Calculation\Functions::getReturnDateType().
@ -1607,7 +1607,7 @@ an integer, ranging from 0 (12:00 A.M.) to 23 (11:00 P.M.).
**datetime** Time.
An Excel date/time value, PHP date timestamp, PHP date object, or a
An Excel date/time value, PHP date timestamp, PHP `DateTime` object, or a
date/time represented as a string.
##### Return Value
@ -1665,7 +1665,7 @@ given as an integer, ranging from 0 to 59.
**datetime** Time.
An Excel date/time value, PHP date timestamp, PHP date object, or a
An Excel date/time value, PHP date timestamp, PHP `DateTime` object, or a
date/time represented as a string.
##### Return Value
@ -1723,7 +1723,7 @@ integer ranging from 1 to 12.
**datetime** Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
##### Return Value
@ -1779,12 +1779,12 @@ a specific term.
**startDate** Start Date of the period.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**endDate** End Date of the period.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**holidays** Optional array of Holiday dates.
@ -1831,7 +1831,7 @@ There are no parameters for the `NOW()` function.
**mixed** A date/time stamp that corresponds to the current date and
time.
This could be a PHP timestamp value (integer), a PHP date/time object,
This could be a PHP timestamp value (integer), a PHP `DateTime` object,
or an Excel timestamp value (real), depending on the value of
\PhpOffice\PhpSpreadsheet\Calculation\Functions::getReturnDateType().
@ -1862,7 +1862,7 @@ given as an integer, ranging from 0 to 59.
**datetime** Time.
An Excel date/time value, PHP date timestamp, PHP date object, or a
An Excel date/time value, PHP date timestamp, PHP `DateTime` object, or a
date/time represented as a string.
##### Return Value
@ -1934,7 +1934,7 @@ modified to return a value between 0 and 6.
**datetime** Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
**method** An integer flag (values 0, 1 or 2)
@ -2012,7 +2012,7 @@ The YEAR function returns the year of a date.
**datetime** Date.
An Excel date value, PHP date timestamp, PHP date object, or a date
An Excel date value, PHP date timestamp, PHP `DateTime` object, or a date
represented as a string.
##### Return Value

View File

@ -13,6 +13,7 @@ use PhpOffice\PhpSpreadsheet\Calculation\LookupRef;
use PhpOffice\PhpSpreadsheet\Calculation\MathTrig;
use PhpOffice\PhpSpreadsheet\Calculation\Statistical;
use PhpOffice\PhpSpreadsheet\Calculation\TextData;
use PhpOffice\PhpSpreadsheet\Calculation\Token\Stack;
/**
* Copyright (c) 2006 - 2016 PhpSpreadsheet.
@ -2059,8 +2060,6 @@ class Calculation
/**
* Unset an instance of this class.
*
* @param Spreadsheet $spreadsheet Injected spreadsheet identifying the instance to unset
*/
public function __destruct()
{
@ -2314,6 +2313,14 @@ class Calculation
return false;
}
/**
* @param string $fromSeparator
* @param string $toSeparator
* @param string $formula
* @param bool $inBraces
*
* @return string
*/
public static function translateSeparator($fromSeparator, $toSeparator, $formula, &$inBraces)
{
$strlen = mb_strlen($formula);
@ -2657,6 +2664,12 @@ class Calculation
return $result;
}
/**
* @param string $cellReference
* @param mixed $cellValue
*
* @return bool
*/
public function getValueFromCache($cellReference, &$cellValue)
{
// Is calculation cacheing enabled?
@ -2985,6 +2998,11 @@ class Calculation
}
}
/**
* @param string $formula
*
* @return string
*/
private function convertMatrixReferences($formula)
{
static $matrixReplaceFrom = ['{', ';', '}'];
@ -3073,6 +3091,13 @@ class Calculation
];
// Convert infix to postfix notation
/**
* @param string $formula
* @param Cell|null $pCell
*
* @return bool
*/
private function _parseFormula($formula, Cell $pCell = null)
{
if (($formula = $this->convertMatrixReferences(trim($formula))) === false) {
@ -3094,7 +3119,7 @@ class Calculation
// Start with initialisation
$index = 0;
$stack = new Calculation\Token\Stack();
$stack = new Stack();
$output = [];
$expectingOperator = false; // We use this test in syntax-checking the expression to determine when a
// - is a negation or + is a positive operator rather than an operation
@ -3401,8 +3426,11 @@ class Calculation
// evaluate postfix notation
/**
* @param string $cellID
* @param mixed $tokens
* @param string|null $cellID
* @param Cell|null $pCell
*
* @return bool
*/
private function processTokenStack($tokens, $cellID = null, Cell $pCell = null)
{
@ -3414,7 +3442,7 @@ class Calculation
// so we store the parent cell collection so that we can re-attach it when necessary
$pCellWorksheet = ($pCell !== null) ? $pCell->getWorksheet() : null;
$pCellParent = ($pCell !== null) ? $pCell->getParent() : null;
$stack = new Calculation\Token\Stack();
$stack = new Stack();
// Loop through each token in turn
foreach ($tokens as $tokenData) {
@ -3770,9 +3798,6 @@ class Calculation
$output = $stack->pop();
$output = $output['value'];
// if ((is_array($output)) && (self::$returnArrayAsType != self::RETURN_ARRAY_AS_ARRAY)) {
// return array_shift(Calculation\Functions::flattenArray($output));
// }
return $output;
}
@ -3814,7 +3839,17 @@ class Calculation
return true;
}
private function executeBinaryComparisonOperation($cellID, $operand1, $operand2, $operation, &$stack, $recursingArrays = false)
/**
* @param string|null $cellID
* @param mixed $operand1
* @param mixed $operand2
* @param string $operation
* @param Stack $stack
* @param bool $recursingArrays
*
* @return bool
*/
private function executeBinaryComparisonOperation($cellID, $operand1, $operand2, $operation, Stack &$stack, $recursingArrays = false)
{
// If we're dealing with matrix operations, we want a matrix result
if ((is_array($operand1)) || (is_array($operand2))) {
@ -3954,7 +3989,7 @@ class Calculation
/**
* @param string $matrixFunction
* @param mixed $cellID
* @param string|null $cellID
* @param mixed $operand1
* @param mixed $operand2
* @param mixed $operation

View File

@ -2293,7 +2293,7 @@ class Engineering
* Excel Function:
* IMSUM(complexNumber[,complexNumber[,...]])
*
* @param string $complexNumbers Series of complex numbers to add
* @param string ...$complexNumbers Series of complex numbers to add
*
* @return string
*/
@ -2333,7 +2333,7 @@ class Engineering
* Excel Function:
* IMPRODUCT(complexNumber[,complexNumber[,...]])
*
* @param string $complexNumbers Series of complex numbers to multiply
* @param string ...$complexNumbers Series of complex numbers to multiply
*
* @return string
*/

View File

@ -80,7 +80,7 @@ class Logical
*
* @category Logical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return string|bool the logical AND of the arguments
*/

View File

@ -347,7 +347,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return int Greatest Common Divisor
*/
@ -456,7 +456,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return int Lowest Common Multiplier
*/
@ -859,7 +859,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -899,7 +899,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1185,7 +1185,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1306,7 +1306,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1351,7 +1351,7 @@ class MathTrig
*
* @category Mathematical and Trigonometric Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/

View File

@ -720,7 +720,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -771,7 +771,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -814,7 +814,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1207,7 +1207,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return int
*/
@ -1241,7 +1241,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return int
*/
@ -1271,7 +1271,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return int
*/
@ -1491,7 +1491,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1785,7 +1785,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1851,7 +1851,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -1967,7 +1967,7 @@ class Statistical
* kurtosis indicates a relatively peaked distribution. Negative kurtosis indicates a
* relatively flat distribution.
*
* @param array Data Series
* @param array ...$args Data Series
*
* @return float
*/
@ -2249,7 +2249,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -2285,7 +2285,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -2368,7 +2368,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -2412,7 +2412,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -2448,7 +2448,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -2568,7 +2568,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3016,7 +3016,7 @@ class Statistical
* asymmetric tail extending toward more positive values. Negative skewness indicates a
* distribution with an asymmetric tail extending toward more negative values.
*
* @param array Data Series
* @param array ...$args Data Series
*
* @return float
*/
@ -3161,7 +3161,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3210,7 +3210,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3262,7 +3262,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3309,7 +3309,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3599,7 +3599,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3643,7 +3643,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3696,7 +3696,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/
@ -3741,7 +3741,7 @@ class Statistical
*
* @category Statistical Functions
*
* @param mixed $args Data values
* @param mixed ...$args Data values
*
* @return float
*/

View File

@ -351,7 +351,7 @@ class Gnumeric extends BaseReader implements IReader
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula
// cells... during the load, all formulae should be correct, and we're simply bringing the worksheet
// name in line with the formula, not the reverse
$spreadsheet->getActiveSheet()->setTitle($worksheetName, false);
$spreadsheet->getActiveSheet()->setTitle($worksheetName, false, false);
if ((!$this->readDataOnly) && (isset($sheet->PrintInformation))) {
if (isset($sheet->PrintInformation->Margins)) {

View File

@ -317,7 +317,7 @@ class Html extends BaseReader implements IReader
break;
case 'title':
$this->processDomElement($child, $sheet, $row, $column, $cellContent);
$sheet->setTitle($cellContent);
$sheet->setTitle($cellContent, true, false);
$cellContent = '';
break;
case 'span':

View File

@ -440,7 +440,7 @@ class Ods extends BaseReader implements IReader
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
// formula cells... during the load, all formulae should be correct, and we're simply
// bringing the worksheet name in line with the formula, not the reverse
$spreadsheet->getActiveSheet()->setTitle($worksheetName, false);
$spreadsheet->getActiveSheet()->setTitle($worksheetName, false, false);
}
// Go through every child of table element

View File

@ -808,7 +808,7 @@ class Xls extends BaseReader implements IReader
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in formula
// cells... during the load, all formulae should be correct, and we're simply bringing the worksheet
// name in line with the formula, not the reverse
$this->phpSheet->setTitle($sheet['name'], false);
$this->phpSheet->setTitle($sheet['name'], false, false);
$this->phpSheet->setSheetState($sheet['sheetState']);
$this->pos = $sheet['offset'];

View File

@ -697,7 +697,7 @@ class Xlsx extends BaseReader implements IReader
// references in formula cells... during the load, all formulae should be correct,
// and we're simply bringing the worksheet name in line with the formula, not the
// reverse
$docSheet->setTitle((string) $eleSheet['name'], false);
$docSheet->setTitle((string) $eleSheet['name'], false, false);
$fileWorksheet = $worksheets[(string) self::getArrayItem($eleSheet->attributes('http://schemas.openxmlformats.org/officeDocument/2006/relationships'), 'id')];
$xmlSheet = simplexml_load_string(
//~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"
@ -766,7 +766,7 @@ class Xlsx extends BaseReader implements IReader
}
}
if (isset($xmlSheet->sheetPr) && isset($xmlSheet->sheetPr['codeName'])) {
$docSheet->setCodeName((string) $xmlSheet->sheetPr['codeName']);
$docSheet->setCodeName((string) $xmlSheet->sheetPr['codeName'], false);
}
if (isset($xmlSheet->sheetPr) && isset($xmlSheet->sheetPr->outlinePr)) {
if (isset($xmlSheet->sheetPr->outlinePr['summaryRight']) &&

View File

@ -552,7 +552,7 @@ class Xml extends BaseReader implements IReader
// Use false for $updateFormulaCellReferences to prevent adjustment of worksheet references in
// formula cells... during the load, all formulae should be correct, and we're simply bringing
// the worksheet name in line with the formula, not the reverse
$spreadsheet->getActiveSheet()->setTitle($worksheetName, false);
$spreadsheet->getActiveSheet()->setTitle($worksheetName, false, false);
}
$columnID = 'A';

View File

@ -436,8 +436,6 @@ class SingularValueDecomposition
} // end while
}
// end constructor
/**
* Return the left singular vectors.
*

View File

@ -825,27 +825,30 @@ class Worksheet implements IComparable
* Set title.
*
* @param string $pValue String containing the dimension of this worksheet
* @param string $updateFormulaCellReferences boolean Flag indicating whether cell references in formulae should
* @param bool $updateFormulaCellReferences Flag indicating whether cell references in formulae should
* be updated to reflect the new sheet name.
* This should be left as the default true, unless you are
* certain that no formula cells on any worksheet contain
* references to this worksheet
* @param bool $validate False to skip validation of new title. WARNING: This should only be set
* at parse time (by Readers), where titles can be assumed to be valid.
*
* @return Worksheet
*/
public function setTitle($pValue, $updateFormulaCellReferences = true)
public function setTitle($pValue, $updateFormulaCellReferences = true, $validate = true)
{
// Is this a 'rename' or not?
if ($this->getTitle() == $pValue) {
return $this;
}
// Syntax check
self::checkSheetTitle($pValue);
// Old title
$oldTitle = $this->getTitle();
if ($validate) {
// Syntax check
self::checkSheetTitle($pValue);
if ($this->parent) {
// Is there already such sheet name?
if ($this->parent->sheetNameExists($pValue)) {
@ -868,9 +871,8 @@ class Worksheet implements IComparable
}
}
$altTitle = $pValue . ' ' . $i;
return $this->setTitle($altTitle, $updateFormulaCellReferences);
$pValue .= " $i";
}
}
}
@ -1161,7 +1163,6 @@ class Worksheet implements IComparable
* @param int $pRow Numeric row coordinate of the cell
* @param mixed $pValue Value of the cell
* @param string $pDataType Explicit data type, see Cell\DataType::TYPE_*
* @param bool $returnCell Return the worksheet (false, default) or the cell (true)
*
* @return Worksheet
*/
@ -2976,20 +2977,25 @@ class Worksheet implements IComparable
/**
* Define the code name of the sheet.
*
* @param null|string Same rule as Title minus space not allowed (but, like Excel, change silently space to underscore)
* @param null|mixed $pValue
* @param string $pValue Same rule as Title minus space not allowed (but, like Excel, change
* silently space to underscore)
* @param bool $validate False to skip validation of new title. WARNING: This should only be set
* at parse time (by Readers), where titles can be assumed to be valid.
*
* @throws Exception
*
* @return objWorksheet
*/
public function setCodeName($pValue)
public function setCodeName($pValue, $validate = true)
{
// Is this a 'rename' or not?
if ($this->getCodeName() == $pValue) {
return $this;
}
if ($validate) {
$pValue = str_replace(' ', '_', $pValue); //Excel does this automatically without flinching, we are doing the same
// Syntax check
// throw an exception if not valid
self::checkSheetCodeName($pValue);
@ -3019,8 +3025,7 @@ class Worksheet implements IComparable
}
$pValue = $pValue . '_' . $i; // ok, we have a valid name
//codeName is'nt used in formula : no need to call for an update
//return $this->setTitle($altTitle, $updateFormulaCellReferences);
}
}
}

View File

@ -629,6 +629,7 @@ class AutoFilter
$rules = $filterColumn->getRules();
switch ($filterColumn->getFilterType()) {
case AutoFilter\Column::AUTOFILTER_FILTERTYPE_FILTER:
$ruleType = null;
$ruleValues = [];
// Build a list of the filter value selections
foreach ($rules as $rule) {
@ -700,7 +701,6 @@ class AutoFilter
$ruleValues = [];
// Build a list of the filter value selections
foreach ($rules as $rule) {
$ruleType = $rule->getRuleType();
$ruleValue = $rule->getValue();
if (!is_numeric($ruleValue)) {
// Convert to a regexp allowing for regexp reserved characters, wildcards and escaped wildcards

View File

@ -306,7 +306,6 @@ class Worksheet extends WriterPart
}
// Selection
// if ($pane != '') {
// Only need to write selection element if we have a split pane
// We cheat a little by over-riding the active cell selection, setting it to the split cell
$objWriter->startElement('selection');
@ -316,7 +315,6 @@ class Worksheet extends WriterPart
$objWriter->writeAttribute('activeCell', $activeCell);
$objWriter->writeAttribute('sqref', $activeCell);
$objWriter->endElement();
// }
$objWriter->endElement();

View File

@ -10,11 +10,7 @@ class HTMLTest extends PHPUnit_Framework_TestCase
public function testCsvWithAngleBracket()
{
$filename = __DIR__ . '/../../data/Reader/HTML/csv_with_angle_bracket.csv';
$this->assertFalse($this->getInstance()->canRead($filename));
}
private function getInstance()
{
return new HTML();
$reader = new Html();
$this->assertFalse($reader->canRead($filename));
}
}

View File

@ -0,0 +1,126 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Worksheet;
use PHPUnit_Framework_TestCase;
class WorksheetTest extends PHPUnit_Framework_TestCase
{
public function testSetTitle()
{
$testTitle = str_repeat('a', 31);
$worksheet = new Worksheet();
$worksheet->setTitle($testTitle);
$this->assertSame($testTitle, $worksheet->getTitle());
}
public function setTitleInvalidProvider()
{
return [
[str_repeat('a', 32), 'Maximum 31 characters allowed in sheet title.'],
['invalid*title', 'Invalid character found in sheet title'],
];
}
/**
* @param string $title
* @param string $expectMessage
* @dataProvider setTitleInvalidProvider
*/
public function testSetTitleInvalid($title, $expectMessage)
{
// First, test setting title with validation disabled -- should be successful
$worksheet = new Worksheet();
$worksheet->setTitle($title, true, false);
// Next, test again with validation enabled -- this time we should fail
$worksheet = new Worksheet();
$this->expectException(\Exception::class);
$this->expectExceptionMessage($expectMessage);
$worksheet->setTitle($title);
}
public function testSetTitleDuplicate()
{
// Create a Spreadsheet with three Worksheets (the first is created automatically)
$spreadsheet = new Spreadsheet();
$spreadsheet->createSheet();
$spreadsheet->createSheet();
// Set unique title -- should be unchanged
$sheet = $spreadsheet->getSheet(0);
$sheet->setTitle('Test Title');
$this->assertSame('Test Title', $sheet->getTitle());
// Set duplicate title -- should have numeric suffix appended
$sheet = $spreadsheet->getSheet(1);
$sheet->setTitle('Test Title');
$this->assertSame('Test Title 1', $sheet->getTitle());
// Set duplicate title with validation disabled -- should be unchanged
$sheet = $spreadsheet->getSheet(2);
$sheet->setTitle('Test Title', true, false);
$this->assertSame('Test Title', $sheet->getTitle());
}
public function testSetCodeName()
{
$testCodeName = str_repeat('a', 31);
$worksheet = new Worksheet();
$worksheet->setCodeName($testCodeName);
$this->assertSame($testCodeName, $worksheet->getCodeName());
}
public function setCodeNameInvalidProvider()
{
return [
[str_repeat('a', 32), 'Maximum 31 characters allowed in sheet code name.'],
['invalid*code*name', 'Invalid character found in sheet code name'],
];
}
/**
* @param string $codeName
* @param string $expectMessage
* @dataProvider setCodeNameInvalidProvider
*/
public function testSetCodeNameInvalid($codeName, $expectMessage)
{
// First, test setting code name with validation disabled -- should be successful
$worksheet = new Worksheet();
$worksheet->setCodeName($codeName, false);
// Next, test again with validation enabled -- this time we should fail
$worksheet = new Worksheet();
$this->expectException(\Exception::class);
$this->expectExceptionMessage($expectMessage);
$worksheet->setCodeName($codeName);
}
public function testSetCodeNameDuplicate()
{
// Create a Spreadsheet with three Worksheets (the first is created automatically)
$spreadsheet = new Spreadsheet();
$spreadsheet->createSheet();
$spreadsheet->createSheet();
// Set unique code name -- should be massaged to Snake_Case
$sheet = $spreadsheet->getSheet(0);
$sheet->setCodeName('Test Code Name');
$this->assertSame('Test_Code_Name', $sheet->getCodeName());
// Set duplicate code name -- should be massaged and have numeric suffix appended
$sheet = $spreadsheet->getSheet(1);
$sheet->setCodeName('Test Code Name');
$this->assertSame('Test_Code_Name_1', $sheet->getCodeName());
// Set duplicate code name with validation disabled -- should be unchanged, and unmassaged
$sheet = $spreadsheet->getSheet(2);
$sheet->setCodeName('Test Code Name', false);
$this->assertSame('Test Code Name', $sheet->getCodeName());
}
}