From: <prn...@us...> - 2010-03-18 23:20:37
|
Revision: 7072 http://octave.svn.sourceforge.net/octave/?rev=7072&view=rev Author: prnienhuis Date: 2010-03-18 23:20:31 +0000 (Thu, 18 Mar 2010) Log Message: ----------- Removed first two input arguments; usage is much more logical now (just row & column index needed). Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2010-03-18 23:16:00 UTC (rev 7071) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2010-03-18 23:20:31 UTC (rev 7072) @@ -14,33 +14,35 @@ ## along with Octave; see the file COPYING. If not, see ## <http://www.gnu.org/licenses/>. -## calccelladdress - compute spreadsheet style cell address from -## row & column index. +## calccelladdress (R, C) - compute spreadsheet style cell address from +## row & column index (both 1-based). ## ## Max column index currently set to 18278 (max ODS: 1024, OOXML: 16384). ## Row limits for ODF and OOXML are 65536 and 1048576, resp. ## Author: Philip Nienhuis <prnienhuis at users.sf.net> ## Created: 2009-12-12 -## Last updated: 2009-12-27 +## Updates: +## 2009-12-27 Fixed OOXML limits +## 2010-03-17 Simplified argument list, only row + column needed. -function [ celladdress ] = calccelladdress (trow, lcol, row, column) +function [ celladdress ] = calccelladdress (row, column) - if (nargin < 4) error ("calccelladdress: not enough arguments.") endif - colnr = lcol + column - 1; - if (colnr > 18278) error ("Column nr > 18278"); endif - rem1 = rem ((colnr-1), 26); + if (nargin < 2) error ("calccelladdress: not enough arguments.") endif + + if (column > 18278) error ("Column nr > 18278"); endif + rem1 = rem ((column-1), 26); str = char (rem1 + 'A'); # A-Z; rightmost digit - if (colnr > 26 && colnr < 703) # AA-ZZ - tmp = char (floor(colnr - rem1) / 26 - 1 + 'A'); # Leftmost digit + if (column > 26 && column < 703) # AA-ZZ + tmp = char (floor(column - rem1) / 26 - 1 + 'A'); # Leftmost digit str = [tmp str]; - elseif (colnr > 702 && colnr < 18279) # AAA-ZZZ - rem2 = rem ((colnr - 26 - rem1) - 1, 676); + elseif (column > 702 && column < 18279) # AAA-ZZZ + rem2 = rem ((column - 26 - rem1) - 1, 676); str2 = char (rem2 / 26 + 'A'); # Middle digit - colnr = colnr - rem2 - rem1; - str3 = char (colnr / 676 - 1 + 'A'); # Leftmost digit + column = column - rem2 - rem1; + str3 = char (column / 676 - 1 + 'A'); # Leftmost digit str = [str3 str2 str]; endif - celladdress = sprintf ("%s%d", str, trow + row - 1); + celladdress = sprintf ("%s%d", str, row); endfunction \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-09-27 16:06:36
|
Revision: 7778 http://octave.svn.sourceforge.net/octave/?rev=7778&view=rev Author: prnienhuis Date: 2010-09-27 16:06:24 +0000 (Mon, 27 Sep 2010) Log Message: ----------- Improved error checking & more comprehensible messages Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2010-09-27 08:55:37 UTC (rev 7777) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2010-09-27 16:06:24 UTC (rev 7778) @@ -24,16 +24,17 @@ ## Created: 2009-12-12 ## Updates: ## 2009-12-27 Fixed OOXML limits -## 2010-03-17 Simplified argument list, only row + column needed. +## 2010-03-17 Simplified argument list, only row + column needed +## 2010-09-27 Made error message more comprehensible function [ celladdress ] = calccelladdress (row, column) - if (nargin < 2) error ("calccelladdress: not enough arguments.") endif + if (nargin < 2) error ("calccelladdress: Two arguments needed") endif - if (column > 18278) error ("Column nr > 18278"); endif + if (column > 18278 || column < 1) error ("Specified column out of range (1..18278)"); endif rem1 = rem ((column-1), 26); str = char (rem1 + 'A'); # A-Z; rightmost digit - if (column > 26 && column < 703) # AA-ZZ + if (column > 26 && column < 703) # AA-ZZ tmp = char (floor(column - rem1) / 26 - 1 + 'A'); # Leftmost digit str = [tmp str]; elseif (column > 702 && column < 18279) # AAA-ZZZ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-11-14 16:50:30
|
Revision: 7913 http://octave.svn.sourceforge.net/octave/?rev=7913&view=rev Author: prnienhuis Date: 2010-11-14 16:50:24 +0000 (Sun, 14 Nov 2010) Log Message: ----------- Input row range check added Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2010-11-14 16:49:18 UTC (rev 7912) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2010-11-14 16:50:24 UTC (rev 7913) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Philip +## Copyright (C) 2009,2010 Philip ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by @@ -26,12 +26,14 @@ ## 2009-12-27 Fixed OOXML limits ## 2010-03-17 Simplified argument list, only row + column needed ## 2010-09-27 Made error message more comprehensible +## 2010-10-11 Added check for row range function [ celladdress ] = calccelladdress (row, column) if (nargin < 2) error ("calccelladdress: Two arguments needed") endif if (column > 18278 || column < 1) error ("Specified column out of range (1..18278)"); endif + if (row > 1048576 || row < 1), error ('Specified row out of range (1..1048576)'); endif rem1 = rem ((column-1), 26); str = char (rem1 + 'A'); # A-Z; rightmost digit if (column > 26 && column < 703) # AA-ZZ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-03-02 20:45:46
|
Revision: 8142 http://octave.svn.sourceforge.net/octave/?rev=8142&view=rev Author: prnienhuis Date: 2011-03-02 20:45:40 +0000 (Wed, 02 Mar 2011) Log Message: ----------- Textual changes in header Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2011-03-02 08:01:58 UTC (rev 8141) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2011-03-02 20:45:40 UTC (rev 8142) @@ -14,11 +14,10 @@ ## along with Octave; see the file COPYING. If not, see ## <http://www.gnu.org/licenses/>. -## calccelladdress (R, C) - compute spreadsheet style cell address from -## row & column index (both 1-based). +## Compute spreadsheet style cell address from row & column index (both 1-based). ## -## Max column index currently set to 18278 (max ODS: 1024, OOXML: 16384). -## Row limits for ODF and OOXML are 65536 and 1048576, resp. +## Max column index: 18278 (max ODS: 1024, OOXML: 16384). +## Max row index 1048576 (max ODS 1.2: 65536; OOXML / ODS 1.2-extended: 1048576). ## Author: Philip Nienhuis <prnienhuis at users.sf.net> ## Created: 2009-12-12 @@ -27,6 +26,7 @@ ## 2010-03-17 Simplified argument list, only row + column needed ## 2010-09-27 Made error message more comprehensible ## 2010-10-11 Added check for row range +## 2011-03-01 Textual fixes in header function [ celladdress ] = calccelladdress (row, column) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-04-30 20:47:47
|
Revision: 8239 http://octave.svn.sourceforge.net/octave/?rev=8239&view=rev Author: prnienhuis Date: 2011-04-30 20:47:40 +0000 (Sat, 30 Apr 2011) Log Message: ----------- Simplified column name computation Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2011-04-29 07:44:29 UTC (rev 8238) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2011-04-30 20:47:40 UTC (rev 8239) @@ -27,6 +27,8 @@ ## 2010-03-17 Simplified argument list, only row + column needed ## 2010-09-27 Made error message more comprehensible ## 2010-10-11 Added check for row range +## 2011-04-21 Added tests +## 2011-04-30 Simplified column name computation function [ celladdress ] = calccelladdress (row, column) @@ -34,18 +36,14 @@ if (column > 18278 || column < 1) error ("Specified column out of range (1..18278)"); endif if (row > 1048576 || row < 1), error ('Specified row out of range (1..1048576)'); endif - rem1 = rem ((column-1), 26); - str = char (rem1 + 'A'); # A-Z; rightmost digit - if (column > 26 && column < 703) # AA-ZZ - tmp = char (floor(column - rem1) / 26 - 1 + 'A'); # Leftmost digit - str = [tmp str]; - elseif (column > 702 && column < 18279) # AAA-ZZZ - rem2 = rem ((column - 26 - rem1) - 1, 676); - str2 = char (rem2 / 26 + 'A'); # Middle digit - column = column - rem2 - rem1; - str3 = char (column / 676 - 1 + 'A'); # Leftmost digit - str = [str3 str2 str]; - endif + + str = ''; + while (column > 0.01) + rmd = floor (column / 26); + str = [char(column - rmd * 26 + 'A' - 1) str]; + column = rmd; + endwhile + celladdress = sprintf ("%s%d", str, row); endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-12-17 22:34:27
|
Revision: 9426 http://octave.svn.sourceforge.net/octave/?rev=9426&view=rev Author: prnienhuis Date: 2011-12-17 22:34:20 +0000 (Sat, 17 Dec 2011) Log Message: ----------- Fix wrong column address if column no. equals multiple of 26 Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2011-12-17 17:43:49 UTC (rev 9425) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2011-12-17 22:34:20 UTC (rev 9426) @@ -29,6 +29,7 @@ ## 2010-10-11 Added check for row range ## 2011-04-21 Added tests ## 2011-04-30 Simplified column name computation +## 2011-12-17 Bugfix for wrong column address if column equals multiple of 26 function [ celladdress ] = calccelladdress (row, column) @@ -39,7 +40,7 @@ str = ''; while (column > 0.01) - rmd = floor (column / 26); + rmd = floor ((column - 1) / 26); str = [char(column - rmd * 26 + 'A' - 1) str]; column = rmd; endwhile This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-12-18 12:20:21
|
Revision: 9429 http://octave.svn.sourceforge.net/octave/?rev=9429&view=rev Author: prnienhuis Date: 2011-12-18 12:20:14 +0000 (Sun, 18 Dec 2011) Log Message: ----------- Added some tests for corner cases Modified Paths: -------------- trunk/octave-forge/main/io/inst/calccelladdress.m Modified: trunk/octave-forge/main/io/inst/calccelladdress.m =================================================================== --- trunk/octave-forge/main/io/inst/calccelladdress.m 2011-12-17 23:41:50 UTC (rev 9428) +++ trunk/octave-forge/main/io/inst/calccelladdress.m 2011-12-18 12:20:14 UTC (rev 9429) @@ -30,6 +30,7 @@ ## 2011-04-21 Added tests ## 2011-04-30 Simplified column name computation ## 2011-12-17 Bugfix for wrong column address if column equals multiple of 26 +## 2011-12-18 Added tests for multiple-of-26 cases function [ celladdress ] = calccelladdress (row, column) @@ -64,3 +65,25 @@ %!test %! a = calccelladdress (1048576, 16384); %! assert (a, 'XFD1048576'); + +%!test +%! a = calccelladdress (378, 26); +%! assert (a, 'Z378'); + +%!test +%! a = calccelladdress (378, 702); +%! assert (a, 'ZZ378'); + +%!test +%! a = calccelladdress (378, 701); +%! assert (a, 'ZY378'); + +%!test +%! a = calccelladdress (378, 703); +%! assert (a, 'AAA378'); + +%!test +%! a = calccelladdress (378, 676); +%! assert (a, 'YZ378'); + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |