/**
  * $sheets = read('~/example.xls');
  * $sheet = 0;
  * $row = 0;
  * $column = 0;
  * echo $sheets[$sheet][$row][$column];
  *
  * @param $xlsFilePath  File path of Excel sheet file.
  * @param $returnType   Type of return value.
  *      READ_ARRAY  - Default. Return an numeric index array.
  *      READ_NUM    - Same as READ_ARRAY
  *      READ_ASSOC  - Return an associative array.
  *                    It will use values of first row to be field name.
  *                    Though the count of rows will less one than numeric index array.
  *      READ_HASH   - Same as READ_ASSOC
  *      READ_XMLSTRING - Return an XML String.
  * @return FALSE or an array contains sheets.
  */
 public function &read($xlsFilePath, $returnType = self::READ_ARRAY)
 {
     $oleread = new OLERead();
     if ($sheets =& $oleread->read($xlsFilePath)) {
         foreach ($sheets as &$sheet) {
             $cells =& $sheet['cells'];
             foreach (array_keys($sheet) as $k) {
                 unset($sheet[$k]);
             }
             $sheet = $cells;
         }
         unset($oleread);
         if ($returnType == self::READ_XMLSTRING or $returnType === 'string') {
             $sheets = $this->asXml($sheets);
         } else {
             if ($returnType == self::READ_HASH) {
                 foreach ($sheets as &$sheet) {
                     $header = array_shift($sheet);
                     $numOfHeader = count($header);
                     foreach ($sheet as &$row) {
                         if (count($row) == $numOfHeader) {
                             $row = array_combine($header, $row);
                         } else {
                             for ($i = 0; $i < $numOfHeader; ++$i) {
                                 $row[$header[$i]] = isset($row[$i]) ? $row[$i] : null;
                                 unset($row[$i]);
                             }
                         }
                     }
                     /*
                     if (count($sheet) < 1)
                         only one row.
                     */
                 }
             }
         }
     }
     return $sheets;
 }
 protected function _v($data, $pos)
 {
     return OLERead::v($data, $pos);
 }