code: public function listWorksheetNames($pFilename)
      {
          File::assertFile($pFilename);
  
          $zip = new ZipArchive();
          if (!$zip->open($pFilename)) {
              throw new Exception('Could not open ' . $pFilename . ' for reading! Error opening file.');
          }
  
          $worksheetNames = [];
  
          $xml = new XMLReader();
          $xml->xml(
              $this->securityScanFile('zip://' . realpath($pFilename) . '#content.xml'),
              null,
              Settings::getLibXmlLoaderOptions()
          );
          $xml->setParserProperty(2, true);
  
          // Step into the first level of content of the XML
          $xml->read();
          while ($xml->read()) {
              // Quickly jump through to the office:body node
              while ($xml->name !== 'office:body') {
                  if ($xml->isEmptyElement) {
                      $xml->read();
                  } else {
                      $xml->next();
                  }
              }
              // Now read each node until we find our first table:table node
              while ($xml->read()) {
                  if ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT) {
                      // Loop through each table:table node reading the table:name attribute for each worksheet name
                      do {
                          $worksheetNames[] = $xml->getAttribute('table:name');
                          $xml->next();
                      } while ($xml->name == 'table:table' && $xml->nodeType == XMLReader::ELEMENT);
                  }
              }
          }
  
          return $worksheetNames;
      }
docs: Reads names of the worksheets from a file, without parsing the whole file to a PhpSpreadsheet object.
  
  @param string $pFilename
  
  @throws Exception
  
  @return string[]