Location: PHPKode > scripts > Excel XML Parser > excel-xml-parser/ExcelXMLTable.php
<?php
/*
* ============================================================================
*
* @name ExcelXMLTable.php
*
* @author andrew.aculana
* @version 2.0
* @license	http://opensource.org/licenses/gpl-license.php GNU Public License
* @date 2006-07-03
*
* ============================================================================
*
* License:	GNU Lesser General Public License (LGPL)
*
* Copyright (c) 2004 LINK2SUPPORT INC.  All rights reserved.
*
* This file is part of the L2S Online Application Framework
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.

* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.

* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
* ============================================================================
*/

/**
 * @package ExcelXMLParser
 * @subpackage ExcelXMLParser
 */
 
include_once 'ExcelXMLRow.php';
include_once 'ExcelXMLCell.php';

class ExcelXMLTable{
	
	/**
	 * Excel XML Table Attributes
	 * @var Associative Array $Rows
	 * @var Iterator $Iterator
	 */
	var $Rows;
	var $Iterator;
	var $Encoding;
#-----------------------------------------------------------------------------#

	/**
	 * class constructor - initialize attributes
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @return null
	 */	
	function ExcelXMLTable(&$Data,$Encoding){
		$this->Rows		 =& $Data[0]['children']['Row'];
		$this->Iterator  = new ExcelXMLArrayIterator($this->Rows);
		$this->Encoding  =& $Encoding;
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the row count
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @return int
	 */	
	function getRowCount(){
		
		return $this->Iterator->length();
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the active row
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @return long - pointer to the active row
	 */
	function &getActiveRow(){
		$active =& $this->Iterator->current();
		if($active){
			$Row = new ExcelXMLRow($active,$Encoding);
			return $Row;
		}else{
			return NULL;
		}
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the next row
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @return long - pointer to the next row
	 */
	function &getNextRow(){
		$next =& $this->Iterator->next();
		if($next){
			$Row = new ExcelXMLRow($next,$Encoding);
			return $Row;
		}else{
			return NULL;
		}
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the first row
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @return long - pointer to the first row
	 */
	function &getFirstRow(){
		$top =& $this->Iterator->top();
		if($top){
			$Row = new ExcelXMLRow($top,$Encoding);
			return $Row;
		}else{
			return NULL;
		}
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the last row
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @return long - pointer to the next row
	 */
	function &getLastRow(){
		
		$bottom =& $this->Iterator->bottom();
		if($bottom){
			$Row = new ExcelXMLRow($bottom,$Encoding);
			return $Row;
		}else{
			return NULL;
		}
	}
#-----------------------------------------------------------------------------#

	/**
	 * get row
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @param int $RowIndex
	 * @return long - pointer to the next row
	 */
	function &getRow($RowIndex = 0){
		
		return $this->Rows[$RowIndex];
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the cell by row col
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @param int $RowIndex
	 * @param int $ColIndex
	 * @return long - pointer to cell
	 */
	function &getCellByRowCol($RowIndex = 1,$ColIndex = 1){
		$celladdress = Utils::RowColToCell($RowIndex-1,$ColIndex-1);
		$rowcolcell =& $this->Rows[--$RowIndex]['children']['Cell'];
 		foreach($rowcolcell as $key => $val){
	 		$celldata =& $rowcolcell[$key];
	 		$Cell =& new ExcelXMLCell($celldata,$Encoding);
 			if(trim($celladdress) == trim($Cell->getCellAddress())){
 				return $Cell;
			}
 		}
 		return NULL;
	}
#-----------------------------------------------------------------------------#

	/**
	 * get the cell by Cell Address Notation
	 * 
	 * @author Andrew A. Aculana
	 * @access Public
	 * @version 2.0
	 * @copyright 2006-07-03
	 * @param String $Address - cell address notation ("eg. A1B1")
	 * @return long - pointer to cell
	 */
	function &getCellByAddress($Address = ""){
		preg_match("/([A-Za-z]*)?([0-9]*)/i",$Address,$RowCol);
		$Row 		= (int)$RowCol[2];
		$Col 		= $RowCol[1];
		$offset1 =0;
		if(strlen($Col) == 2){
			
			$offset1 = ord($Col[1])-65;
			$offset2  = (((ord($Col[0])-65)+1)*26)+$offset1;
		}else{
			$offset2  = ord($Col[0])-65;
		}
		return $this->getCellByRowCol($Row,$offset2+1);
	}
#-----------------------------------------------------------------------------#
}
?>
Return current item: Excel XML Parser