diff --git a/Classes/PHPExcel/Reader/CSV.php b/Classes/PHPExcel/Reader/CSV.php
index 127d4c0..8553a8b 100644
--- a/Classes/PHPExcel/Reader/CSV.php
+++ b/Classes/PHPExcel/Reader/CSV.php
@@ -109,6 +109,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
*/
private $_readFilter = null;
+
/**
* Create a new PHPExcel_Reader_CSV
*/
@@ -116,6 +117,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
} // function __construct()
+
/**
* Can the current PHPExcel_Reader_IReader read the file?
*
@@ -134,6 +136,126 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return true;
} // function canRead()
+
+ /**
+ * Read filter
+ *
+ * @access public
+ * @return PHPExcel_Reader_IReadFilter
+ */
+ public function getReadFilter() {
+ return $this->_readFilter;
+ } // function getReadFilter()
+
+
+ /**
+ * Set read filter
+ *
+ * @access public
+ * @param PHPExcel_Reader_IReadFilter $pValue
+ */
+ public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue) {
+ $this->_readFilter = $pValue;
+ return $this;
+ } // function setReadFilter()
+
+
+ /**
+ * Set input encoding
+ *
+ * @access public
+ * @param string $pValue Input encoding
+ */
+ public function setInputEncoding($pValue = 'UTF-8')
+ {
+ $this->_inputEncoding = $pValue;
+ return $this;
+ } // function setInputEncoding()
+
+
+ /**
+ * Get input encoding
+ *
+ * @access public
+ * @return string
+ */
+ public function getInputEncoding()
+ {
+ return $this->_inputEncoding;
+ } // function getInputEncoding()
+
+
+ /**
+ * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
+ *
+ * @access public
+ * @param string $pFilename
+ * @throws Exception
+ */
+ public function listWorksheetInfo($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ // Open file
+ $fileHandle = fopen($pFilename, 'r');
+ if ($fileHandle === false) {
+ throw new Exception("Could not open file " . $pFilename . " for reading.");
+ }
+
+ // Skip BOM, if any
+ switch ($this->_inputEncoding) {
+ case 'UTF-8':
+ fgets($fileHandle, 4) == "\xEF\xBB\xBF" ?
+ fseek($fileHandle, 3) : fseek($fileHandle, 0);
+ break;
+ case 'UTF-16LE':
+ fgets($fileHandle, 3) == "\xFF\xFE" ?
+ fseek($fileHandle, 2) : fseek($fileHandle, 0);
+ break;
+ case 'UTF-16BE':
+ fgets($fileHandle, 3) == "\xFE\xFF" ?
+ fseek($fileHandle, 2) : fseek($fileHandle, 0);
+ break;
+ case 'UTF-32LE':
+ fgets($fileHandle, 5) == "\xFF\xFE\x00\x00" ?
+ fseek($fileHandle, 4) : fseek($fileHandle, 0);
+ break;
+ case 'UTF-32BE':
+ fgets($fileHandle, 5) == "\x00\x00\xFE\xFF" ?
+ fseek($fileHandle, 4) : fseek($fileHandle, 0);
+ break;
+ default:
+ break;
+ }
+
+ $escapeEnclosures = array( "\\" . $this->_enclosure, $this->_enclosure . $this->_enclosure );
+
+ $worksheetInfo = array();
+ $worksheetInfo[0]['worksheetName'] = 'Worksheet';
+ $worksheetInfo[0]['lastColumnLetter'] = 'A';
+ $worksheetInfo[0]['lastColumnIndex'] = 0;
+ $worksheetInfo[0]['totalRows'] = 0;
+ $worksheetInfo[0]['totalColumns'] = 0;
+
+ // Loop through each line of the file in turn
+ while (($rowData = fgetcsv($fileHandle, 0, $this->_delimiter, $this->_enclosure)) !== FALSE) {
+ $worksheetInfo[0]['totalRows']++;
+ $worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], count($rowData) - 1);
+ }
+
+ $worksheetInfo[0]['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($worksheetInfo[0]['lastColumnIndex']);
+ $worksheetInfo[0]['totalColumns'] = $worksheetInfo[0]['lastColumnIndex'] + 1;
+
+ // Close file
+ fclose($fileHandle);
+
+ return $worksheetInfo;
+ }
+
+
/**
* Loads PHPExcel from file
*
@@ -151,49 +273,6 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this->loadIntoExisting($pFilename, $objPHPExcel);
} // function load()
- /**
- * Read filter
- *
- * @access public
- * @return PHPExcel_Reader_IReadFilter
- */
- public function getReadFilter() {
- return $this->_readFilter;
- } // function getReadFilter()
-
- /**
- * Set read filter
- *
- * @access public
- * @param PHPExcel_Reader_IReadFilter $pValue
- */
- public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue) {
- $this->_readFilter = $pValue;
- return $this;
- } // function setReadFilter()
-
- /**
- * Set input encoding
- *
- * @access public
- * @param string $pValue Input encoding
- */
- public function setInputEncoding($pValue = 'UTF-8')
- {
- $this->_inputEncoding = $pValue;
- return $this;
- } // function setInputEncoding()
-
- /**
- * Get input encoding
- *
- * @access public
- * @return string
- */
- public function getInputEncoding()
- {
- return $this->_inputEncoding;
- } // function getInputEncoding()
/**
* Loads PHPExcel from file into PHPExcel instance
@@ -296,6 +375,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $objPHPExcel;
} // function loadIntoExisting()
+
/**
* Get delimiter
*
@@ -306,6 +386,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this->_delimiter;
} // function getDelimiter()
+
/**
* Set delimiter
*
@@ -318,6 +399,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this;
} // function setDelimiter()
+
/**
* Get enclosure
*
@@ -328,6 +410,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this->_enclosure;
} // function getEnclosure()
+
/**
* Set enclosure
*
@@ -343,6 +426,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this;
} // function setEnclosure()
+
/**
* Get line ending
*
@@ -353,6 +437,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this->_lineEnding;
} // function getLineEnding()
+
/**
* Set line ending
*
@@ -365,6 +450,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this;
} // function setLineEnding()
+
/**
* Get sheet index
*
@@ -375,6 +461,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this->_sheetIndex;
} // function getSheetIndex()
+
/**
* Set sheet index
*
@@ -387,6 +474,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this;
} // function setSheetIndex()
+
/**
* Set Contiguous
*
@@ -403,6 +491,7 @@ class PHPExcel_Reader_CSV implements PHPExcel_Reader_IReader
return $this;
} // function setInputEncoding()
+
/**
* Get Contiguous
*
diff --git a/Classes/PHPExcel/Reader/Excel2003XML.php b/Classes/PHPExcel/Reader/Excel2003XML.php
index 642ec4c..4f6cfea 100644
--- a/Classes/PHPExcel/Reader/Excel2003XML.php
+++ b/Classes/PHPExcel/Reader/Excel2003XML.php
@@ -80,6 +80,14 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
private $_charSet = 'UTF-8';
+ /**
+ * Create a new PHPExcel_Reader_Excel2003XML
+ */
+ public function __construct() {
+ $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
+ }
+
+
/**
* Read data only?
*
@@ -89,6 +97,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this->_readDataOnly;
}
+
/**
* Set read data only
*
@@ -100,6 +109,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Get which sheets to load
*
@@ -110,6 +120,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this->_loadSheetsOnly;
}
+
/**
* Set which sheets to load
*
@@ -123,6 +134,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Set all sheets to load
*
@@ -134,6 +146,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Read filter
*
@@ -143,6 +156,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this->_readFilter;
}
+
/**
* Set read filter
*
@@ -154,12 +168,6 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this;
}
- /**
- * Create a new PHPExcel_Reader_Excel2003XML
- */
- public function __construct() {
- $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
- }
/**
* Can the current PHPExcel_Reader_IReader read the file?
@@ -171,15 +179,15 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
public function canRead($pFilename)
{
-// Office xmlns:o="urn:schemas-microsoft-com:office:office"
-// Excel xmlns:x="urn:schemas-microsoft-com:office:excel"
-// XML Spreadsheet xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
-// Spreadsheet component xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"
-// XML schema xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
-// XML data type xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
-// MS-persist recordset xmlns:rs="urn:schemas-microsoft-com:rowset"
-// Rowset xmlns:z="#RowsetSchema"
-//
+ // Office xmlns:o="urn:schemas-microsoft-com:office:office"
+ // Excel xmlns:x="urn:schemas-microsoft-com:office:excel"
+ // XML Spreadsheet xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
+ // Spreadsheet component xmlns:c="urn:schemas-microsoft-com:office:component:spreadsheet"
+ // XML schema xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
+ // XML data type xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
+ // MS-persist recordset xmlns:rs="urn:schemas-microsoft-com:rowset"
+ // Rowset xmlns:z="#RowsetSchema"
+ //
$signature = array(
'getNamespaces(true);
+
+ $worksheetID = 1;
+ $xml_ss = $xml->children($namespaces['ss']);
+ foreach($xml_ss->Worksheet as $worksheet) {
+ $worksheet_ss = $worksheet->attributes($namespaces['ss']);
+
+ $tmpInfo = array();
+ $tmpInfo['worksheetName'] = '';
+ $tmpInfo['lastColumnLetter'] = 'A';
+ $tmpInfo['lastColumnIndex'] = 0;
+ $tmpInfo['totalRows'] = 0;
+ $tmpInfo['totalColumns'] = 0;
+
+ if (isset($worksheet_ss['Name'])) {
+ $tmpInfo['worksheetName'] = (string) $worksheet_ss['Name'];
+ } else {
+ $tmpInfo['worksheetName'] = "Worksheet_{$worksheetID}";
+ }
+
+ if (isset($worksheet->Table->Row)) {
+ $rowIndex = 0;
+
+ foreach($worksheet->Table->Row as $rowData) {
+ $columnIndex = 0;
+ $rowHasData = false;
+
+ foreach($rowData->Cell as $cell) {
+ if (isset($cell->Data)) {
+ $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
+ $rowHasData = true;
+ }
+
+ ++$columnIndex;
+ }
+
+ ++$rowIndex;
+
+ if ($rowHasData) {
+ $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex);
+ }
+ }
+ }
+
+ $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
+ $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
+
+ $worksheetInfo[] = $tmpInfo;
+ ++$worksheetID;
+ }
+
+ return $worksheetInfo;
+ }
+
+
+ /**
* Loads PHPExcel from file
*
* @param string $pFilename
@@ -261,6 +341,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $this->loadIntoExisting($pFilename, $objPHPExcel);
}
+
private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) {
$styleAttributeValue = strtolower($styleAttributeValue);
foreach($styleList as $style) {
@@ -272,6 +353,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return false;
}
+
/**
* pixel units to excel width units(units of 1/256th of a character width)
* @param pxs
@@ -285,6 +367,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $widthUnits;
}
+
/**
* excel width units(units of 1/256th of a character width) to pixel units
* @param widthUnits
@@ -302,6 +385,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return chr(hexdec($hex[1]));
}
+
/**
* Loads PHPExcel from file into PHPExcel instance
*
@@ -802,6 +886,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $objPHPExcel;
}
+
private static function _convertStringEncoding($string,$charset) {
if ($charset != 'UTF-8') {
return PHPExcel_Shared_String::ConvertEncoding($string,'UTF-8',$charset);
@@ -809,6 +894,7 @@ class PHPExcel_Reader_Excel2003XML implements PHPExcel_Reader_IReader
return $string;
}
+
private function _parseRichText($is = '') {
$value = new PHPExcel_RichText();
diff --git a/Classes/PHPExcel/Reader/Excel2007.php b/Classes/PHPExcel/Reader/Excel2007.php
index 8e4068f..af796f6 100644
--- a/Classes/PHPExcel/Reader/Excel2007.php
+++ b/Classes/PHPExcel/Reader/Excel2007.php
@@ -91,6 +91,15 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
private static $_theme = null;
+ /**
+ * Create a new PHPExcel_Reader_Excel2007 instance
+ */
+ public function __construct() {
+ $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
+ $this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance();
+ }
+
+
/**
* Read data only?
* If this is true, then the Reader will only read data values for cells, it will not read any formatting information.
@@ -102,6 +111,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this->_readDataOnly;
}
+
/**
* Set read data only
* Set to true, to advise the Reader only to read data values for cells, and to ignore any formatting information.
@@ -115,6 +125,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
$this->_readDataOnly = $pValue;
return $this;
}
+
/**
* Read charts in workbook?
@@ -128,6 +139,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this->_includeCharts;
}
+
/**
* Set read charts in workbook
* Set to true, to advise the Reader to include any charts that exist in the workbook.
@@ -143,6 +155,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Get which sheets to load
* Returns either an array of worksheet names (the list of worksheets that should be loaded), or a null
@@ -155,6 +168,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this->_loadSheetsOnly;
}
+
/**
* Set which sheets to load
*
@@ -171,6 +185,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Set all sheets to load
* Tells the Reader to load all worksheets from the workbook.
@@ -183,6 +198,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Read filter
*
@@ -192,6 +208,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this->_readFilter;
}
+
/**
* Set read filter
*
@@ -203,13 +220,6 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $this;
}
- /**
- * Create a new PHPExcel_Reader_Excel2007 instance
- */
- public function __construct() {
- $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
- $this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance();
- }
/**
* Can the current PHPExcel_Reader_IReader read the file?
@@ -254,6 +264,82 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $xl;
}
+
+ /**
+ * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
+ *
+ * @param string $pFilename
+ * @throws Exception
+ */
+ public function listWorksheetInfo($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ $worksheetInfo = array();
+
+ $zip = new ZipArchive;
+ $zip->open($pFilename);
+
+ $rels = simplexml_load_string($this->_getFromZipArchive($zip, "_rels/.rels")); //~ http://schemas.openxmlformats.org/package/2006/relationships");
+ foreach ($rels->Relationship as $rel) {
+ if ($rel["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument") {
+ $dir = dirname($rel["Target"]);
+ $relsWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/_rels/" . basename($rel["Target"]) . ".rels")); //~ http://schemas.openxmlformats.org/package/2006/relationships");
+ $relsWorkbook->registerXPathNamespace("rel", "http://schemas.openxmlformats.org/package/2006/relationships");
+
+ $worksheets = array();
+ foreach ($relsWorkbook->Relationship as $ele) {
+ if ($ele["Type"] == "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet") {
+ $worksheets[(string) $ele["Id"]] = $ele["Target"];
+ }
+ }
+
+ $xmlWorkbook = simplexml_load_string($this->_getFromZipArchive($zip, "{$rel['Target']}")); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
+ if ($xmlWorkbook->sheets) {
+ $dir = dirname($rel["Target"]);
+ foreach ($xmlWorkbook->sheets->sheet as $eleSheet) {
+ $tmpInfo = array();
+ $tmpInfo['worksheetName'] = (string) $eleSheet["name"];
+ $tmpInfo['lastColumnLetter'] = 'A';
+ $tmpInfo['lastColumnIndex'] = 0;
+ $tmpInfo['totalRows'] = 0;
+ $tmpInfo['totalColumns'] = 0;
+
+ $fileWorksheet = $worksheets[(string) self::array_item($eleSheet->attributes("http://schemas.openxmlformats.org/officeDocument/2006/relationships"), "id")];
+ $xmlSheet = simplexml_load_string($this->_getFromZipArchive($zip, "$dir/$fileWorksheet")); //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main");
+ if ($xmlSheet && $xmlSheet->sheetData && $xmlSheet->sheetData->row) {
+ foreach ($xmlSheet->sheetData->row as $row) {
+ foreach ($row->c as $c) {
+ $r = (string) $c["r"];
+ $coordinates = PHPExcel_Cell::coordinateFromString($r);
+
+ $rowIndex = $coordinates[1];
+ $columnIndex = PHPExcel_Cell::columnIndexFromString($coordinates[0]) - 1;
+
+ $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex);
+ $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
+ }
+ }
+ }
+
+ $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
+ $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
+
+ $worksheetInfo[] = $tmpInfo;
+ }
+ }
+ }
+ }
+
+ $zip->close();
+
+ return $worksheetInfo;
+ }
+
+
private static function _castToBool($c) {
// echo 'Initial Cast to Boolean
';
$value = isset($c->v) ? (string) $c->v : null;
@@ -267,16 +353,19 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $value;
} // function _castToBool()
+
private static function _castToError($c) {
// echo 'Initial Cast to Error
';
return isset($c->v) ? (string) $c->v : null;;
} // function _castToError()
+
private static function _castToString($c) {
// echo 'Initial Cast to String
';
return isset($c->v) ? (string) $c->v : null;;
} // function _castToString()
+
private function _castToFormula($c,$r,&$cellDataType,&$value,&$calculatedValue,&$sharedFormulas,$castBaseType) {
// echo 'Formula
';
// echo '$c->f is '.$c->f.'
';
@@ -325,6 +414,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
}
}
+
public function _getFromZipArchive(ZipArchive $archive, $fileName = '')
{
// Root-relative paths
@@ -344,6 +434,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $contents;
}
+
/**
* Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object
*
@@ -1639,6 +1730,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $excel;
}
+
private static function _readColor($color, $background=false) {
if (isset($color["rgb"])) {
@@ -1662,6 +1754,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return 'FF000000';
}
+
private static function _readStyle($docStyle, $style) {
// format code
if (isset($style->numFmt)) {
@@ -1788,6 +1881,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
}
}
}
+
private static function _readBorder($docBorder, $eleBorder) {
if (isset($eleBorder["style"])) {
@@ -1798,6 +1892,7 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
}
}
+
private function _parseRichText($is = null) {
$value = new PHPExcel_RichText();
@@ -1860,14 +1955,17 @@ class PHPExcel_Reader_Excel2007 implements PHPExcel_Reader_IReader
return $value;
}
+
private static function array_item($array, $key = 0) {
return (isset($array[$key]) ? $array[$key] : null);
}
+
private static function dir_add($base, $add) {
return preg_replace('~[^/]+/\.\./~', '', dirname($base) . "/$add");
}
+
private static function toCSSArray($style) {
$style = str_replace(array("\r","\n"), "", $style);
diff --git a/Classes/PHPExcel/Reader/Excel5.php b/Classes/PHPExcel/Reader/Excel5.php
index 2190782..7862eda 100644
--- a/Classes/PHPExcel/Reader/Excel5.php
+++ b/Classes/PHPExcel/Reader/Excel5.php
@@ -158,6 +158,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
const XLS_Type_XFEXT = 0x087d;
const XLS_Type_UNKNOWN = 0xffff;
+
/**
* Read data only?
* Identifies whether the Reader should only read data values for cells, and ignore any formatting information;
@@ -402,6 +403,14 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
private $_sharedFormulaParts;
+ /**
+ * Create a new PHPExcel_Reader_Excel5 instance
+ */
+ public function __construct() {
+ $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
+ }
+
+
/**
* Read data only?
* If this is true, then the Reader will only read data values for cells, it will not read any formatting information.
@@ -414,6 +423,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this->_readDataOnly;
}
+
/**
* Set read data only
* Set to true, to advise the Reader only to read data values for cells, and to ignore any formatting information.
@@ -429,6 +439,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Get which sheets to load
* Returns either an array of worksheet names (the list of worksheets that should be loaded), or a null
@@ -441,6 +452,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this->_loadSheetsOnly;
}
+
/**
* Set which sheets to load
*
@@ -457,6 +469,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Set all sheets to load
* Tells the Reader to load all worksheets from the workbook.
@@ -469,6 +482,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Read filter
*
@@ -478,6 +492,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this->_readFilter;
}
+
/**
* Set read filter
*
@@ -489,12 +504,6 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this;
}
- /**
- * Create a new PHPExcel_Reader_Excel5 instance
- */
- public function __construct() {
- $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
- }
/**
* Can the current PHPExcel_Reader_IReader read the file?
@@ -523,6 +532,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object
*
@@ -572,6 +582,100 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+ /**
+ * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
+ *
+ * @param string $pFilename
+ * @throws Exception
+ */
+ public function listWorksheetInfo($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ $worksheetInfo = array();
+
+ // Read the OLE file
+ $this->_loadOLE($pFilename);
+
+ // total byte size of Excel data (workbook global substream + sheet substreams)
+ $this->_dataSize = strlen($this->_data);
+
+ // initialize
+ $this->_pos = 0;
+ $this->_sheets = array();
+
+ // Parse Workbook Global Substream
+ while ($this->_pos < $this->_dataSize) {
+ $code = self::_GetInt2d($this->_data, $this->_pos);
+
+ switch ($code) {
+ case self::XLS_Type_BOF: $this->_readBof(); break;
+ case self::XLS_Type_SHEET: $this->_readSheet(); break;
+ case self::XLS_Type_EOF: $this->_readDefault(); break 2;
+ default: $this->_readDefault(); break;
+ }
+ }
+
+ // Parse the individual sheets
+ foreach ($this->_sheets as $sheet) {
+
+ if ($sheet['sheetType'] != 0x00) {
+ // 0x00: Worksheet
+ // 0x02: Chart
+ // 0x06: Visual Basic module
+ continue;
+ }
+
+ $tmpInfo = array();
+ $tmpInfo['worksheetName'] = $sheet['name'];
+ $tmpInfo['lastColumnLetter'] = 'A';
+ $tmpInfo['lastColumnIndex'] = 0;
+ $tmpInfo['totalRows'] = 0;
+ $tmpInfo['totalColumns'] = 0;
+
+ $this->_pos = $sheet['offset'];
+
+ while ($this->_pos <= $this->_dataSize - 4) {
+ $code = self::_GetInt2d($this->_data, $this->_pos);
+
+ switch ($code) {
+ case self::XLS_Type_RK:
+ case self::XLS_Type_LABELSST:
+ case self::XLS_Type_NUMBER:
+ case self::XLS_Type_FORMULA:
+ case self::XLS_Type_BOOLERR:
+ case self::XLS_Type_LABEL:
+ $length = self::_GetInt2d($this->_data, $this->_pos + 2);
+ $recordData = substr($this->_data, $this->_pos + 4, $length);
+
+ // move stream pointer to next record
+ $this->_pos += 4 + $length;
+
+ $rowIndex = self::_GetInt2d($recordData, 0) + 1;
+ $columnIndex = self::_GetInt2d($recordData, 2);
+
+ $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex);
+ $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
+ break;
+ case self::XLS_Type_BOF: $this->_readBof(); break;
+ case self::XLS_Type_EOF: $this->_readDefault(); break 2;
+ default: $this->_readDefault(); break;
+ }
+ }
+
+ $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
+ $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
+
+ $worksheetInfo[] = $tmpInfo;
+ }
+
+ return $worksheetInfo;
+ }
+
+
/**
* Loads PHPExcel from file
*
@@ -1064,6 +1168,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this->_phpExcel;
}
+
/**
* Use OLE reader to extract the relevant data streams from the OLE file
*
@@ -1089,6 +1194,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// $this->_userDefinedProperties = $ole->getUserDefinedProperties();
}
+
/**
* Read summary information
*/
@@ -1248,6 +1354,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read additional document summary information
*/
@@ -1406,6 +1513,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Reads a general type of BIFF record. Does nothing except for moving stream pointer forward to next record.
*/
@@ -1482,6 +1590,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+
/**
* The TEXT Object record contains the text associated with a cell annotation.
*/
@@ -1521,6 +1630,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// echo '
';
}
+
/**
* Read BOF
*/
@@ -1560,6 +1670,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* FILEPASS
*
@@ -1582,6 +1693,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
throw new Exception('Cannot read encrypted file');
}
+
/**
* CODEPAGE
*
@@ -1605,6 +1717,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_codepage = PHPExcel_Shared_CodePage::NumberToName($codepage);
}
+
/**
* DATEMODE
*
@@ -1632,6 +1745,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read a FONT record
*/
@@ -1718,6 +1832,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* FORMAT
*
@@ -1755,6 +1870,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* XF - Extended Format
*
@@ -2048,6 +2164,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
*
*/
@@ -2224,6 +2341,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+
/**
* Read STYLE record
*/
@@ -2264,6 +2382,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read PALETTE record
*/
@@ -2287,6 +2406,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* SHEET
*
@@ -2338,6 +2458,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Read EXTERNALBOOK record
*/
@@ -2401,6 +2522,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read EXTERNNAME record.
*/
@@ -2435,6 +2557,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read EXTERNSHEET record
*/
@@ -2463,6 +2586,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* DEFINEDNAME
*
@@ -2525,6 +2649,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read MSODRAWINGGROUP record
*/
@@ -2539,6 +2664,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_drawingGroupData .= $recordData;
}
+
/**
* SST - Shared String Table
*
@@ -2730,6 +2856,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// _getSplicedRecordData() takes care of moving current position in data stream
}
+
/**
* Read PRINTGRIDLINES record
*/
@@ -2748,6 +2875,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read DEFAULTROWHEIGHT record
*/
@@ -2765,6 +2893,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_phpSheet->getDefaultRowDimension()->setRowHeight($height / 20);
}
+
/**
* Read SHEETPR record
*/
@@ -2791,6 +2920,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_isFitToPages = (bool) ((0x0100 & self::_GetInt2d($recordData, 0)) >> 8);
}
+
/**
* Read HORIZONTALPAGEBREAKS record
*/
@@ -2819,6 +2949,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read VERTICALPAGEBREAKS record
*/
@@ -2846,6 +2977,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read HEADER record
*/
@@ -2873,6 +3005,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read FOOTER record
*/
@@ -2899,6 +3032,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read HCENTER record
*/
@@ -2918,6 +3052,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read VCENTER record
*/
@@ -2937,6 +3072,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read LEFTMARGIN record
*/
@@ -2954,6 +3090,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read RIGHTMARGIN record
*/
@@ -2971,6 +3108,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read TOPMARGIN record
*/
@@ -2988,6 +3126,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read BOTTOMMARGIN record
*/
@@ -3005,6 +3144,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read PAGESETUP record
*/
@@ -3061,6 +3201,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* PROTECT - Sheet protection (BIFF2 through BIFF8)
* if this record is omitted, then it also means no sheet protection
@@ -3084,6 +3225,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_phpSheet->getProtection()->setSheet((bool)$bool);
}
+
/**
* SCENPROTECT
*/
@@ -3107,6 +3249,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_phpSheet->getProtection()->setScenarios((bool)$bool);
}
+
/**
* OBJECTPROTECT
*/
@@ -3130,6 +3273,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_phpSheet->getProtection()->setObjects((bool)$bool);
}
+
/**
* PASSWORD - Sheet protection (hashed) password (BIFF2 through BIFF8)
*/
@@ -3148,6 +3292,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read DEFCOLWIDTH record
*/
@@ -3166,6 +3311,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read COLINFO record
*/
@@ -3217,6 +3363,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* ROW
*
@@ -3245,15 +3392,15 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// offset: 6; size: 2;
- // bit: 14-0; mask: 0x7FFF; height of the row, in twips = 1/20 of a point
- $height = (0x7FFF & self::_GetInt2d($recordData, 6)) >> 0;
+ // bit: 14-0; mask: 0x7FFF; height of the row, in twips = 1/20 of a point
+ $height = (0x7FFF & self::_GetInt2d($recordData, 6)) >> 0;
- // bit: 15: mask: 0x8000; 0 = row has custom height; 1= row has default height
- $useDefaultHeight = (0x8000 & self::_GetInt2d($recordData, 6)) >> 15;
+ // bit: 15: mask: 0x8000; 0 = row has custom height; 1= row has default height
+ $useDefaultHeight = (0x8000 & self::_GetInt2d($recordData, 6)) >> 15;
- if (!$useDefaultHeight) {
- $this->_phpSheet->getRowDimension($r + 1)->setRowHeight($height / 20);
- }
+ if (!$useDefaultHeight) {
+ $this->_phpSheet->getRowDimension($r + 1)->setRowHeight($height / 20);
+ }
// offset: 8; size: 2; not used
@@ -3261,30 +3408,31 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// offset: 12; size: 4; option flags and default row formatting
- // bit: 2-0: mask: 0x00000007; outline level of the row
- $level = (0x00000007 & self::_GetInt4d($recordData, 12)) >> 0;
- $this->_phpSheet->getRowDimension($r + 1)->setOutlineLevel($level);
+ // bit: 2-0: mask: 0x00000007; outline level of the row
+ $level = (0x00000007 & self::_GetInt4d($recordData, 12)) >> 0;
+ $this->_phpSheet->getRowDimension($r + 1)->setOutlineLevel($level);
- // bit: 4; mask: 0x00000010; 1 = outline group start or ends here... and is collapsed
- $isCollapsed = (0x00000010 & self::_GetInt4d($recordData, 12)) >> 4;
- $this->_phpSheet->getRowDimension($r + 1)->setCollapsed($isCollapsed);
+ // bit: 4; mask: 0x00000010; 1 = outline group start or ends here... and is collapsed
+ $isCollapsed = (0x00000010 & self::_GetInt4d($recordData, 12)) >> 4;
+ $this->_phpSheet->getRowDimension($r + 1)->setCollapsed($isCollapsed);
- // bit: 5; mask: 0x00000020; 1 = row is hidden
- $isHidden = (0x00000020 & self::_GetInt4d($recordData, 12)) >> 5;
- $this->_phpSheet->getRowDimension($r + 1)->setVisible(!$isHidden);
+ // bit: 5; mask: 0x00000020; 1 = row is hidden
+ $isHidden = (0x00000020 & self::_GetInt4d($recordData, 12)) >> 5;
+ $this->_phpSheet->getRowDimension($r + 1)->setVisible(!$isHidden);
- // bit: 7; mask: 0x00000080; 1 = row has explicit format
- $hasExplicitFormat = (0x00000080 & self::_GetInt4d($recordData, 12)) >> 7;
+ // bit: 7; mask: 0x00000080; 1 = row has explicit format
+ $hasExplicitFormat = (0x00000080 & self::_GetInt4d($recordData, 12)) >> 7;
- // bit: 27-16; mask: 0x0FFF0000; only applies when hasExplicitFormat = 1; index to XF record
- $xfIndex = (0x0FFF0000 & self::_GetInt4d($recordData, 12)) >> 16;
+ // bit: 27-16; mask: 0x0FFF0000; only applies when hasExplicitFormat = 1; index to XF record
+ $xfIndex = (0x0FFF0000 & self::_GetInt4d($recordData, 12)) >> 16;
- if ($hasExplicitFormat) {
- $this->_phpSheet->getRowDimension($r + 1)->setXfIndex($this->_mapCellXfIndex[$xfIndex]);
- }
+ if ($hasExplicitFormat) {
+ $this->_phpSheet->getRowDimension($r + 1)->setXfIndex($this->_mapCellXfIndex[$xfIndex]);
+ }
}
}
+
/**
* Read RK record
* This record represents a cell that contains an RK value
@@ -3331,6 +3479,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read LABELSST record
* This record represents a cell that contains a string. It
@@ -3409,6 +3558,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read MULRK record
* This record represents a cell range containing RK value
@@ -3463,6 +3613,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read NUMBER record
* This record represents a cell that contains a
@@ -3504,6 +3655,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read FORMULA record + perhaps a following STRING record if formula result is a string
* This record contains the token array and the result of a
@@ -3647,6 +3799,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read a SHAREDFMLA record. This function just stores the binary shared formula in the reader,
* which usually contains relative references.
@@ -3677,6 +3830,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+
/**
* Read a STRING record from current stream position and advance the stream pointer to next record
* This record is used for storing result from FORMULA record when it is a string, and
@@ -3703,6 +3857,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $value;
}
+
/**
* Read BOOLERR record
* This record represents a Boolean value or error value
@@ -3761,6 +3916,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read MULBLANK record
* This record represents a cell range of empty cells. All
@@ -3800,6 +3956,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// offset: 6; size 2; index to last column (not needed)
}
+
/**
* Read LABEL record
* This record represents a cell that contains a string. In
@@ -3849,6 +4006,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read BLANK record
*/
@@ -3880,6 +4038,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+
/**
* Read MSODRAWING record
*/
@@ -3894,6 +4053,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_drawingData .= $recordData;
}
+
/**
* Read OBJ record
*/
@@ -3938,6 +4098,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// echo '
';
}
+
/**
* Read WINDOW2 record
*/
@@ -3973,6 +4134,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read SCL record
*/
@@ -3994,6 +4156,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_phpSheet->getSheetView()->setZoomScale($numerator * 100 / $denumerator);
}
+
/**
* Read PANE record
*/
@@ -4021,6 +4184,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read SELECTION record. There is one such record for each pane in the sheet.
*/
@@ -4071,6 +4235,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
private function _includeCellRangeFiltered($cellRangeAddress)
{
$includeCellRange = true;
@@ -4090,6 +4255,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $includeCellRange;
}
+
/**
* MERGEDCELLS
*
@@ -4117,6 +4283,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read HYPERLINK record
*/
@@ -4292,6 +4459,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read DATAVALIDATIONS record
*/
@@ -4304,6 +4472,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
$this->_pos += 4 + $length;
}
+
/**
* Read DATAVALIDATION record
*/
@@ -4463,6 +4632,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+
/**
* Read SHEETLAYOUT record. Stores sheet tab color information.
*/
@@ -4502,6 +4672,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read SHEETPROTECTION record (FEATHEADR)
*/
@@ -4600,6 +4771,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// offset: 21; size: 2; not used
}
+
/**
* Read RANGEPROTECTION record
* Reading of this record is based on Microsoft Office Excel 97-2000 Binary File Format Specification,
@@ -4662,6 +4834,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Read IMDATA record
*/
@@ -4742,6 +4915,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// _getSplicedRecordData() takes care of moving current position in data stream
}
+
/**
* Read a free CONTINUE record. Free CONTINUE record may be a camouflaged MSODRAWING record
* When MSODRAWING data on a sheet exceeds 8224 bytes, CONTINUE records are used instead. Undocumented.
@@ -4833,6 +5007,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
+
/**
* Convert formula structure into human readable Excel formula like 'A3+A5*5'
*
@@ -4871,6 +5046,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $this->_getFormulaFromData($formulaData, $additionalData, $baseCell);
}
+
/**
* Take formula data and additional data for formula and return human readable formula
*
@@ -4897,6 +5073,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $formulaString;
}
+
/**
* Take array of tokens together with additional data for formula and return human readable formula
*
@@ -5060,6 +5237,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $formulaString;
}
+
/**
* Fetch next token from binary formula data
*
@@ -5625,6 +5803,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Reads a cell address in BIFF8 e.g. 'A2' or '$A$2'
* section 3.3.4
@@ -5654,6 +5833,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $column . $row;
}
+
/**
* Reads a cell address in BIFF8 for shared formulas. Uses positive and negative values for row and column
* to indicate offsets from a base cell
@@ -5697,6 +5877,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $column . $row;
}
+
/**
* Reads a cell range address in BIFF5 e.g. 'A2:B6' or 'A1'
* always fixed range
@@ -5735,6 +5916,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return "$fc$fr:$lc$lr";
}
+
/**
* Reads a cell range address in BIFF8 e.g. 'A2:B6' or 'A1'
* always fixed range
@@ -5773,6 +5955,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return "$fc$fr:$lc$lr";
}
+
/**
* Reads a cell range address in BIFF8 e.g. 'A2:B6' or '$A$2:$B$6'
* there are flags indicating whether column/row index is relative
@@ -5794,37 +5977,38 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// offset: 4; size: 2; index to first column or column offset + relative flags
- // bit: 7-0; mask 0x00FF; column index
- $fc = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($subData, 4));
+ // bit: 7-0; mask 0x00FF; column index
+ $fc = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($subData, 4));
- // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
- if (!(0x4000 & self::_GetInt2d($subData, 4))) {
- $fc = '$' . $fc;
- }
+ // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
+ if (!(0x4000 & self::_GetInt2d($subData, 4))) {
+ $fc = '$' . $fc;
+ }
- // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
- if (!(0x8000 & self::_GetInt2d($subData, 4))) {
- $fr = '$' . $fr;
- }
+ // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
+ if (!(0x8000 & self::_GetInt2d($subData, 4))) {
+ $fr = '$' . $fr;
+ }
// offset: 6; size: 2; index to last column or column offset + relative flags
- // bit: 7-0; mask 0x00FF; column index
- $lc = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($subData, 6));
+ // bit: 7-0; mask 0x00FF; column index
+ $lc = PHPExcel_Cell::stringFromColumnIndex(0x00FF & self::_GetInt2d($subData, 6));
- // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
- if (!(0x4000 & self::_GetInt2d($subData, 6))) {
- $lc = '$' . $lc;
- }
+ // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
+ if (!(0x4000 & self::_GetInt2d($subData, 6))) {
+ $lc = '$' . $lc;
+ }
- // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
- if (!(0x8000 & self::_GetInt2d($subData, 6))) {
- $lr = '$' . $lr;
- }
+ // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
+ if (!(0x8000 & self::_GetInt2d($subData, 6))) {
+ $lr = '$' . $lr;
+ }
return "$fc$fr:$lc$lr";
}
+
/**
* Reads a cell range address in BIFF8 for shared formulas. Uses positive and negative values for row and column
* to indicate offsets from a base cell
@@ -5850,63 +6034,64 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
// offset: 4; size: 2; first column with relative/absolute flags
- // bit: 7-0; mask 0x00FF; column index
- $fcIndex = 0x00FF & self::_GetInt2d($subData, 4);
+ // bit: 7-0; mask 0x00FF; column index
+ $fcIndex = 0x00FF & self::_GetInt2d($subData, 4);
- // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
- if (!(0x4000 & self::_GetInt2d($subData, 4))) {
- // absolute column index
- $fc = PHPExcel_Cell::stringFromColumnIndex($fcIndex);
- $fc = '$' . $fc;
- } else {
- // column offset
- $fcIndex = ($fcIndex <= 127) ? $fcIndex : $fcIndex - 256;
- $fc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $fcIndex);
- }
+ // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
+ if (!(0x4000 & self::_GetInt2d($subData, 4))) {
+ // absolute column index
+ $fc = PHPExcel_Cell::stringFromColumnIndex($fcIndex);
+ $fc = '$' . $fc;
+ } else {
+ // column offset
+ $fcIndex = ($fcIndex <= 127) ? $fcIndex : $fcIndex - 256;
+ $fc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $fcIndex);
+ }
- // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
- if (!(0x8000 & self::_GetInt2d($subData, 4))) {
- // absolute row index
- $fr = $frIndex + 1;
- $fr = '$' . $fr;
- } else {
- // row offset
- $frIndex = ($frIndex <= 32767) ? $frIndex : $frIndex - 65536;
- $fr = $baseRow + $frIndex;
- }
+ // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
+ if (!(0x8000 & self::_GetInt2d($subData, 4))) {
+ // absolute row index
+ $fr = $frIndex + 1;
+ $fr = '$' . $fr;
+ } else {
+ // row offset
+ $frIndex = ($frIndex <= 32767) ? $frIndex : $frIndex - 65536;
+ $fr = $baseRow + $frIndex;
+ }
// offset: 6; size: 2; last column with relative/absolute flags
- // bit: 7-0; mask 0x00FF; column index
- $lcIndex = 0x00FF & self::_GetInt2d($subData, 6);
+ // bit: 7-0; mask 0x00FF; column index
+ $lcIndex = 0x00FF & self::_GetInt2d($subData, 6);
+ $lcIndex = ($lcIndex <= 127) ? $lcIndex : $lcIndex - 256;
+ $lc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $lcIndex);
+
+ // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
+ if (!(0x4000 & self::_GetInt2d($subData, 6))) {
+ // absolute column index
+ $lc = PHPExcel_Cell::stringFromColumnIndex($lcIndex);
+ $lc = '$' . $lc;
+ } else {
+ // column offset
$lcIndex = ($lcIndex <= 127) ? $lcIndex : $lcIndex - 256;
$lc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $lcIndex);
+ }
- // bit: 14; mask 0x4000; (1 = relative column index, 0 = absolute column index)
- if (!(0x4000 & self::_GetInt2d($subData, 6))) {
- // absolute column index
- $lc = PHPExcel_Cell::stringFromColumnIndex($lcIndex);
- $lc = '$' . $lc;
- } else {
- // column offset
- $lcIndex = ($lcIndex <= 127) ? $lcIndex : $lcIndex - 256;
- $lc = PHPExcel_Cell::stringFromColumnIndex($baseCol + $lcIndex);
- }
-
- // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
- if (!(0x8000 & self::_GetInt2d($subData, 6))) {
- // absolute row index
- $lr = $lrIndex + 1;
- $lr = '$' . $lr;
- } else {
- // row offset
- $lrIndex = ($lrIndex <= 32767) ? $lrIndex : $lrIndex - 65536;
- $lr = $baseRow + $lrIndex;
- }
+ // bit: 15; mask 0x8000; (1 = relative row index, 0 = absolute row index)
+ if (!(0x8000 & self::_GetInt2d($subData, 6))) {
+ // absolute row index
+ $lr = $lrIndex + 1;
+ $lr = '$' . $lr;
+ } else {
+ // row offset
+ $lrIndex = ($lrIndex <= 32767) ? $lrIndex : $lrIndex - 65536;
+ $lr = $baseRow + $lrIndex;
+ }
return "$fc$fr:$lc$lr";
}
+
/**
* Read BIFF8 cell range address list
* section 2.5.15
@@ -5934,6 +6119,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Read BIFF5 cell range address list
* section 2.5.15
@@ -5961,6 +6147,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Get a sheet range like Sheet1:Sheet3 from REF index
* Note: If there is only one sheet in the range, one gets e.g Sheet1
@@ -6018,6 +6205,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return false;
}
+
/**
* read BIFF8 constant value array from array data
* returns e.g. array('value' => '{1,2;3,4}', 'size' => 40}
@@ -6056,6 +6244,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* read BIFF8 constant value which may be 'Empty Value', 'Number', 'String Value', 'Boolean Value', 'Error Value'
* section 2.5.7
@@ -6106,6 +6295,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Extract RGB color
* OpenOffice.org's Documentation of the Microsoft Excel File Format, section 2.5.4
@@ -6130,6 +6320,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return array('rgb' => $rgb);
}
+
/**
* Read byte string (8-bit string length)
* OpenOffice documentation: 2.5.2
@@ -6151,6 +6342,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Read byte string (16-bit string length)
* OpenOffice documentation: 2.5.2
@@ -6173,6 +6365,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Extracts an Excel Unicode short string (8-bit string length)
* OpenOffice documentation: 2.5.3
@@ -6196,6 +6389,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $string;
}
+
/**
* Extracts an Excel Unicode long string (16-bit string length)
* OpenOffice documentation: 2.5.3
@@ -6219,6 +6413,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $string;
}
+
/**
* Read Unicode string with no string length field, but with known character count
* this function is under construction, needs to support rich text, and Asian phonetic settings
@@ -6254,6 +6449,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
);
}
+
/**
* Convert UTF-8 string to string surounded by double quotes. Used for explicit string tokens in formulas.
* Example: hello"world --> "hello""world"
@@ -6266,6 +6462,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return '"' . str_replace('"', '""', $value) . '"';
}
+
/**
* Reads first 8 bytes of a string and return IEEE 754 float
*
@@ -6295,6 +6492,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $value;
}
+
private static function _GetIEEE754($rknum)
{
if (($rknum & 0x02) != 0) {
@@ -6320,6 +6518,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $value;
}
+
/**
* Get UTF-8 string from (compressed or uncompressed) UTF-16 string
*
@@ -6336,6 +6535,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return PHPExcel_Shared_String::ConvertEncoding($string, 'UTF-8', 'UTF-16LE');
}
+
/**
* Convert UTF-16 string in compressed notation to uncompressed form. Only used for BIFF8.
*
@@ -6353,6 +6553,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return $uncompressedString;
}
+
/**
* Convert string to UTF-8. Only used for BIFF5.
*
@@ -6364,6 +6565,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return PHPExcel_Shared_String::ConvertEncoding($string, 'UTF-8', $this->_codepage);
}
+
/**
* Read 16-bit unsigned integer
*
@@ -6376,6 +6578,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return ord($data[$pos]) | (ord($data[$pos+1]) << 8);
}
+
/**
* Read 32-bit signed integer
*
@@ -6398,6 +6601,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
return ord($data[$pos]) | (ord($data[$pos+1]) << 8) | (ord($data[$pos+2]) << 16) | $_ord_24;
}
+
/**
* Read color
*
@@ -6455,6 +6659,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Get fill pattern from index
* OpenOffice documentation: 2.5.12
@@ -6488,6 +6693,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Map error code, e.g. '#N/A'
*
@@ -6508,6 +6714,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Map built-in color to RGB value
*
@@ -6531,6 +6738,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Map color array from BIFF5 built-in color index
*
@@ -6600,6 +6808,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
/**
* Map color array from BIFF8 built-in color index
*
@@ -6669,6 +6878,7 @@ class PHPExcel_Reader_Excel5 implements PHPExcel_Reader_IReader
}
}
+
private function _parseRichText($is = '') {
$value = new PHPExcel_RichText();
diff --git a/Classes/PHPExcel/Reader/Gnumeric.php b/Classes/PHPExcel/Reader/Gnumeric.php
index 9dc54f4..c659cc1 100644
--- a/Classes/PHPExcel/Reader/Gnumeric.php
+++ b/Classes/PHPExcel/Reader/Gnumeric.php
@@ -85,6 +85,15 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
private $_readFilter = null;
+ /**
+ * Create a new PHPExcel_Reader_Gnumeric
+ */
+ public function __construct() {
+ $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
+ $this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance();
+ }
+
+
/**
* Read data only?
* If this is true, then the Reader will only read data values for cells, it will not read any formatting information.
@@ -96,6 +105,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this->_readDataOnly;
}
+
/**
* Set read data only
* Set to true, to advise the Reader only to read data values for cells, and to ignore any formatting information.
@@ -110,6 +120,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Get which sheets to load
* Returns either an array of worksheet names (the list of worksheets that should be loaded), or a null
@@ -122,6 +133,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this->_loadSheetsOnly;
}
+
/**
* Set which sheets to load
*
@@ -138,6 +150,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Set all sheets to load
* Tells the Reader to load all worksheets from the workbook.
@@ -150,6 +163,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Read filter
*
@@ -159,6 +173,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this->_readFilter;
}
+
/**
* Set read filter
*
@@ -170,13 +185,6 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this;
}
- /**
- * Create a new PHPExcel_Reader_Gnumeric
- */
- public function __construct() {
- $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
- $this->_referenceHelper = PHPExcel_ReferenceHelper::getInstance();
- }
/**
* Can the current PHPExcel_Reader_IReader read the file?
@@ -209,6 +217,70 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return true;
}
+
+ /**
+ * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
+ *
+ * @param string $pFilename
+ * @throws Exception
+ */
+ public function listWorksheetInfo($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ $gFileData = $this->_gzfileGetContents($pFilename);
+
+ $xml = simplexml_load_string($gFileData);
+ $namespacesMeta = $xml->getNamespaces(true);
+
+ $gnmXML = $xml->children($namespacesMeta['gnm']);
+
+ $worksheetInfo = array();
+
+ foreach ($gnmXML->Sheets->Sheet as $sheet) {
+ $tmpInfo = array();
+ $tmpInfo['worksheetName'] = (string) $sheet->Name;
+ $tmpInfo['lastColumnLetter'] = 'A';
+ $tmpInfo['lastColumnIndex'] = 0;
+ $tmpInfo['totalRows'] = 0;
+ $tmpInfo['totalColumns'] = 0;
+
+ foreach ($sheet->Cells->Cell as $cell) {
+ $cellAttributes = $cell->attributes();
+
+ $rowIndex = (int) $cellAttributes->Row + 1;
+ $columnIndex = (int) $cellAttributes->Col;
+
+ $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex);
+ $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
+ }
+
+ $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
+ $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
+
+ $worksheetInfo[] = $tmpInfo;
+ }
+
+ return $worksheetInfo;
+ }
+
+
+ private function _gzfileGetContents($filename) {
+ $file = @gzopen($filename, 'rb');
+ if ($file !== false) {
+ $data = '';
+ while (!gzeof($file)) {
+ $data .= gzread($file, 1024);
+ }
+ gzclose($file);
+ }
+ return $data;
+ }
+
+
/**
* Loads PHPExcel from file
*
@@ -225,17 +297,6 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $this->loadIntoExisting($pFilename, $objPHPExcel);
}
- private function _gzfileGetContents($filename) {
- $file = @gzopen($filename, 'rb');
- if ($file !== false) {
- $data = '';
- while (!gzeof($file)) {
- $data .= gzread($file, 1024);
- }
- gzclose($file);
- }
- return $data;
- }
/**
* Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object
@@ -839,6 +900,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $objPHPExcel;
}
+
private static function _parseBorderAttributes($borderAttributes) {
$styleArray = array();
@@ -894,6 +956,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $styleArray;
}
+
private function _parseRichText($is = '') {
$value = new PHPExcel_RichText();
@@ -902,6 +965,7 @@ class PHPExcel_Reader_Gnumeric implements PHPExcel_Reader_IReader
return $value;
}
+
private static function _parseGnumericColour($gnmColour) {
list($gnmR,$gnmG,$gnmB) = explode(':',$gnmColour);
$gnmR = substr(str_pad($gnmR,4,'0',STR_PAD_RIGHT),0,2);
diff --git a/Classes/PHPExcel/Reader/OOCalc.php b/Classes/PHPExcel/Reader/OOCalc.php
index d2f73df..8be2559 100644
--- a/Classes/PHPExcel/Reader/OOCalc.php
+++ b/Classes/PHPExcel/Reader/OOCalc.php
@@ -76,6 +76,14 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
private $_readFilter = null;
+ /**
+ * Create a new PHPExcel_Reader_OOCalc
+ */
+ public function __construct() {
+ $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
+ }
+
+
/**
* Read data only?
* If this is true, then the Reader will only read data values for cells, it will not read any formatting information.
@@ -87,6 +95,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this->_readDataOnly;
}
+
/**
* Set read data only
* Set to true, to advise the Reader only to read data values for cells, and to ignore any formatting information.
@@ -100,6 +109,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Get which sheets to load
* Returns either an array of worksheet names (the list of worksheets that should be loaded), or a null
@@ -112,6 +122,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this->_loadSheetsOnly;
}
+
/**
* Set which sheets to load
*
@@ -128,6 +139,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Set all sheets to load
* Tells the Reader to load all worksheets from the workbook.
@@ -140,6 +152,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this;
}
+
/**
* Read filter
*
@@ -149,6 +162,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this->_readFilter;
}
+
/**
* Set read filter
*
@@ -160,12 +174,6 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this;
}
- /**
- * Create a new PHPExcel_Reader_OOCalc
- */
- public function __construct() {
- $this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
- }
/**
* Can the current PHPExcel_Reader_IReader read the file?
@@ -200,6 +208,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return false;
}
+
/**
* Reads names of the worksheets from a file, without parsing the whole file to a PHPExcel object
*
@@ -252,6 +261,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $this->loadIntoExisting($pFilename, $objPHPExcel);
}
+
private static function identifyFixedStyleValue($styleList,&$styleAttributeValue) {
$styleAttributeValue = strtolower($styleAttributeValue);
foreach($styleList as $style) {
@@ -263,6 +273,97 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return false;
}
+
+ /**
+ * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
+ *
+ * @param string $pFilename
+ * @throws Exception
+ */
+ public function listWorksheetInfo($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ $worksheetInfo = array();
+
+ $zip = new ZipArchive;
+ if ($zip->open($pFilename) === true) {
+
+ $xml = simplexml_load_string($zip->getFromName("content.xml"));
+ $namespacesContent = $xml->getNamespaces(true);
+
+ $workbook = $xml->children($namespacesContent['office']);
+ foreach($workbook->body->spreadsheet as $workbookData) {
+ $workbookData = $workbookData->children($namespacesContent['table']);
+ foreach($workbookData->table as $worksheetDataSet) {
+ $worksheetData = $worksheetDataSet->children($namespacesContent['table']);
+ $worksheetDataAttributes = $worksheetDataSet->attributes($namespacesContent['table']);
+
+ $tmpInfo = array();
+ $tmpInfo['worksheetName'] = $worksheetDataAttributes['name'];
+ $tmpInfo['lastColumnLetter'] = 'A';
+ $tmpInfo['lastColumnIndex'] = 0;
+ $tmpInfo['totalRows'] = 0;
+ $tmpInfo['totalColumns'] = 0;
+
+ $rowIndex = 0;
+ foreach ($worksheetData as $key => $rowData) {
+ $rowHasData = false;
+
+ switch ($key) {
+ case 'table-row' :
+ $columnIndex = 0;
+
+ foreach ($rowData as $key => $cellData) {
+ $cellHasData = false;
+
+ $cellDataText = $cellData->children($namespacesContent['text']);
+ $cellDataOfficeAttributes = $cellData->attributes($namespacesContent['office']);
+ if (isset($cellDataText->p)) {
+ switch ($cellDataOfficeAttributes['value-type']) {
+ case 'string' :
+ case 'boolean' :
+ case 'float' :
+ case 'date' :
+ case 'time' :
+ $cellHasData = true;
+ break;
+ }
+ }
+
+ $cellDataText = null;
+ $cellDataOfficeAttributes = null;
+
+ if ($cellHasData) {
+ $tmpInfo['lastColumnIndex'] = max($tmpInfo['lastColumnIndex'], $columnIndex);
+ $rowHasData = true;
+ }
+ ++$columnIndex;
+ }
+ ++$rowIndex;
+
+ if ($rowHasData) {
+ $tmpInfo['totalRows'] = max($tmpInfo['totalRows'], $rowIndex);
+ }
+ break;
+ }
+ }
+
+ $tmpInfo['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($tmpInfo['lastColumnIndex']);
+ $tmpInfo['totalColumns'] = $tmpInfo['lastColumnIndex'] + 1;
+
+ $worksheetInfo[] = $tmpInfo;
+ }
+ }
+ }
+
+ return $worksheetInfo;
+ }
+
+
/**
* Loads PHPExcel from file into PHPExcel instance
*
@@ -589,6 +690,7 @@ class PHPExcel_Reader_OOCalc implements PHPExcel_Reader_IReader
return $objPHPExcel;
}
+
private function _parseRichText($is = '') {
$value = new PHPExcel_RichText();
diff --git a/Classes/PHPExcel/Reader/SYLK.php b/Classes/PHPExcel/Reader/SYLK.php
index 15a98d1..6aae752 100644
--- a/Classes/PHPExcel/Reader/SYLK.php
+++ b/Classes/PHPExcel/Reader/SYLK.php
@@ -79,6 +79,7 @@ class PHPExcel_Reader_SYLK implements PHPExcel_Reader_IReader
*/
private $_readFilter = null;
+
/**
* Create a new PHPExcel_Reader_SYLK
*/
@@ -86,6 +87,7 @@ class PHPExcel_Reader_SYLK implements PHPExcel_Reader_IReader
$this->_readFilter = new PHPExcel_Reader_DefaultReadFilter();
}
+
/**
* Can the current PHPExcel_Reader_IReader read the file?
*
@@ -120,6 +122,123 @@ class PHPExcel_Reader_SYLK implements PHPExcel_Reader_IReader
return true;
}
+
+ /**
+ * Read filter
+ *
+ * @return PHPExcel_Reader_IReadFilter
+ */
+ public function getReadFilter() {
+ return $this->_readFilter;
+ }
+
+
+ /**
+ * Set read filter
+ *
+ * @param PHPExcel_Reader_IReadFilter $pValue
+ */
+ public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue) {
+ $this->_readFilter = $pValue;
+ return $this;
+ }
+
+
+ /**
+ * Set input encoding
+ *
+ * @param string $pValue Input encoding
+ */
+ public function setInputEncoding($pValue = 'ANSI')
+ {
+ $this->_inputEncoding = $pValue;
+ return $this;
+ }
+
+
+ /**
+ * Get input encoding
+ *
+ * @return string
+ */
+ public function getInputEncoding()
+ {
+ return $this->_inputEncoding;
+ }
+
+
+ /**
+ * Return worksheet info (Name, Last Column Letter, Last Column Index, Total Rows, Total Columns)
+ *
+ * @param string $pFilename
+ * @throws Exception
+ */
+ public function listWorksheetInfo($pFilename)
+ {
+ // Check if file exists
+ if (!file_exists($pFilename)) {
+ throw new Exception("Could not open " . $pFilename . " for reading! File does not exist.");
+ }
+
+ // Open file
+ $fileHandle = fopen($pFilename, 'r');
+ if ($fileHandle === false) {
+ throw new Exception("Could not open file " . $pFilename . " for reading.");
+ }
+
+ $worksheetInfo = array();
+ $worksheetInfo[0]['worksheetName'] = 'Worksheet';
+ $worksheetInfo[0]['lastColumnLetter'] = 'A';
+ $worksheetInfo[0]['lastColumnIndex'] = 0;
+ $worksheetInfo[0]['totalRows'] = 0;
+ $worksheetInfo[0]['totalColumns'] = 0;
+
+ // Loop through file
+ $rowData = array();
+
+ // loop through one row (line) at a time in the file
+ $rowIndex = 0;
+ while (($rowData = fgets($fileHandle)) !== FALSE) {
+ $columnIndex = 0;
+
+ // convert SYLK encoded $rowData to UTF-8
+ $rowData = PHPExcel_Shared_String::SYLKtoUTF8($rowData);
+
+ // explode each row at semicolons while taking into account that literal semicolon (;)
+ // is escaped like this (;;)
+ $rowData = explode("\t",str_replace('?',';',str_replace(';',"\t",str_replace(';;','?',rtrim($rowData)))));
+
+ $dataType = array_shift($rowData);
+ if ($dataType == 'C') {
+ // Read cell value data
+ foreach($rowData as $rowDatum) {
+ switch($rowDatum{0}) {
+ case 'C' :
+ case 'X' :
+ $columnIndex = substr($rowDatum,1) - 1;
+ break;
+ case 'R' :
+ case 'Y' :
+ $rowIndex = substr($rowDatum,1);
+ break;
+ }
+
+ $worksheetInfo[0]['totalRows'] = max($worksheetInfo[0]['totalRows'], $rowIndex);
+ $worksheetInfo[0]['lastColumnIndex'] = max($worksheetInfo[0]['lastColumnIndex'], $columnIndex);
+ }
+ }
+ }
+
+ $worksheetInfo[0]['lastColumnLetter'] = PHPExcel_Cell::stringFromColumnIndex($worksheetInfo[0]['lastColumnIndex']);
+ $worksheetInfo[0]['totalColumns'] = $worksheetInfo[0]['lastColumnIndex'] + 1;
+
+ // Close file
+ fclose($fileHandle);
+
+ return $worksheetInfo;
+ }
+
+
/**
* Loads PHPExcel from file
*
@@ -136,45 +255,6 @@ class PHPExcel_Reader_SYLK implements PHPExcel_Reader_IReader
return $this->loadIntoExisting($pFilename, $objPHPExcel);
}
- /**
- * Read filter
- *
- * @return PHPExcel_Reader_IReadFilter
- */
- public function getReadFilter() {
- return $this->_readFilter;
- }
-
- /**
- * Set read filter
- *
- * @param PHPExcel_Reader_IReadFilter $pValue
- */
- public function setReadFilter(PHPExcel_Reader_IReadFilter $pValue) {
- $this->_readFilter = $pValue;
- return $this;
- }
-
- /**
- * Set input encoding
- *
- * @param string $pValue Input encoding
- */
- public function setInputEncoding($pValue = 'ANSI')
- {
- $this->_inputEncoding = $pValue;
- return $this;
- }
-
- /**
- * Get input encoding
- *
- * @return string
- */
- public function getInputEncoding()
- {
- return $this->_inputEncoding;
- }
/**
* Loads PHPExcel from file into PHPExcel instance
@@ -393,6 +473,7 @@ class PHPExcel_Reader_SYLK implements PHPExcel_Reader_IReader
return $objPHPExcel;
}
+
/**
* Get sheet index
*
@@ -402,6 +483,7 @@ class PHPExcel_Reader_SYLK implements PHPExcel_Reader_IReader
return $this->_sheetIndex;
}
+
/**
* Set sheet index
*