From: <prn...@us...> - 2009-12-30 15:04:23
|
Revision: 6679 http://octave.svn.sourceforge.net/octave/?rev=6679&view=rev Author: prnienhuis Date: 2009-12-30 15:04:15 +0000 (Wed, 30 Dec 2009) Log Message: ----------- First version, only works with odftoolkit & xercesImpl Added Paths: ----------- trunk/octave-forge/main/io/inst/odsfinfo.m Added: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m (rev 0) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2009-12-30 15:04:15 UTC (rev 6679) @@ -0,0 +1,110 @@ +## Copyright (C) 2009 Philip Nienhuis <prnienhuis at users.sf.net> +## +## 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 +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program 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 General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with Octave; see the file COPYING. If not, see +## <http://www.gnu.org/licenses/>. + +## -*- texinfo -*- +## @deftypefn {Function File} [@var{filetype}] = odsfinfo (@var{filename}) +## @deftypefnx {Function File} [@var{filetype}, @var{sh_names}] = odsfinfo (@var{filename}) +## Query an OpenOffice.org spreadsheet file @var{filename} (with .ods +## suffix) for some info about its contents (viz. sheet names). +## +## If @var{filename} is a recognizable OpenOffice.org spreadsheet file, +## @var{filetype} returns the string "OpenOffice.org Calc spreadsheet", +## or @'' (empty string) otherwise. +## +## If @var{filename} is a recognizable OpenOffice.org Calc spreadsheet +## file, optional argument @var{sh_names} contains a list (cell array) +## of sheet names contained in @var{filename}, in the order (from left +## to right) in which they occur in the sheet stack. +## +## If you omit return arguments @var{filetype} and @var{sh_names} altogether, +## odsfinfo returns the sheet names + a guess for the number of rows +## containing actual data to the screen. +## +## odsfinfo execution can take its time as the entire spreadsheet has to +## be parsed to get the sheet names. +## +## Examples: +## +## @example +## exist = odsfinfo ('test4.ods'); +## (Just checks if file test4.ods is a readable Calc file) +## @end example +## +## @example +## [exist, names] = odsfinfo ('test4.ods'); +## (Checks if file test4.ods is a readable Calc file and return a +## list of sheet names) +## @end example +## +## @seealso odsread, ods2oct +## +## @end deftypefn + +## Author: Philip Nienhuis <pr.nienhuis at users.sf.net> +## Created: 2009-12-17 +## Last updated 2009-12-29 + +function [ filetype, sheetnames ] = odsfinfo (filename) + + onscreen = nargout < 1; + + ods = odsopen (filename); + + filetype = 'OpenOffice.org Calc Document'; + + # To save execution time, only proceed if sheet names are wanted + if ~(nargout == 1) + + if (strcmp (ods.xtype, 'OTK')) + # Get contents and table (= sheet) stuff from the workbook + odfcont = ods.workbook; # Local copy just in case + xpath = ods.app.getXPath; + + # Create an instance of type NODESET for use in subsequent statement + NODESET = java_get ('javax.xml.xpath.XPathConstants', 'NODESET'); + # Parse sheets ("tables") from ODS file + sheets = xpath.evaluate ("//table:table", odfcont, NODESET); + nr_of_sheets = sheets.getLength(); + sheetnames = cell (nr_of_sheets, 1); + + # Get sheet names (& optionally date row count estimate) + for ii=1:nr_of_sheets + # Check in first part of the sheet nodeset + tmp1 = char (sheets.item(ii-1))(1:150); + ist = index (tmp1, 'table:name=') + 12; + ien = index (tmp1(ist:end), '" table') - 2 + ist; + sheetnames(ii) = tmp1(ist:ien); + if (onscreen) + # Echo sheet names + row count estimate to screen + nr_of_rows = sheets.item(ii-1).getLength (); + printf (sprintf("%s (~%d data rows)\n", sheetnames{ii}, nr_of_rows)); + endif + endfor + + elseif (strcmp (ods.xtype, 'JOD')) + # jOpenDocument doesn't support sheet name extraction (yet?) + printf ("No sheet name support implemented in jOpenDocument.\n") + + else + error (sprintf ("odsfinfo: unknown OpenOffice.org .ods interface - %s.", xls.xtype)); + + endif + endif + + ods = odsclose (ods); + +endfunction + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-03-03 12:40:45
|
Revision: 6982 http://octave.svn.sourceforge.net/octave/?rev=6982&view=rev Author: prnienhuis Date: 2010-03-03 12:40:39 +0000 (Wed, 03 Mar 2010) Log Message: ----------- Fixed echo of number of occupied data rows Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-03-02 23:38:34 UTC (rev 6981) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-03-03 12:40:39 UTC (rev 6982) @@ -17,7 +17,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} [@var{filetype}] = odsfinfo (@var{filename} [, @var{reqintf}]) ## @deftypefnx {Function File} [@var{filetype}, @var{sh_names}] = odsfinfo (@var{filename} [, @var{reqintf}]) -## Query an OpenOffice_org spreadsheet file @var{filename} (with .ods +## Query an OpenOffice.org spreadsheet file @var{filename} (with .ods ## suffix) for some info about its contents (viz. sheet names). ## ## If @var{filename} is a recognizable OpenOffice.org spreadsheet file, @@ -59,7 +59,9 @@ ## Author: Philip Nienhuis <pr.nienhuis at users.sf.net> ## Created: 2009-12-17 -## Last updated 2010-01-03 (added functionality for JOD as well) +## Updates: +## 2010-01-03 added functionality for JOD as well +## 2010-03-03 fixed echo of proper number of occupied data rows function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -93,8 +95,20 @@ sheetnames(ii) = tmp1(ist:ien); if (onscreen) # Echo sheet names + row count estimate to screen - nr_of_rows = sheets.item(ii-1).getLength (); - printf (sprintf("%s (~%d data rows)\n", sheetnames{ii}, nr_of_rows)); + nr_of_trows = sheets.item(ii-1).getLength (); + jj = 0; kk = 0; + while jj < nr_of_trows + sh_char = char (sheets.item(ii-1).item(jj)) (1:min(500, length(char (sheets.item(ii-1).item(jj))))); + if (findstr ('office:value-type', sh_char)), ++kk; endif + ll = findstr ('number-rows-repeated', sh_char); + if (ll) + extrows = sscanf (char (sheets.item(ii-1).item(jj)) (ll+20:ll+30), "%d") - 1; + else + ll = 0; + endif + ++jj + ll; + endwhile + printf (sprintf("%s (~%d data rows)\n", sheetnames{ii}, kk)); endif endfor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-03-18 23:22:13
|
Revision: 7073 http://octave.svn.sourceforge.net/octave/?rev=7073&view=rev Author: prnienhuis Date: 2010-03-18 23:22:07 +0000 (Thu, 18 Mar 2010) Log Message: ----------- In case of ODF toolkit, used data ranges are echoed to the screen (& changed help text accordingly) Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-03-18 23:20:31 UTC (rev 7072) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-03-18 23:22:07 UTC (rev 7073) @@ -30,15 +30,16 @@ ## to right) in which they occur in the sheet stack. ## ## If you omit return arguments @var{filetype} and @var{sh_names} altogether, -## odsfinfo returns the sheet names + (in case of the ODF toolkit interfcae) -## a raw guess for the number of rows containing actual data to the screen -## (actually the number of "table-rows" in ODS). +## odsfinfo returns the sheet names + (in case of the ODF toolkit interface) +## a qualified guess for the actual occupied data range to the screen. +## +## odsfinfo execution can take its time for large spreadsheets as the entire +## spreadsheet has to be parsed to get the sheet names, let alone exploring +## used data ranges. ## ## By specifying a value of 'jod' or 'otk' for @var{reqintf} the automatic ## selection of the java interface is bypassed and the specified interface ## will be used (if at all present). -#### odsfinfo execution can take its time as the entire spreadsheet has to -## be parsed to get the sheet names. ## ## Examples: ## @@ -60,8 +61,11 @@ ## Author: Philip Nienhuis <pr.nienhuis at users.sf.net> ## Created: 2009-12-17 ## Updates: -## 2010-01-03 added functionality for JOD as well -## 2010-03-03 fixed echo of proper number of occupied data rows +## 2010-01-03 Added functionality for JOD as well +## 2010-03-03 Fixed echo of proper number of occupied data rows +## 2010-03-18 Fixed proper echo of occupied data range +## (ah those pesky table-row-repeated & table-column-repeated attr.... :-( ) +## 2010-03-18 Separated range exploration (for OTK only yet) in separate function file function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -89,26 +93,17 @@ # Get sheet names (& optionally date row count estimate) for ii=1:nr_of_sheets # Check in first part of the sheet nodeset - tmp1 = char (sheets.item(ii-1))(1:150); - ist = index (tmp1, 'table:name=') + 12; - ien = index (tmp1(ist:end), '" table') - 2 + ist; - sheetnames(ii) = tmp1(ist:ien); + sheetnames (ii) = sheets.item(ii-1).getTableNameAttribute (); + printf (sprintf("%s", sheetnames{ii})); if (onscreen) - # Echo sheet names + row count estimate to screen - nr_of_trows = sheets.item(ii-1).getLength (); - jj = 0; kk = 0; - while jj < nr_of_trows - sh_char = char (sheets.item(ii-1).item(jj)) (1:min(500, length(char (sheets.item(ii-1).item(jj))))); - if (findstr ('office:value-type', sh_char)), ++kk; endif - ll = findstr ('number-rows-repeated', sh_char); - if (ll) - extrows = sscanf (char (sheets.item(ii-1).item(jj)) (ll+20:ll+30), "%d") - 1; - else - ll = 0; - endif - ++jj + ll; - endwhile - printf (sprintf("%s (~%d data rows)\n", sheetnames{ii}, kk)); + [ tr, lr, lc, rc ] = getusedrange (ods, ii); + if (tr) + printf (sprintf(" (used range = %s:%s)", \ + calccelladdress (tr, lc), calccelladdress (lr, rc))); + else + printf (" (empty)"); + endif + printf ("\n"); endif endfor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-03-21 00:04:27
|
Revision: 7090 http://octave.svn.sourceforge.net/octave/?rev=7090&view=rev Author: prnienhuis Date: 2010-03-21 00:04:15 +0000 (Sun, 21 Mar 2010) Log Message: ----------- Improved output to screen, occupied data range now shown Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-03-20 23:08:49 UTC (rev 7089) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-03-21 00:04:15 UTC (rev 7090) @@ -66,6 +66,7 @@ ## 2010-03-18 Fixed proper echo of occupied data range ## (ah those pesky table-row-repeated & table-column-repeated attr.... :-( ) ## 2010-03-18 Separated range exploration (for OTK only yet) in separate function file +## 2010-03-20 "Beautified" output (for OTK ), used range now in more tabular form function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -74,6 +75,8 @@ ods = odsopen (filename, 0, reqintf); filetype = 'OpenOffice.org Calc Document'; + + persistent adj_str; adj_str = ' '; # 30 char filler string # To save execution time, only proceed if sheet names are wanted if ~(nargout == 1) @@ -98,10 +101,11 @@ if (onscreen) [ tr, lr, lc, rc ] = getusedrange (ods, ii); if (tr) - printf (sprintf(" (used range = %s:%s)", \ + printf (sprintf("%s (used range = %s:%s)", \ + adj_str(1:(30 - length(sheetnames{ii}))), \ calccelladdress (tr, lc), calccelladdress (lr, rc))); else - printf (" (empty)"); + printf ("%s (empty)", adj_str(1:(30 - length(sheetnames{ii})))); endif printf ("\n"); endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-04-13 19:07:58
|
Revision: 7184 http://octave.svn.sourceforge.net/octave/?rev=7184&view=rev Author: prnienhuis Date: 2010-04-13 19:07:50 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Updated help text to make it compatible with generate_html Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-04-13 18:49:20 UTC (rev 7183) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-04-13 19:07:50 UTC (rev 7184) @@ -17,7 +17,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} [@var{filetype}] = odsfinfo (@var{filename} [, @var{reqintf}]) ## @deftypefnx {Function File} [@var{filetype}, @var{sh_names}] = odsfinfo (@var{filename} [, @var{reqintf}]) -## Query an OpenOffice.org spreadsheet file @var{filename} (with .ods +## Query an OpenOffice_org spreadsheet file @var{filename} (with .ods ## suffix) for some info about its contents (viz. sheet names). ## ## If @var{filename} is a recognizable OpenOffice.org spreadsheet file, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-04-13 19:22:00
|
Revision: 7187 http://octave.svn.sourceforge.net/octave/?rev=7187&view=rev Author: prnienhuis Date: 2010-04-13 19:21:53 +0000 (Tue, 13 Apr 2010) Log Message: ----------- Fixed help text for compliance with generate_html (short descr.) Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-04-13 19:09:47 UTC (rev 7186) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-04-13 19:21:53 UTC (rev 7187) @@ -17,8 +17,8 @@ ## -*- texinfo -*- ## @deftypefn {Function File} [@var{filetype}] = odsfinfo (@var{filename} [, @var{reqintf}]) ## @deftypefnx {Function File} [@var{filetype}, @var{sh_names}] = odsfinfo (@var{filename} [, @var{reqintf}]) -## Query an OpenOffice_org spreadsheet file @var{filename} (with .ods -## suffix) for some info about its contents (viz. sheet names). +## Query an OpenOffice_org spreadsheet file @var{filename} (with ods +## suffix) for some info about its contents. ## ## If @var{filename} is a recognizable OpenOffice.org spreadsheet file, ## @var{filetype} returns the string "OpenOffice.org Calc spreadsheet", @@ -67,6 +67,7 @@ ## (ah those pesky table-row-repeated & table-column-repeated attr.... :-( ) ## 2010-03-18 Separated range exploration (for OTK only yet) in separate function file ## 2010-03-20 "Beautified" output (for OTK ), used range now in more tabular form +## 2010-04-13 Fixed help text for compliance with generate_html (short descr.) function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-05-26 18:05:45
|
Revision: 7350 http://octave.svn.sourceforge.net/octave/?rev=7350&view=rev Author: prnienhuis Date: 2010-05-26 18:05:39 +0000 (Wed, 26 May 2010) Log Message: ----------- Added support for exploring occupied data ranges using the jOpenDocument interface Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-05-26 18:04:35 UTC (rev 7349) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-05-26 18:05:39 UTC (rev 7350) @@ -67,7 +67,7 @@ ## (ah those pesky table-row-repeated & table-column-repeated attr.... :-( ) ## 2010-03-18 Separated range exploration (for OTK only yet) in separate function file ## 2010-03-20 "Beautified" output (for OTK ), used range now in more tabular form -## 2010-04-13 Fixed help text for compliance with generate_html (short descr.) +## 2010-05-23 Updated jOpenDocument support (can also get occupied data range now) function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -116,13 +116,18 @@ nr_of_sheets = ods.workbook.getSheetCount (); sheetnames = cell (nr_of_sheets, 1); for ii=1:nr_of_sheets - tmp1 = char (ods.workbook.getSheet (ii-1)); - ist = index (tmp1, 'table:name=') + 12; - ien = index (tmp1(ist:end), '" table') - 2 + ist; - sheetnames(ii) = tmp1(ist:ien); + sheetnames(ii) = ods.workbook.getSheet (ii-1).getName (); + printf (sprintf("%s", sheetnames{ii})); if (onscreen) - # Echo sheet names - printf (" %s\n", sheetnames{ii}); + [ tr, lr, lc, rc ] = getusedrange (ods, ii); + if (tr) + printf (sprintf("%s (used range = %s:%s)", \ + adj_str(1:(30 - length(sheetnames{ii}))), \ + calccelladdress (tr, lc), calccelladdress (lr, rc))); + else + printf ("%s (empty)", adj_str(1:(30 - length(sheetnames{ii})))); + endif + printf ("\n"); endif endfor This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2010-11-14 17:04:50
|
Revision: 7912 http://octave.svn.sourceforge.net/octave/?rev=7912&view=rev Author: prnienhuis Date: 2010-11-14 16:49:18 +0000 (Sun, 14 Nov 2010) Log Message: ----------- Textual fixes Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2010-11-14 16:48:00 UTC (rev 7911) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2010-11-14 16:49:18 UTC (rev 7912) @@ -17,7 +17,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} [@var{filetype}] = odsfinfo (@var{filename} [, @var{reqintf}]) ## @deftypefnx {Function File} [@var{filetype}, @var{sh_names}] = odsfinfo (@var{filename} [, @var{reqintf}]) -## Query an OpenOffice_org spreadsheet file @var{filename} (with ods +## Query an OpenOffice_org spreadsheet file @var{filename} (with .ods ## suffix) for some info about its contents. ## ## If @var{filename} is a recognizable OpenOffice.org spreadsheet file, @@ -134,7 +134,7 @@ endfor else -# error (sprintf ("odsfinfo: unknown OpenOffice.org .ods interface - %s.", xls.xtype)); +# error (sprintf ("odsfinfo: unknown OpenOffice.org .ods interface - %s.", ods.xtype)); endif endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-05-06 16:13:15
|
Revision: 8251 http://octave.svn.sourceforge.net/octave/?rev=8251&view=rev Author: prnienhuis Date: 2011-05-06 16:13:09 +0000 (Fri, 06 May 2011) Log Message: ----------- Experimental UNO support added Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2011-05-06 16:12:44 UTC (rev 8250) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2011-05-06 16:13:09 UTC (rev 8251) @@ -1,4 +1,4 @@ -## Copyright (C) 2009 Philip Nienhuis <prnienhuis at users.sf.net> +## Copyright (C) 2009,2010,2011 Philip Nienhuis <prnienhuis at users.sf.net> ## ## 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 @@ -17,7 +17,7 @@ ## -*- texinfo -*- ## @deftypefn {Function File} [@var{filetype}] = odsfinfo (@var{filename} [, @var{reqintf}]) ## @deftypefnx {Function File} [@var{filetype}, @var{sh_names}] = odsfinfo (@var{filename} [, @var{reqintf}]) -## Query an OpenOffice_org Calc spreadsheet file @var{filename} (with ods +## Query an OpenOffice_org spreadsheet file @var{filename} (with .ods ## suffix) for some info about its contents. ## ## If @var{filename} is a recognizable OpenOffice.org spreadsheet file, @@ -70,7 +70,8 @@ ## 2010-03-20 "Beautified" output (for OTK ), used range now in more tabular form ## 2010-05-23 Updated jOpenDocument support (can also get occupied data range now) ## 2010-05-31 Added remark about delays when determining occupied data range -## 2011-03-04 Minor textual header change (deleted a ".") +## 2011-03-23 Adapted to odfdom 0.8.7 (changed getXPath method call) +## 2011-05-07 Experimental UNO support added function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -88,7 +89,11 @@ if (strcmp (ods.xtype, 'OTK')) # Get contents and table (= sheet) stuff from the workbook odfcont = ods.workbook; # Local copy just in case - xpath = ods.app.getXPath; + if (strcmp (ods.odfvsn, '0.8.7')) + xpath = ods.workbook.getXPath; + else + xpath = ods.app.getXPath; + endif # Create an instance of type NODESET for use in subsequent statement NODESET = java_get ('javax.xml.xpath.XPathConstants', 'NODESET'); @@ -106,10 +111,10 @@ [ tr, lr, lc, rc ] = getusedrange (ods, ii); if (tr) printf (sprintf("%s (used range = %s:%s)", \ - adj_str(1:(30 - length(sheetnames{ii}))), \ + adj_str(1:(30 - length (sheetnames{ii}))), \ calccelladdress (tr, lc), calccelladdress (lr, rc))); else - printf ("%s (empty)", adj_str(1:(30 - length(sheetnames{ii})))); + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); endif printf ("\n"); endif @@ -125,14 +130,33 @@ [ tr, lr, lc, rc ] = getusedrange (ods, ii); if (tr) printf (sprintf("%s (used range = %s:%s)", \ - adj_str(1:(30 - length(sheetnames{ii}))), \ + adj_str(1:(30 - length (sheetnames{ii}))), \ calccelladdress (tr, lc), calccelladdress (lr, rc))); else - printf ("%s (empty)", adj_str(1:(30 - length(sheetnames{ii})))); + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); endif printf ("\n"); endif endfor + + elseif (strcmp (ods.xtype, 'UNO')) + sheets = ods.workbook.getSheets (); + sheetnames = sheets.getElementNames (); # A Java object, NOT a cell array + nr_of_sheets = numel (sheetnames); + for ii=1:nr_of_sheets + printf (sprintf("%s", sheetnames(ii))); # () as it is a Java object + if (onscreen) + [ tr, lr, lc, rc ] = getusedrange (ods, ii); + if (tr) + printf (sprintf ("%s (used range = %s:%s)", \ + adj_str (1:(30 - length (sheetnames(ii)))), \ + calccelladdress (tr, lc), calccelladdress (lr, rc))); + else + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames(ii))))); + endif + printf ("\n"); + endif + endfor else # error (sprintf ("odsfinfo: unknown OpenOffice.org .ods interface - %s.", ods.xtype)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-08-08 20:21:31
|
Revision: 8451 http://octave.svn.sourceforge.net/octave/?rev=8451&view=rev Author: prnienhuis Date: 2011-08-08 20:21:25 +0000 (Mon, 08 Aug 2011) Log Message: ----------- Catch empty ods structs returned by failing odsopen Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2011-08-08 19:32:33 UTC (rev 8450) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2011-08-08 20:21:25 UTC (rev 8451) @@ -72,6 +72,7 @@ ## 2010-05-31 Added remark about delays when determining occupied data range ## 2011-03-23 Adapted to odfdom 0.8.7 (changed getXPath method call) ## 2011-05-07 Experimental UNO support added +## 2011-07-29 Catch empty ods struct function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -79,6 +80,11 @@ ods = odsopen (filename, 0, reqintf); + if (isempty (ods)) + # odsopen will have complained sufficiently, so we just return here + return; + endif + filetype = 'OpenOffice.org Calc Document'; persistent adj_str; adj_str = ' '; # 30 char filler string This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2011-09-04 20:02:27
|
Revision: 8494 http://octave.svn.sourceforge.net/octave/?rev=8494&view=rev Author: prnienhuis Date: 2011-09-04 20:02:21 +0000 (Sun, 04 Sep 2011) Log Message: ----------- Normal return if no ods support was detected (odsopen will have complained enough) Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2011-09-04 20:01:36 UTC (rev 8493) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2011-09-04 20:02:21 UTC (rev 8494) @@ -72,19 +72,16 @@ ## 2010-05-31 Added remark about delays when determining occupied data range ## 2011-03-23 Adapted to odfdom 0.8.7 (changed getXPath method call) ## 2011-05-07 Experimental UNO support added -## 2011-07-29 Catch empty ods struct +## 2011-09-03 Normal return in case of no ODS support (empty ods struct) function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) onscreen = nargout < 1; ods = odsopen (filename, 0, reqintf); + # If no ods support was found, odsopen will have complained. Just return here + if (isempty (ods)), return; endif - if (isempty (ods)) - # odsopen will have complained sufficiently, so we just return here - return; - endif - filetype = 'OpenOffice.org Calc Document'; persistent adj_str; adj_str = ' '; # 30 char filler string This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2012-02-25 23:26:59
|
Revision: 9684 http://octave.svn.sourceforge.net/octave/?rev=9684&view=rev Author: prnienhuis Date: 2012-02-25 23:26:53 +0000 (Sat, 25 Feb 2012) Log Message: ----------- Added range to output args; improved screen layout on spreadsheet info Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2012-02-25 23:24:59 UTC (rev 9683) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2012-02-25 23:26:53 UTC (rev 9684) @@ -74,101 +74,114 @@ ## 2011-05-07 Experimental UNO support added ## 2011-09-03 Normal return in case of no ODS support (empty ods struct) ## 2012-01-26 Fixed "seealso" help string +## 2012-02-25 Return occupied sheet ranges in output args +## '' Improve echo of sheet names & ranges if interactive. function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) - onscreen = nargout < 1; + onscreen = nargout < 1; - ods = odsopen (filename, 0, reqintf); + ods = odsopen (filename, 0, reqintf); # If no ods support was found, odsopen will have complained. Just return here if (isempty (ods)), return; endif - - filetype = 'OpenOffice.org Calc Document'; - - persistent adj_str; adj_str = ' '; # 30 char filler string + + filetype = 'OpenOffice.org Calc Document'; + + persistent adj_str; adj_str = ' '; # 30 char filler string - # To save execution time, only proceed if sheet names are wanted - if ~(nargout == 1) + # To save execution time, only proceed if sheet names are wanted + if ~(nargout == 1) - if (strcmp (ods.xtype, 'OTK')) - # Get contents and table (= sheet) stuff from the workbook - odfcont = ods.workbook; # Local copy just in case - if (strcmp (ods.odfvsn, '0.8.7')) - xpath = ods.workbook.getXPath; - else - xpath = ods.app.getXPath; - endif + if (strcmp (ods.xtype, 'OTK')) + # Get contents and table (= sheet) stuff from the workbook + odfcont = ods.workbook; # Local copy just in case + if (strcmp (ods.odfvsn, '0.8.7')) + xpath = ods.workbook.getXPath; + else + xpath = ods.app.getXPath; + endif - # Create an instance of type NODESET for use in subsequent statement - NODESET = java_get ('javax.xml.xpath.XPathConstants', 'NODESET'); - # Parse sheets ("tables") from ODS file - sheets = xpath.evaluate ("//table:table", odfcont, NODESET); - nr_of_sheets = sheets.getLength(); - sheetnames = cell (nr_of_sheets, 1); + # Create an instance of type NODESET for use in subsequent statement + NODESET = java_get ('javax.xml.xpath.XPathConstants', 'NODESET'); + # Parse sheets ("tables") from ODS file + sheets = xpath.evaluate ("//table:table", odfcont, NODESET); + nr_of_sheets = sheets.getLength(); + sheetnames = cell (nr_of_sheets, 2); - # Get sheet names (& optionally date row count estimate) - for ii=1:nr_of_sheets - # Check in first part of the sheet nodeset - sheetnames (ii) = sheets.item(ii-1).getTableNameAttribute (); - printf (sprintf("%s", sheetnames{ii})); - if (onscreen) - [ tr, lr, lc, rc ] = getusedrange (ods, ii); - if (tr) - printf (sprintf("%s (used range = %s:%s)", \ - adj_str(1:(30 - length (sheetnames{ii}))), \ - calccelladdress (tr, lc), calccelladdress (lr, rc))); - else - printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); - endif - printf ("\n"); - endif - endfor - - elseif (strcmp (ods.xtype, 'JOD')) - nr_of_sheets = ods.workbook.getSheetCount (); - sheetnames = cell (nr_of_sheets, 1); - for ii=1:nr_of_sheets - sheetnames(ii) = ods.workbook.getSheet (ii-1).getName (); - printf (sprintf("%s", sheetnames{ii})); - if (onscreen) - [ tr, lr, lc, rc ] = getusedrange (ods, ii); - if (tr) - printf (sprintf("%s (used range = %s:%s)", \ - adj_str(1:(30 - length (sheetnames{ii}))), \ - calccelladdress (tr, lc), calccelladdress (lr, rc))); - else - printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); - endif - printf ("\n"); - endif - endfor - - elseif (strcmp (ods.xtype, 'UNO')) - sheets = ods.workbook.getSheets (); - sheetnames = sheets.getElementNames (); # A Java object, NOT a cell array - nr_of_sheets = numel (sheetnames); - for ii=1:nr_of_sheets - printf (sprintf("%s", sheetnames(ii))); # () as it is a Java object - if (onscreen) - [ tr, lr, lc, rc ] = getusedrange (ods, ii); - if (tr) - printf (sprintf ("%s (used range = %s:%s)", \ - adj_str (1:(30 - length (sheetnames(ii)))), \ - calccelladdress (tr, lc), calccelladdress (lr, rc))); - else - printf ("%s (empty)", adj_str(1:(30 - length (sheetnames(ii))))); - endif - printf ("\n"); - endif - endfor + # Get sheet names (& optionally date row count estimate) + for ii=1:nr_of_sheets + # Check in first part of the sheet nodeset + sheetnames (ii) = sheets.item(ii-1).getTableNameAttribute (); + [ tr, lr, lc, rc ] = getusedrange (ods, ii); + if (onscreen) + printf (sprintf("%s", sheetnames{ii})); + if (tr) + printf (sprintf("%s (used range = %s:%s)", \ + adj_str(1:(30 - length (sheetnames{ii}))), \ + calccelladdress (tr, lc), calccelladdress (lr, rc))); + else + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); + endif + printf ("\n"); + endif + if (tr) + sheetnames(ii, 2) = sprintf ("%s:%s", calccelladdress (tr, lc), calccelladdress (lr, rc)); + endif + endfor + + elseif (strcmp (ods.xtype, 'JOD')) + nr_of_sheets = ods.workbook.getSheetCount (); + sheetnames = cell (nr_of_sheets, 2); + for ii=1:nr_of_sheets + sheetnames(ii) = ods.workbook.getSheet (ii-1).getName (); + [ tr, lr, lc, rc ] = getusedrange (ods, ii); + if (onscreen) + printf (sprintf("%s", sheetnames{ii})); + if (tr) + printf (sprintf("%s (used range = %s:%s)", \ + adj_str(1:(30 - length (sheetnames{ii}))), \ + calccelladdress (tr, lc), calccelladdress (lr, rc))); + else + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); + endif + printf ("\n"); + endif + if (tr) + sheetnames(ii, 2) = sprintf ("%s:%s", calccelladdress (tr, lc), calccelladdress (lr, rc)); + endif + endfor + + elseif (strcmp (ods.xtype, 'UNO')) + sheets = ods.workbook.getSheets (); + sheetnames = sheets.getElementNames (); # A Java object, NOT a cell array + nr_of_sheets = numel (sheetnames); + sheetnames = char (sheetnames); + for ii=1:nr_of_sheets + [ tr, lr, lc, rc ] = getusedrange (ods, ii); + if (onscreen) + printf (sprintf("%s", sheetnames(ii))); # () as it is a Java object + if (tr) + printf (sprintf ("%s (used range = %s:%s)", \ + adj_str (1:(30 - length (sheetnames(ii)))), \ + calccelladdress (tr, lc), calccelladdress (lr, rc))); + else + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames(ii))))); + endif + printf ("\n"); + endif + if (tr) + sheetnames(ii, 2) = sprintf ("%s:%s", calccelladdress (tr, lc), calccelladdress (lr, rc)); + endif - else -# error (sprintf ("odsfinfo: unknown OpenOffice.org .ods interface - %s.", ods.xtype)); + endfor - endif - endif + else +# error (sprintf ("odsfinfo: unknown OpenOffice.org .ods interface - %s.", ods.xtype)); - ods = odsclose (ods); - + endif + endif + + ods = odsclose (ods); + endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2012-03-01 17:23:57
|
Revision: 9735 http://octave.svn.sourceforge.net/octave/?rev=9735&view=rev Author: prnienhuis Date: 2012-03-01 17:23:50 +0000 (Thu, 01 Mar 2012) Log Message: ----------- Fix wrong cell refs in UNO section ("(..)" rather than "{..}" Modified Paths: -------------- trunk/octave-forge/main/io/inst/odsfinfo.m Modified: trunk/octave-forge/main/io/inst/odsfinfo.m =================================================================== --- trunk/octave-forge/main/io/inst/odsfinfo.m 2012-03-01 17:21:51 UTC (rev 9734) +++ trunk/octave-forge/main/io/inst/odsfinfo.m 2012-03-01 17:23:50 UTC (rev 9735) @@ -75,7 +75,8 @@ ## 2011-09-03 Normal return in case of no ODS support (empty ods struct) ## 2012-01-26 Fixed "seealso" help string ## 2012-02-25 Return occupied sheet ranges in output args -## '' Improve echo of sheet names & ranges if interactive. +## '' Improve echo of sheet names & ranges if interactive +## 2012-03-01 Fix wrong cell refs in UNO section ("(..)" rather than "{..}" function [ filetype, sheetnames ] = odsfinfo (filename, reqintf=[]) @@ -159,13 +160,13 @@ for ii=1:nr_of_sheets [ tr, lr, lc, rc ] = getusedrange (ods, ii); if (onscreen) - printf (sprintf("%s", sheetnames(ii))); # () as it is a Java object + printf (sprintf("%s", sheetnames{ii})); # () as it is a Java object if (tr) printf (sprintf ("%s (used range = %s:%s)", \ - adj_str (1:(30 - length (sheetnames(ii)))), \ + adj_str (1:(30 - length (sheetnames{ii}))), \ calccelladdress (tr, lc), calccelladdress (lr, rc))); else - printf ("%s (empty)", adj_str(1:(30 - length (sheetnames(ii))))); + printf ("%s (empty)", adj_str(1:(30 - length (sheetnames{ii})))); endif printf ("\n"); endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |