Beispiel #1
0
 /**
  * Reads the styles.xml file and extract the relevant information from the file.
  *
  * @return void
  */
 protected function extractRelevantInfo()
 {
     $this->customNumberFormats = [];
     $this->stylesAttributes = [];
     $xmlReader = new XMLReader();
     if ($xmlReader->openFileInZip($this->filePath, self::STYLES_XML_FILE_PATH)) {
         while ($xmlReader->read()) {
             if ($xmlReader->isPositionedOnStartingNode(self::XML_NODE_NUM_FMTS)) {
                 $numFmtsNode = new SimpleXMLElement($xmlReader->readOuterXml());
                 $this->extractNumberFormats($numFmtsNode);
             } else {
                 if ($xmlReader->isPositionedOnStartingNode(self::XML_NODE_CELL_XFS)) {
                     $cellXfsNode = new SimpleXMLElement($xmlReader->readOuterXml());
                     $this->extractStyleAttributes($cellXfsNode);
                 }
             }
         }
         $xmlReader->close();
     }
 }
Beispiel #2
0
 /**
  * @param string $sheetId The sheet ID, as defined in "workbook.xml"
  * @return string The XML file path describing the sheet inside "workbook.xml.res", for the given sheet ID
  */
 protected function getSheetDataXMLFilePathForSheetId($sheetId)
 {
     $sheetDataXMLFilePath = '';
     // find the file path of the sheet, by looking at the "workbook.xml.res" file
     $xmlReader = new XMLReader();
     if ($xmlReader->openFileInZip($this->filePath, self::WORKBOOK_XML_RELS_FILE_PATH)) {
         while ($xmlReader->read()) {
             if ($xmlReader->isPositionedOnStartingNode('Relationship')) {
                 $relationshipSheetId = $xmlReader->getAttribute('Id');
                 if ($relationshipSheetId === $sheetId) {
                     // In workbook.xml.rels, it is only "worksheets/sheet1.xml"
                     // In [Content_Types].xml, the path is "/xl/worksheets/sheet1.xml"
                     $sheetDataXMLFilePath = $xmlReader->getAttribute('Target');
                     // sometimes, the sheet data file path already contains "/xl/"...
                     if (strpos($sheetDataXMLFilePath, '/xl/') !== 0) {
                         $sheetDataXMLFilePath = '/xl/' . $sheetDataXMLFilePath;
                         break;
                     }
                 }
             }
         }
         $xmlReader->close();
     }
     return $sheetDataXMLFilePath;
 }