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.
This commit is contained in:
oleibman 2022-06-14 08:33:36 -07:00 committed by GitHub
parent ed34a45891
commit 90bdc7c12e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,47 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
class RibbonTest extends AbstractFunctional
{
/**
* Test read/rewrite spreadsheet with ribbon data.
*/
public function testRibbon(): void
{
// The following file is downloaded, with the author's
// permission, from:
// https://www.rondebruin.nl/win/s2/win003.htm
// It is renamed, including changing its extension to zip.
$filename = 'tests/data/Reader/XLSX/ribbon.donotopen.zip';
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($filename);
self::assertTrue($spreadsheet->hasRibbon());
$target = $spreadsheet->getRibbonXMLData('target');
self::assertSame('customUI/customUI.xml', $target);
$data = $spreadsheet->getRibbonXMLData('data');
self::assertIsString($data);
self::assertSame(1522, strlen($data));
$vbaCode = (string) $spreadsheet->getMacrosCode();
self::assertSame(13312, strlen($vbaCode));
self::assertNull($spreadsheet->getRibbonBinObjects());
self::assertNull($spreadsheet->getRibbonBinObjects('names'));
self::assertNull($spreadsheet->getRibbonBinObjects('data'));
self::assertEmpty($spreadsheet->getRibbonBinObjects('types'));
self::assertNull($spreadsheet->getRibbonBinObjects('xxxxx'));
$reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
$spreadsheet->disconnectWorksheets();
self::assertTrue($reloadedSpreadsheet->hasRibbon());
$ribbonData = $reloadedSpreadsheet->getRibbonXmlData();
self::assertIsArray($ribbonData);
self::assertSame($target, $ribbonData['target'] ?? '');
self::assertSame($data, $ribbonData['data'] ?? '');
self::assertSame($vbaCode, $reloadedSpreadsheet->getMacrosCode());
self::assertNull($reloadedSpreadsheet->getRibbonBinObjects());
$reloadedSpreadsheet->disconnectWorksheets();
}
}

Binary file not shown.