code: public function writeWorkbook(Spreadsheet $spreadsheet, $recalcRequired = false)
      {
          // Create XML writer
          if ($this->getParentWriter()->getUseDiskCaching()) {
              $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
          } else {
              $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY);
          }
  
          // XML header
          $objWriter->startDocument('1.0', 'UTF-8', 'yes');
  
          // workbook
          $objWriter->startElement('workbook');
          $objWriter->writeAttribute('xml:space', 'preserve');
          $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
          $objWriter->writeAttribute('xmlns:r', 'http://schemas.openxmlformats.org/officeDocument/2006/relationships');
  
          // fileVersion
          $this->writeFileVersion($objWriter);
  
          // workbookPr
          $this->writeWorkbookPr($objWriter);
  
          // workbookProtection
          $this->writeWorkbookProtection($objWriter, $spreadsheet);
  
          // bookViews
          if ($this->getParentWriter()->getOffice2003Compatibility() === false) {
              $this->writeBookViews($objWriter, $spreadsheet);
          }
  
          // sheets
          $this->writeSheets($objWriter, $spreadsheet);
  
          // definedNames
          $this->writeDefinedNames($objWriter, $spreadsheet);
  
          // calcPr
          $this->writeCalcPr($objWriter, $recalcRequired);
  
          $objWriter->endElement();
  
          // Return
          return $objWriter->getData();
      }
docs: Write workbook to XML format.
  
  @param Spreadsheet $spreadsheet
  @param bool $recalcRequired Indicate whether formulas should be recalculated before writing
  
  @throws WriterException
  
  @return string XML Output