RibbonTest.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
  3. use PhpOffice\PhpSpreadsheet\IOFactory;
  4. use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
  5. class RibbonTest extends AbstractFunctional
  6. {
  7. /**
  8. * Test read/rewrite spreadsheet with ribbon data.
  9. */
  10. public function testRibbon(): void
  11. {
  12. // The following file is downloaded, with the author's
  13. // permission, from:
  14. // https://www.rondebruin.nl/win/s2/win003.htm
  15. // It is renamed, including changing its extension to zip.
  16. $filename = 'tests/data/Reader/XLSX/ribbon.donotopen.zip';
  17. $reader = IOFactory::createReader('Xlsx');
  18. $spreadsheet = $reader->load($filename);
  19. self::assertTrue($spreadsheet->hasRibbon());
  20. $target = $spreadsheet->getRibbonXMLData('target');
  21. self::assertSame('customUI/customUI.xml', $target);
  22. $data = $spreadsheet->getRibbonXMLData('data');
  23. self::assertIsString($data);
  24. self::assertSame(1522, strlen(/** @scrutinizer ignore-type */ $data));
  25. $vbaCode = (string) $spreadsheet->getMacrosCode();
  26. self::assertSame(13312, strlen($vbaCode));
  27. self::assertNull($spreadsheet->getRibbonBinObjects());
  28. foreach (['names', 'data', 'xxxxx'] as $type) {
  29. self::assertNull($spreadsheet->getRibbonBinObjects($type), "Expecting null when type is $type");
  30. }
  31. self::assertEmpty($spreadsheet->getRibbonBinObjects('types'));
  32. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
  33. $spreadsheet->disconnectWorksheets();
  34. self::assertTrue($reloadedSpreadsheet->hasRibbon());
  35. $ribbonData = $reloadedSpreadsheet->getRibbonXmlData();
  36. self::assertIsArray($ribbonData);
  37. self::assertSame($target, $ribbonData['target'] ?? '');
  38. self::assertSame($data, $ribbonData['data'] ?? '');
  39. self::assertSame($vbaCode, $reloadedSpreadsheet->getMacrosCode());
  40. self::assertNull($reloadedSpreadsheet->getRibbonBinObjects());
  41. $reloadedSpreadsheet->disconnectWorksheets();
  42. }
  43. /**
  44. * Same as above but discard macros.
  45. */
  46. public function testDiscardMacros(): void
  47. {
  48. $filename = 'tests/data/Reader/XLSX/ribbon.donotopen.zip';
  49. $reader = IOFactory::createReader('Xlsx');
  50. $spreadsheet = $reader->load($filename);
  51. self::assertTrue($spreadsheet->hasRibbon());
  52. $target = $spreadsheet->getRibbonXMLData('target');
  53. self::assertSame('customUI/customUI.xml', $target);
  54. $data = $spreadsheet->getRibbonXMLData('data');
  55. self::assertIsString($data);
  56. self::assertSame(1522, strlen(/** @scrutinizer ignore-type */ $data));
  57. $vbaCode = (string) $spreadsheet->getMacrosCode();
  58. self::assertSame(13312, strlen($vbaCode));
  59. $spreadsheet->discardMacros();
  60. $reloadedSpreadsheet = $this->writeAndReload($spreadsheet, 'Xlsx');
  61. $spreadsheet->disconnectWorksheets();
  62. self::assertTrue($reloadedSpreadsheet->hasRibbon());
  63. $ribbonData = $reloadedSpreadsheet->getRibbonXmlData();
  64. self::assertIsArray($ribbonData);
  65. self::assertSame($target, $ribbonData['target'] ?? '');
  66. self::assertSame($data, $ribbonData['data'] ?? '');
  67. self::assertNull($reloadedSpreadsheet->getMacrosCode());
  68. self::assertNull($reloadedSpreadsheet->getRibbonBinObjects());
  69. $reloadedSpreadsheet->disconnectWorksheets();
  70. }
  71. }