Skip to content

Commit 90bdc7c

Browse files
authored
Test For Excel File Saved With Ribbon Data (#2883)
File from https://www.rondebruin.nl/win/s2/win003.htm. I have been in conversation with the author, who has no objection to its use. I have not actually opened the file in Excel (at least not with macros enabled); I am using it merely to demonstrate that the ribbon data is read and written correctly. Test added; no source code changed. This should slightly increase coverage for Reader/Xlsx (moderate), Writer/Xlsx (slight), and Spreadsheet (substantial). Note that this file has no Ribbon Bin objects, so some coverage is still lacking.
1 parent ed34a45 commit 90bdc7c

File tree

2 files changed

+47
-0
lines changed

2 files changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
4+
5+
use PhpOffice\PhpSpreadsheet\IOFactory;
6+
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
7+
8+
class RibbonTest extends AbstractFunctional
9+
{
10+
/**
11+
* Test read/rewrite spreadsheet with ribbon data.
12+
*/
13+
public function testRibbon(): void
14+
{
15+
// The following file is downloaded, with the author's
16+
// permission, from:
17+
// https://www.rondebruin.nl/win/s2/win003.htm
18+
// It is renamed, including changing its extension to zip.
19+
$filename = 'tests/data/Reader/XLSX/ribbon.donotopen.zip';
20+
$reader = IOFactory::createReader('Xlsx');
21+
$spreadsheet = $reader->load($filename);
22+
self::assertTrue($spreadsheet->hasRibbon());
23+
$target = $spreadsheet->getRibbonXMLData('target');
24+
self::assertSame('customUI/customUI.xml', $target);
25+
$data = $spreadsheet->getRibbonXMLData('data');
26+
self::assertIsString($data);
27+
self::assertSame(1522, strlen($data));
28+
$vbaCode = (string) $spreadsheet->getMacrosCode();
29+
self::assertSame(13312, strlen($vbaCode));
30+
self::assertNull($spreadsheet->getRibbonBinObjects());
31+
self::assertNull($spreadsheet->getRibbonBinObjects('names'));
32+
self::assertNull($spreadsheet->getRibbonBinObjects('data'));
33+
self::assertEmpty($spreadsheet->getRibbonBinObjects('types'));
34+
self::assertNull($spreadsheet->getRibbonBinObjects('xxxxx'));
35+
36+
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
37+
$spreadsheet->disconnectWorksheets();
38+
self::assertTrue($reloadedSpreadsheet->hasRibbon());
39+
$ribbonData = $reloadedSpreadsheet->getRibbonXmlData();
40+
self::assertIsArray($ribbonData);
41+
self::assertSame($target, $ribbonData['target'] ?? '');
42+
self::assertSame($data, $ribbonData['data'] ?? '');
43+
self::assertSame($vbaCode, $reloadedSpreadsheet->getMacrosCode());
44+
self::assertNull($reloadedSpreadsheet->getRibbonBinObjects());
45+
$reloadedSpreadsheet->disconnectWorksheets();
46+
}
47+
}
15 KB
Binary file not shown.

0 commit comments

Comments
 (0)