support for sheet ranges (JT Hughes)

git-svn-id: https://svn.php.net/repository/pear/packages/Spreadsheet_Excel_Writer/trunk@125041 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Xavier Noguer Gallego 2003-04-28 23:29:32 +00:00
parent de1cb768ec
commit f1d0697e90
1 changed files with 20 additions and 10 deletions

View File

@ -542,6 +542,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
{ {
return($this->_convertRef3d($token)); return($this->_convertRef3d($token));
} }
// match external references like Sheet1:Sheet2!A1
elseif (preg_match("/^([A-Za-z0-9_]+\:[A-Za-z0-9_]+\![A-I]?[A-Z])(\d+)$/",$token))
{
return($this->_convertRef3d($token));
}
// match ranges like A1:B2 // match ranges like A1:B2
elseif(preg_match("/^(\$)?[A-I]?[A-Z](\$)?(\d+)\:(\$)?[A-I]?[A-Z](\$)?(\d+)$/",$token)) elseif(preg_match("/^(\$)?[A-I]?[A-Z](\$)?(\d+)\:(\$)?[A-I]?[A-Z](\$)?(\d+)$/",$token))
{ {
@ -557,6 +562,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
{ {
return($this->_convertRange3d($token)); return($this->_convertRange3d($token));
} }
// match external ranges like Sheet1:Sheet2!A1:B2
elseif (preg_match("/^([A-Za-z0-9_]+\:[A-Za-z0-9_]+\![A-I]?[A-Z])(\d+)\:([A-I]?[A-Z])(\d+)$/",$token))
{
return($this->_convertRange3d($token));
}
elseif(isset($this->ptg[$token])) // operators (including parentheses) elseif(isset($this->ptg[$token])) // operators (including parentheses)
{ {
return(pack("C", $this->ptg[$token])); return(pack("C", $this->ptg[$token]));
@ -1062,8 +1072,8 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
{ {
return $token; return $token;
} }
// If it's an external reference (Sheet1!A1) // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif(eregi("^[A-Za-z0-9_]+\![A-I]?[A-Z][0-9]+$",$token) and elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z][0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead) and !ereg("[0-9]",$this->_lookahead) and
($this->_lookahead != ':') and ($this->_lookahead != '.')) ($this->_lookahead != ':') and ($this->_lookahead != '.'))
{ {
@ -1081,11 +1091,11 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
{ {
return $token; return $token;
} }
// If it's a external range // If it's an external range
elseif(eregi("^[A-Za-z0-9_]+\![A-I]?[A-Z][0-9]+:[A-I]?[A-Z][0-9]+$",$token) and elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z][0-9]+:[A-I]?[A-Z][0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead)) !ereg("[0-9]",$this->_lookahead))
{ {
return($token); return $token;
} }
// If it's a number (check that it's not a sheet name) // If it's a number (check that it's not a sheet name)
elseif (is_numeric($token) and !is_numeric($token.$this->_lookahead) and elseif (is_numeric($token) and !is_numeric($token.$this->_lookahead) and
@ -1321,8 +1331,8 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
$this->_advance(); $this->_advance();
return $result; return $result;
} }
// If it's an external reference (Sheet1!A1) // If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif(eregi("^[A-Za-z0-9_]+\![A-I]?[A-Z][0-9]+$",$this->_current_token)) elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z][0-9]+$/",$this->_current_token))
{ {
$result = $this->_createTree($this->_current_token, '', ''); $result = $this->_createTree($this->_current_token, '', '');
$this->_advance(); $this->_advance();
@ -1337,7 +1347,7 @@ class Spreadsheet_Excel_Writer_Parser extends PEAR
return $result; return $result;
} }
// If it's an external range (Sheet1!A1:B2) // If it's an external range (Sheet1!A1:B2)
elseif(eregi("^[A-Za-z0-9_]+\![A-I]?[A-Z][0-9]+:[A-I]?[A-Z][0-9]+$",$this->_current_token)) elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z][0-9]+:[A-I]?[A-Z][0-9]+$/",$this->_current_token))
{ {
$result = $this->_current_token; $result = $this->_current_token;
$this->_advance(); $this->_advance();