From 4dd486fb940538a206693f823ac3e120da7ae22b Mon Sep 17 00:00:00 2001 From: Adrien Crivelli Date: Sat, 30 Dec 2017 19:07:22 +0900 Subject: [PATCH] Clean up very obsolete links --- docs/faq.md | 43 +----------------- docs/topics/calculation-engine.md | 9 ++-- docs/topics/file-formats.md | 33 ++++++-------- docs/topics/links-and-tools.md | 15 ------ docs/topics/memory_saving.md | 4 +- docs/topics/reading-files.md | 22 +++++---- docs/topics/recipes.md | 2 +- samples/templates/Excel2003XMLTest.xml | 4 +- samples/templates/OOCalcTest.ods | Bin 17931 -> 20326 bytes samples/templates/sampleSpreadsheet.php | 2 +- .../Cell/HyperlinkTest.php | 10 ++-- tests/PhpSpreadsheetTests/Reader/OdsTest.php | 24 +++++----- 12 files changed, 54 insertions(+), 114 deletions(-) delete mode 100644 docs/topics/links-and-tools.md diff --git a/docs/faq.md b/docs/faq.md index 68dbef5d..19f5f8fc 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -11,21 +11,11 @@ with PHP's `iconv()` or `mb_convert_encoding()` functions. PhpSpreadsheet holds an "in memory" representation of a spreadsheet, so it is susceptible to PHP's memory limitations. The memory made available to PHP can be increased by editing the value of the `memory_limit` -directive in your php.ini file, or by using +directive in your `php.ini` file, or by using `ini_set('memory_limit', '128M')` within your code. Some Readers and Writers are faster than others, and they also use -differing amounts of memory. You can find some indication of the -relative performance and memory usage for the different Readers and -Writers, over the different versions of PhpSpreadsheet, on the -[discussion -board](http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=234150). - -If you've already increased memory to a maximum, or can't change your -memory limit, then [this -discussion](http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=242712) -on the board describes some of the methods that can be applied to reduce -the memory usage of your scripts using PhpSpreadsheet. +differing amounts of memory. ## Protection on my worksheet is not working? @@ -65,32 +55,3 @@ file in Excel, the actual width is 0.71 less than it should be. The short answer is that PhpSpreadsheet uses a measure where padding is included. See [how to set a column's width](./topics/recipes.md#setting-a-columns-width) for more details. - -## How do I use PhpSpreadsheet with my framework - -- There are some instructions for using PhpSpreadsheet with Joomla on - the [Joomla message - board](http://http:/forum.joomla.org/viewtopic.php?f=304&t=433060) -- A page of advice on using [PhpSpreadsheet in the Yii - framework](http://www.yiiframework.com/wiki/101/how-to-use-phpexcel-external-library-with-yii/) -- [The - Bakery](http://bakery.cakephp.org/articles/melgior/2010/01/26/simple-excel-spreadsheet-helper) - has some helper classes for reading and writing with PhpSpreadsheet - within CakePHP -- Integrating [PhpSpreadsheet into Kohana - 3](http://www.flynsarmy.com/2010/07/phpexcel-module-for-kohana-3/) - and [Интеграция PHPExcel и Kohana - Framework](http://szpargalki.blogspot.com/2011/02/phpexcel-kohana-framework.html) -- Using [PhpSpreadsheet with - TYPO3](http://typo3.org/documentation/document-library/extension-manuals/phpexcel_library/1.1.1/view/toc/0/) - -### Tutorials - -- [English PHPExcel tutorial](http://openxmldeveloper.org) -- [French PHPExcel - tutorial](http://g-ernaelsten.developpez.com/tutoriels/excel2007/) -- [Russian PHPExcel Blog - Postings](http://www.web-junior.net/sozdanie-excel-fajjlov-s-pomoshhyu-phpexcel/) -- [A Japanese-language introduction to - PHPExcel](http://journal.mycom.co.jp/articles/2009/03/06/phpexcel/index.html) - diff --git a/docs/topics/calculation-engine.md b/docs/topics/calculation-engine.md index 94fa3a10..6a84f8c0 100644 --- a/docs/topics/calculation-engine.md +++ b/docs/topics/calculation-engine.md @@ -61,10 +61,8 @@ In Excel `+` wins over `&`, just like `*` wins over `+` in ordinary algebra. The former rule is not what one finds using the calculation engine shipped with PhpSpreadsheet. -Reference for operator precedence in Excel: - - -Reference for operator precedence in PHP: +- [Reference for Excel](https://support.office.com/en-us/article/Calculation-operators-and-precedence-in-Excel-48be406d-4975-4d31-b2b8-7af9e0e2878a) +- [Reference for PHP](http://php.net/manual/en/language.operators.php) #### Formulas involving numbers and text @@ -76,8 +74,7 @@ formula is evaluated as 3 instead of evaluating as an error. This also causes the Excel document being generated as containing unreadable content. -Reference for this behaviour in PHP: - +- [Reference for this behaviour in PHP](http://php.net/manual/en/language.types.string.php#language.types.string.conversion) #### Formulas don’t seem to be calculated in Excel2003 using compatibility pack? diff --git a/docs/topics/file-formats.md b/docs/topics/file-formats.md index 41889f41..c416105c 100644 --- a/docs/topics/file-formats.md +++ b/docs/topics/file-formats.md @@ -11,21 +11,18 @@ Currently, PhpSpreadsheet supports the following File Types for Reading: ### Xls The Microsoft Excel™ Binary file format (BIFF5 and BIFF8) is a binary -file format that was used by Microsoft Excel™ between versions 95 and -2003. The format is supported (to various extents) by most spreadsheet +file format that was used by Microsoft Excel™ between versions 95 and 2003. +The format is supported (to various extents) by most spreadsheet programs. BIFF files normally have an extension of .xls. Documentation -describing the format can be found online at - or -from [as a downloadable -PDF](http://download.microsoft.com/download/2/4/8/24862317-78F0-4C4B-B355-C7B2C1D997DB/%5BMS-XLS%5D.pdf). +describing the format can be [read online](https://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx) +or [downloaded as PDF](http://download.microsoft.com/download/2/4/8/24862317-78F0-4C4B-B355-C7B2C1D997DB/%5BMS-XLS%5D.pdf). ### Xml Microsoft Excel™ 2003 included options for a file format called SpreadsheetML. This file is a zipped XML document. It is not very common, but its core features are supported. Documentation for the -format can be found at - +format can be [read online](https://msdn.microsoft.com/en-us/library/aa140066(office.10).aspx) though it’s sadly rather sparse in its detail. ### Xlsx @@ -35,23 +32,21 @@ Office Open XML SpreadsheetML, and Excel 2010 extended this still further with its new features such as sparklines. These files typically have an extension of .xlsx. This format is based around a zipped collection of eXtensible Markup Language (XML) files. Microsoft Office -Open XML SpreadsheetML is mostly standardized in ECMA 376 -() +Open XML SpreadsheetML is mostly standardized in [ECMA 376](http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm) and ISO 29500. ### Ods aka Open Document Format (ODF) or OASIS, this is the OpenOffice.org XML -File Format for spreadsheets. It comprises a zip archive including +file format for spreadsheets. It comprises a zip archive including several components all of which are text files, most of these with markup in the eXtensible Markup Language (XML). It is the standard file format for OpenOffice.org Calc and StarCalc, and files typically have an extension of .ods. The published specification for the file format is -available from the OASIS Open Office XML Format Technical Committee web -page -(). -Other information is available from the OpenOffice.org XML File Format -web page (), part of the +available from [the OASIS Open Office XML Format Technical Committee web +page](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=office). +Other information is available from [the OpenOffice.org XML File Format +web page](http://www.openoffice.org/xml/), part of the OpenOffice.org project. ### Slk @@ -66,12 +61,12 @@ options (unlike CSV files). ### Gnumeric -The Gnumeric file format is used by the Gnome Gnumeric spreadsheet -application, and typically files have an extension of .gnumeric. The +The [Gnumeric file format](https://help.gnome.org/users/gnumeric/stable/sect-file-formats.html.en#file-format-gnumeric) +is used by the Gnome Gnumeric spreadsheet +application, and typically files have an extension of `.gnumeric`. The file contents are stored using eXtensible Markup Language (XML) markup, and the file is then compressed using the GNU project's gzip compression library. - ### Csv diff --git a/docs/topics/links-and-tools.md b/docs/topics/links-and-tools.md deleted file mode 100644 index dab842d7..00000000 --- a/docs/topics/links-and-tools.md +++ /dev/null @@ -1,15 +0,0 @@ -# Useful links and tools - -There are some links and tools which are very useful when developing -using PhpSpreadsheet. - -## OpenXML / SpreadsheetML - -- [File format - documentation](http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm) -- [OpenXML Explained - e-book](http://openxmldeveloper.org/articles/1970.aspx) -- [Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint - 2007 File - Formats](http://www.microsoft.com/downloads/details.aspx?familyid=941b3470-3ae9-4aee-8f43-c6bb74cd1466&displaylang=en) -- [OpenXML Package Explorer](http://www.codeplex.com/PackageExplorer/) diff --git a/docs/topics/memory_saving.md b/docs/topics/memory_saving.md index f2ff2070..3efef43c 100644 --- a/docs/topics/memory_saving.md +++ b/docs/topics/memory_saving.md @@ -47,7 +47,7 @@ you to select the most appropriate implementation for your environnement. You can either implement [PSR-16](http://www.php-fig.org/psr/psr-16/) from scratch, or use [pre-existing libraries](https://packagist.org/search/?q=psr-16). -One such library is [PHP Cache](http://www.php-cache.com/) which +One such library is [PHP Cache](https://www.php-cache.com/) which provides a wide range of alternatives. Refers to their documentation for details, but here are a few suggestions that should get you started. @@ -105,4 +105,4 @@ $pool = new \Cache\Adapter\Memcache\MemcacheCachePool($client); $simpleCache = new \Cache\Bridge\SimpleCache\SimpleCacheBridge($pool); \PhpOffice\PhpSpreadsheet\Settings::setCache($simpleCache); -``` \ No newline at end of file +``` diff --git a/docs/topics/reading-files.md b/docs/topics/reading-files.md index 8f22e71b..3d8f20f7 100644 --- a/docs/topics/reading-files.md +++ b/docs/topics/reading-files.md @@ -4,15 +4,17 @@ XML-based formats such as OfficeOpen XML, Excel2003 XML, OASIS and Gnumeric are susceptible to XML External Entity Processing (XXE) -injection attacks (for an explanation of XXE injection see -http://websec.io/2012/08/27/Preventing-XEE-in-PHP.html) when reading -spreadsheet files. This can lead to: +injection attacks when reading spreadsheet files. This can lead to: - Disclosure whether a file is existent - Server Side Request Forgery - Command Execution (depending on the installed PHP wrappers) -To prevent this, by default every XML-based Reader looks for XML entities declared inside the DOCTYPE and if any is found an exception is raised. +To prevent this, by default every XML-based Reader looks for XML +entities declared inside the DOCTYPE and if any is found an exception +is raised. + +Read more [about of XXE injection](https://websec.io/2012/08/27/Preventing-XXE-in-PHP.html). ## Loading a Spreadsheet File @@ -566,16 +568,16 @@ CSV | YES | HTML | NO When loading data from a file that contains no formatting information, such as a CSV file, then data is read either as strings or numbers (float or integer). This means that PhpSpreadsheet does not -automatically recognise dates/times (such as "16-Apr-2009" or "13:30"), -booleans ("TRUE" or "FALSE"), percentages ("75%"), hyperlinks -("http://www.phpexcel.net"), etc as anything other than simple strings. +automatically recognise dates/times (such as `16-Apr-2009` or `13:30`), +booleans (`true` or `false`), percentages (`75%`), hyperlinks +(`https://www.example.com`), etc as anything other than simple strings. However, you can apply additional processing that is executed against these values during the load process within a Value Binder. A Value Binder is a class that implement the -\PhpOffice\PhpSpreadsheet\Cell\IValueBinder interface. It must contain a -bindValue() method that accepts a `\PhpOffice\PhpSpreadsheet\Cell\Cell` and a -value as arguments, and return a boolean true or false that indicates +`\PhpOffice\PhpSpreadsheet\Cell\IValueBinder` interface. It must contain a +`bindValue()` method that accepts a `\PhpOffice\PhpSpreadsheet\Cell\Cell` and a +value as arguments, and return a boolean `true` or `false` that indicates whether the workbook cell has been populated with the value or not. The Advanced Value Binder implements such a class: amongst other tests, it identifies a string comprising "TRUE" or "FALSE" (based on locale diff --git a/docs/topics/recipes.md b/docs/topics/recipes.md index 6b1f5998..af10798c 100644 --- a/docs/topics/recipes.md +++ b/docs/topics/recipes.md @@ -275,7 +275,7 @@ You can make a cell a clickable URL by setting its hyperlink property: ``` php $spreadsheet->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); -$spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net'); +$spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('https://www.example.com'); ``` If you want to make a hyperlink to another worksheet/cell, use the diff --git a/samples/templates/Excel2003XMLTest.xml b/samples/templates/Excel2003XMLTest.xml index fb75ab06..db03903e 100644 --- a/samples/templates/Excel2003XMLTest.xml +++ b/samples/templates/Excel2003XMLTest.xml @@ -22310,7 +22310,7 @@ - + PhpSpreadsheet @@ -39528,4 +39528,4 @@ - \ No newline at end of file + diff --git a/samples/templates/OOCalcTest.ods b/samples/templates/OOCalcTest.ods index b29db7663dbdbba6f8bb42145b7a0cd9590c7f05..d7fa5739850a02212ea463cfce55dd5ad06ddd81 100644 GIT binary patch literal 20326 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

3iPlAN{@nfu2}#} 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 Ql85}dPR1yP4Jb$d2O&5*WdHyG literal 17931 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 W5};szeg^;bck%TY2Iv2C_5T5<3-_=9 diff --git a/samples/templates/sampleSpreadsheet.php b/samples/templates/sampleSpreadsheet.php index 0785ed06..add7e58a 100644 --- a/samples/templates/sampleSpreadsheet.php +++ b/samples/templates/sampleSpreadsheet.php @@ -246,7 +246,7 @@ $spreadsheet->getActiveSheet()->getStyle('B1')->getProtection()->setLocked(Prote // Add a hyperlink to the sheet $helper->log('Add a hyperlink to an external website'); $spreadsheet->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); -$spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net'); +$spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('https://www.example.com'); $spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setTooltip('Navigate to website'); $spreadsheet->getActiveSheet()->getStyle('E26')->getAlignment()->setHorizontal(Alignment::HORIZONTAL_RIGHT); diff --git a/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php b/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php index 11d8c00c..b1337a0b 100644 --- a/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php +++ b/tests/PhpSpreadsheetTests/Cell/HyperlinkTest.php @@ -9,7 +9,7 @@ class HyperlinkTest extends TestCase { public function testGetUrl() { - $urlValue = 'http://www.phpexcel.net'; + $urlValue = 'https://www.example.com'; $testInstance = new Hyperlink($urlValue); @@ -19,7 +19,7 @@ class HyperlinkTest extends TestCase public function testSetUrl() { - $initialUrlValue = 'http://www.phpexcel.net'; + $initialUrlValue = 'https://www.example.com'; $newUrlValue = 'http://github.com/PHPOffice/PhpSpreadsheet'; $testInstance = new Hyperlink($initialUrlValue); @@ -55,7 +55,7 @@ class HyperlinkTest extends TestCase public function testIsInternal() { - $initialUrlValue = 'http://www.phpexcel.net'; + $initialUrlValue = 'https://www.example.com'; $newUrlValue = 'sheet://Worksheet1!A1'; $testInstance = new Hyperlink($initialUrlValue); @@ -69,9 +69,9 @@ class HyperlinkTest extends TestCase public function testGetHashCode() { - $urlValue = 'http://www.phpexcel.net'; + $urlValue = 'https://www.example.com'; $tooltipValue = 'PhpSpreadsheet Web Site'; - $initialExpectedHash = '6f1d4cbf40034b9ddc3fbf6019506e91'; + $initialExpectedHash = '3a8d5a682dba27276dce538c39402437'; $testInstance = new Hyperlink($urlValue, $tooltipValue); diff --git a/tests/PhpSpreadsheetTests/Reader/OdsTest.php b/tests/PhpSpreadsheetTests/Reader/OdsTest.php index b4f3e3fc..a6edaee2 100644 --- a/tests/PhpSpreadsheetTests/Reader/OdsTest.php +++ b/tests/PhpSpreadsheetTests/Reader/OdsTest.php @@ -16,7 +16,7 @@ class OdsTest extends TestCase /** * @var Spreadsheet */ - private $spreadsheetOOCalcTest; + private $spreadsheetOdsTest; /** * @var Spreadsheet @@ -26,17 +26,17 @@ class OdsTest extends TestCase /** * @return Spreadsheet */ - protected function loadOOCalcTestFile() + private function loadOdsTestFile() { - if (!$this->spreadsheetOOCalcTest) { + if (!$this->spreadsheetOdsTest) { $filename = __DIR__ . '/../../../samples/templates/OOCalcTest.ods'; // Load into this instance $reader = new Ods(); - $this->spreadsheetOOCalcTest = $reader->loadIntoExisting($filename, new Spreadsheet()); + $this->spreadsheetOdsTest = $reader->loadIntoExisting($filename, new Spreadsheet()); } - return $this->spreadsheetOOCalcTest; + return $this->spreadsheetOdsTest; } /** @@ -87,7 +87,7 @@ class OdsTest extends TestCase public function testReadValueAndComments() { - $spreadsheet = $this->loadOOCalcTestFile(); + $spreadsheet = $this->loadOdsTestFile(); $firstSheet = $spreadsheet->getSheet(0); @@ -152,7 +152,7 @@ class OdsTest extends TestCase public function testReadColors() { - $spreadsheet = $this->loadOOCalcTestFile(); + $spreadsheet = $this->loadOdsTestFile(); $firstSheet = $spreadsheet->getSheet(0); // Background color @@ -166,7 +166,7 @@ class OdsTest extends TestCase public function testReadRichText() { - $spreadsheet = $this->loadOOCalcTestFile(); + $spreadsheet = $this->loadOdsTestFile(); $firstSheet = $spreadsheet->getSheet(0); self::assertEquals( @@ -189,14 +189,14 @@ class OdsTest extends TestCase public function testReadHyperlinks() { - $spreadsheet = $this->loadOOCalcTestFile(); + $spreadsheet = $this->loadOdsTestFile(); $firstSheet = $spreadsheet->getSheet(0); $hyperlink = $firstSheet->getCell('A29'); self::assertEquals(DataType::TYPE_STRING, $hyperlink->getDataType()); - self::assertEquals('PHPExcel', $hyperlink->getValue()); - self::assertEquals('http://www.phpexcel.net/', $hyperlink->getHyperlink()->getUrl()); + self::assertEquals('PhpSpreadsheet', $hyperlink->getValue()); + self::assertEquals('https://github.com/PHPOffice/phpspreadsheet', $hyperlink->getHyperlink()->getUrl()); } // Below some test for features not implemented yet @@ -205,7 +205,7 @@ class OdsTest extends TestCase { $this->markTestIncomplete('Features not implemented yet'); - $spreadsheet = $this->loadOOCalcTestFile(); + $spreadsheet = $this->loadOdsTestFile(); $firstSheet = $spreadsheet->getSheet(0); // Font styles