From: <prn...@us...> - 2010-01-18 20:57:00
|
Revision: 6787 http://octave.svn.sourceforge.net/octave/?rev=6787&view=rev Author: prnienhuis Date: 2010-01-18 20:56:49 +0000 (Mon, 18 Jan 2010) Log Message: ----------- Fixedlay-out; added a paragraph on java memory usage and memory options. Modified Paths: -------------- trunk/octave-forge/main/io/doc/READ-ODS.html trunk/octave-forge/main/io/doc/READ-XLS.html Modified: trunk/octave-forge/main/io/doc/READ-ODS.html =================================================================== --- trunk/octave-forge/main/io/doc/READ-ODS.html 2010-01-18 12:14:21 UTC (rev 6786) +++ trunk/octave-forge/main/io/doc/READ-ODS.html 2010-01-18 20:56:49 UTC (rev 6787) @@ -7,7 +7,7 @@ <META NAME="AUTHOR" CONTENT="Philip Nienhuis"> <META NAME="CREATED" CONTENT="20091229;22213000"> <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> - <META NAME="CHANGED" CONTENT="20100117;20543700"> + <META NAME="CHANGED" CONTENT="20100118;21551300"> <META NAME="Info 1" CONTENT=""> <META NAME="Info 2" CONTENT=""> <META NAME="Info 3" CONTENT=""> @@ -15,6 +15,7 @@ <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> + <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> <STYLE TYPE="text/css"> <!-- @page { margin: 0.79in } @@ -33,7 +34,7 @@ <P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR> </P> <P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2>This -version January 14, 2010</FONT></FONT></P> +version January 18, 2010</FONT></FONT></P> <P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR> </P> <P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><I>(ODS @@ -127,7 +128,8 @@ <P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR> </P> <P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">For -ODS access, you'll need one of the following java class files</FONT></FONT></P> +ODS access, you'll need to choose at least one of the following java +class files collections:</FONT></FONT></P> <UL> <LI><P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">(currently the preferred option) <B>odfdom.jar</B> & <B>xercesImpl.jar</B>. @@ -234,9 +236,12 @@ </P> <P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> <FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">I -know of one big gotcha: i.e. reading dates (& time).</FONT></FONT></P> +know of one big gotcha: i.e. reading dates (& time). A less +obvious one is java memory pool allocation size.</FONT></FONT></P> <P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR> </P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><B>Date +and time in ODS</B></FONT></FONT></P> <P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> <FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Octave (as does Matlab) stores dates as a number representing the number of @@ -278,7 +283,54 @@ floats in octave cell arrays.</FONT></FONT></P> <P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR> </P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><B>Java +memory pool allocation size</B></FONT></FONT></P> <P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">The +java virtual machine (JVM) initializes one big chunk of your +computer's RAM in which all java classes and methods etc. are to be +loaded: the java memory pool. It does this because java has a very +sophisticated “garbage collection” system. At least on +Windows, the initial size is 2MB and the maximum size is 64MB. On +Linux this allocated size is much bigger. This part of memory is +where the java-based ODS octave routines (and the java-based xls +routines) live and keep their variables etc.</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">For +transferring large pieces of information to and from spreadsheets you +might hit the limits of this pool. E.g. to be able to handle I/O of +an array of around 50,000 cells I needed a memory pool size of 512 +MB.</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">The +memory size can be increased by inserting a file called “java.opts” +(without quotes) in the directory +./share/octave/packages/java-<version> (where the script file +javaclasspath.m is located), containing just the following lines:</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; text-decoration: none"><FONT FACE="Courier New, monospace"><FONT SIZE=2 STYLE="font-size: 11pt"><B>-Xms16m</B></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; text-decoration: none"><FONT FACE="Courier New, monospace"><FONT SIZE=2 STYLE="font-size: 11pt"><B>-Xmx512m</B></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">(where +16 = initial size, 512 = maximum size, m stands for Megabyte).</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">After +processing a large chunk of spreadsheet information you might notice +that octave's memory footprint does not shrink so it looks like +java's memory pool does not shrink back; but rest assured, the memory +footprint is the <I>allocated</I><SPAN STYLE="font-style: normal"> +(reserved) memory size, not the actual used size. After the JVM has +done its garbage collection, only the so-called “working set” +of the memory allocation is really in use and that is a trimmed-down +part of the memory allocation pool. On Windows systems it often +suffices to minimize the octave terminal for a few seconds to get a +more reasonable memory footprint.</SPAN></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<BR> +</P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<BR> +</P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> <FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Smaller gotcha's (only with jOpenDocument):</FONT></FONT></P> <UL> @@ -380,7 +432,9 @@ and easy ODS write support (maybe when jOpenDocument is more mature)</FONT></FONT></P> <LI><P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> <FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Speeding - up</FONT></FONT></P> + up (ODS is 10 X slower than e.g. OOXML !!!). jOpenDocument is + muchfasterbut </FONT></FONT> + </P> <LI><P ALIGN=LEFT STYLE="margin-bottom: 0in; text-decoration: none">“<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><SPAN STYLE="font-weight: normal">Passing function handle” a la Matlab's xlsread.</SPAN></FONT></FONT></P> </UL> @@ -388,5 +442,11 @@ </P> <P ALIGN=LEFT STYLE="margin-left: 0.01in; margin-bottom: 0in; font-weight: normal; text-decoration: none"> <FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Enjoy!</FONT></FONT></P> +<P STYLE="margin-left: 0.26in; text-indent: -0.26in; margin-bottom: 0in"> +<BR> +</P> +<P ALIGN=CENTER STYLE="margin-left: 0.26in; text-indent: -0.26in; margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Philip +Nienhuis, Jan 18, 2010</FONT></FONT></P> </BODY> </HTML> \ No newline at end of file Modified: trunk/octave-forge/main/io/doc/READ-XLS.html =================================================================== --- trunk/octave-forge/main/io/doc/READ-XLS.html 2010-01-18 12:14:21 UTC (rev 6786) +++ trunk/octave-forge/main/io/doc/READ-XLS.html 2010-01-18 20:56:49 UTC (rev 6787) @@ -7,7 +7,7 @@ <META NAME="AUTHOR" CONTENT="Philip Nienhuis"> <META NAME="CREATED" CONTENT="20091211;17230700"> <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> - <META NAME="CHANGED" CONTENT="20100112;22050800"> + <META NAME="CHANGED" CONTENT="20100118;21550000"> <META NAME="Info 1" CONTENT=""> <META NAME="Info 2" CONTENT=""> <META NAME="Info 3" CONTENT=""> @@ -18,6 +18,7 @@ <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> + <META NAME="CHANGEDBY" CONTENT="Philip Nienhuis"> <STYLE TYPE="text/css"> <!-- @page { margin: 0.79in } @@ -27,116 +28,128 @@ </STYLE> </HEAD> <BODY LANG="en-US" DIR="LTR"> -<P ALIGN=CENTER STYLE="margin-bottom: 0in">README for Excel -spreadsheet file r/w access scripts for octave (> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">README +for Excel spreadsheet file r/w access scripts for octave (> 3.2.0)<BR><BR>Copyright (C) 2009, Philip Nienhuis <prnienhuis at -users.sf.net><BR><BR>This version 12 January 2010.</P> +users.sf.net><BR><BR>This version 18 January 2010.</FONT></FONT></P> <P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR> </P> <P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR> </P> -<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>EXCEL -.XLS SUPPORT FILES</B></U></FONT></P> -<P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR><B>doc/README-XLS.html</B></P> -<P ALIGN=LEFT STYLE="margin-bottom: 0in">This file.</P> -<P ALIGN=LEFT STYLE="margin-bottom: 0in"><BR><B>xlsread.m</B></P> -<P STYLE="margin-bottom: 0in">All-in-one function for reading data -from one specific worksheet in an Excel spreadsheet file. This script -has Matlab-compatible functionality.<BR><BR><B>xlswrite.m</B></P> -<P STYLE="margin-bottom: 0in">All-in-one function for writing data to -one specific worksheet in an Excel spreadsheet file. This script has -Matlab-compatible functionality. <BR><BR><B>xlsfinfo.m</B></P> -<P STYLE="margin-bottom: 0in">All-in-one function for exploring basic -properties of an Excel spreadsheet file. This script has -Matlab-compatible functionality.<BR><BR><B>xlsopen.m</B></P> -<P STYLE="margin-bottom: 0in">Function for "opening" (= -providing a handle to) an Excel spreadsheet file ("workbook"). -This function sorts out which interface to use for .xls access -(i.e.,COM; Java & Apache POI; JexcelAPI; etc.), but it's choice -can be overridden.<BR><BR><B>xls2oct.m</B></P> -<P STYLE="margin-bottom: 0in">Function for reading data from a -specific worksheet pointed to in a struct created by xlsopen.m. -xls2oct can be called multiple times consecutively using the same -pointer struct, each time allowing to read data from different ranges -and/or worksheets. Data are returned in the form of a 2D -heterogeneous cell array that can be parsed by parsecell.m. xls2oct -is a mere wrapper for interface-dependent scripts that do the actual -low-level reading .<BR><BR><B>oct2xls.m</B></P> -<P STYLE="margin-bottom: 0in">Function for writing data to a specific -worksheet pointed to in a struct created by xlsopen.m. octxls can be -called multiple times consecutively using the same pointer struct, -each time allowing to write data to different ranges and/or -worksheets. oct2xls is a mere wrapper for interface-dependent scripts -that do the actual low-level writing.<BR><BR><B>xlsclose.m</B></P> -<P STYLE="margin-bottom: 0in">Function for closing (the handle to) an -Excel workbook. When data have been written to the workbook oct2xls -will write the workbook to disk. Otherwise, the file pointer is -simply closed and possibly used interfaces for Excel access -(COM/ActiveX/Excel.exe) will be shut down properly.<BR><BR><B>parsecell.m</B></P> -<P STYLE="margin-bottom: 0in">Function for separating the data in raw -arrays returned by xls2oct, into numerical/logical and text (cell) -arrays.</P> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>EXCEL +.XLS SUPPORT FILES</B></U></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR><B>doc/README-XLS.html</B></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">This +file.</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR><B>xlsread.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">All-in-one +function for reading data from one specific worksheet in an Excel +spreadsheet file. This script has Matlab-compatible +functionality.<BR><BR><B>xlswrite.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">All-in-one +function for writing data to one specific worksheet in an Excel +spreadsheet file. This script has Matlab-compatible functionality. +<BR><BR><B>xlsfinfo.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">All-in-one +function for exploring basic properties of an Excel spreadsheet file. +This script has Matlab-compatible functionality.<BR><BR><B>xlsopen.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Function +for "opening" (= providing a handle to) an Excel +spreadsheet file ("workbook"). This function sorts out +which interface to use for .xls access (i.e.,COM; Java & Apache +POI; JexcelAPI; etc.), but it's choice can be overridden.<BR><BR><B>xls2oct.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Function +for reading data from a specific worksheet pointed to in a struct +created by xlsopen.m. xls2oct can be called multiple times +consecutively using the same pointer struct, each time allowing to +read data from different ranges and/or worksheets. Data are returned +in the form of a 2D heterogeneous cell array that can be parsed by +parsecell.m. xls2oct is a mere wrapper for interface-dependent +scripts that do the actual low-level reading .<BR><BR><B>oct2xls.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Function +for writing data to a specific worksheet pointed to in a struct +created by xlsopen.m. octxls can be called multiple times +consecutively using the same pointer struct, each time allowing to +write data to different ranges and/or worksheets. oct2xls is a mere +wrapper for interface-dependent scripts that do the actual low-level +writing.<BR><BR><B>xlsclose.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Function +for closing (the handle to) an Excel workbook. When data have been +written to the workbook oct2xls will write the workbook to disk. +Otherwise, the file pointer is simply closed and possibly used +interfaces for Excel access (COM/ActiveX/Excel.exe) will be shut down +properly.<BR><BR><B>parsecell.m</B></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Function +for separating the data in raw arrays returned by xls2oct, into +numerical/logical and text (cell) arrays.</FONT></FONT></P> <P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR> </P> -<P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>REQUIRED -SUPPORT SOFTWARE</B></U></FONT></P> -<P STYLE="margin-bottom: 0in"><BR>For the Excel/COM interface:</P> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>REQUIRED +SUPPORT SOFTWARE</B></U></FONT></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR>For +the Excel/COM interface:</FONT></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0in">A windows computer with Excel - installed</P> - <LI><P STYLE="margin-bottom: 0in">Octave-forge Windows-1.0.8 package - WITH LATEST SVN PATCHES APPLIED</P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">A + windows computer with Excel installed</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Octave-forge + Windows-1.0.8 package WITH LATEST SVN PATCHES APPLIED</FONT></FONT></P> </UL> <P STYLE="margin-left: 0.25in; text-indent: -0.26in; margin-bottom: 0in"> <BR> </P> <P STYLE="margin-left: 0.25in; text-indent: -0.26in; margin-bottom: 0in"> -For the Java / Apache POI / JExcelAPI interfaces (general):</P> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">For +the Java / Apache POI / JExcelAPI interfaces (general):</FONT></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0in">octave-forge java-1.2.5 package or - later version on Linux</P> - <LI><P STYLE="margin-bottom: 0in">octave-forge java-1.2.6 with - latest svn fixes on Windows/MingW</P> - <LI><P STYLE="margin-bottom: 0in">Java jre or jdk > 1.6.0 (hasn't - been tested with earlier versions)</P> - <LI><P STYLE="margin-bottom: 0in">./jre/lib/rt.jar in classpath</P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">octave-forge + java-1.2.5 package or later version on Linux</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">octave-forge + java-1.2.6 with latest svn fixes on Windows/MingW</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Java + jre or jdk > 1.6.0 (hasn't been tested with earlier versions)</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">./jre/lib/rt.jar + in classpath</FONT></FONT></P> </UL> -<P STYLE="margin-bottom: 0in">Apache POI specific:</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Apache +POI specific:</FONT></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0in">class .jars: - <B>poi-3.5-FINAL-<date>.jar</B> & + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">class + .jars: <B>poi-3.5-FINAL-<date>.jar</B> & <B>poi-ooxml-3.5-FINAL-<date>.jar</B> (or later versions) in - classpath</P> - <LI><P STYLE="margin-bottom: 0in">Get it here: - <A HREF="http://poi.apache.org/download.html">http://poi.apache.org/download.html</A></P> - <LI><P STYLE="margin-bottom: 0in">for OOXML support (only available - with Apache POI): + classpath</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Get + it here: <A HREF="http://poi.apache.org/download.html">http://poi.apache.org/download.html</A></FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">for + OOXML support (only available with Apache POI): </FONT></FONT> </P> - <P STYLE="margin-bottom: 0in">poi-ooxml-schemas-<version>.jar, - xbean.jar, dom4j-1.6.1.jar in javaclasspath. + <P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">poi-ooxml-schemas-<version>.jar, + xbean.jar, dom4j-1.6.1.jar in javaclasspath. </FONT></FONT> </P> - <P STYLE="margin-bottom: 0in">Get them here:</P> - <P STYLE="margin-bottom: 0in"><A HREF="http://poi.apache.org/download.html">http://poi.apache.org/download.html</A> - (“xmlbeans” and poi-ooxml-schemas)</P> - <P STYLE="margin-bottom: 0in"><A HREF="http://sourceforge.net/projects/dom4j/files">http://sourceforge.net/projects/dom4j/files</A> - (dom4j-<version>)</P> + <P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Get + them here:</FONT></FONT></P> + <P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><A HREF="http://poi.apache.org/download.html">http://poi.apache.org/download.html</A> + (“xmlbeans” and poi-ooxml-schemas)</FONT></FONT></P> + <P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><A HREF="http://sourceforge.net/projects/dom4j/files">http://sourceforge.net/projects/dom4j/files</A> + (dom4j-<version>)</FONT></FONT></P> </UL> -<P STYLE="margin-bottom: 0in">JExcelAPI specific:</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">JExcelAPI +specific:</FONT></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0in">class .jar: <B>jxl.jar</B> in - classpath</P> - <LI><P STYLE="margin-bottom: 0in">Get it here: - <A HREF="http://sourceforge.net/projects/jexcelapi/files/">http://sourceforge.net/projects/jexcelapi/files/</A></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">class + .jar: <B>jxl.jar</B> in classpath</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Get + it here: <A HREF="http://sourceforge.net/projects/jexcelapi/files/">http://sourceforge.net/projects/jexcelapi/files/</A></FONT></FONT></P> </UL> -<P STYLE="margin-bottom: 0in">Hint: simply put the relevant -javaaddpath statements in the .octaverc file.</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Hint: +simply put the relevant javaaddpath statements in the .octaverc file.</FONT></FONT></P> <P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR> </P> -<P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>USAGE</B></U></FONT></P> -<P STYLE="margin-bottom: 0in"><BR><B>xlsread</B> and <B>xlswrite</B> -are mere wrappers for <B>xlsopen</B>-<B>xls2oct</B>-<B>xlsclose</B>-<B>parsecell</B> -and <B>xlsopen</B>-<B>oct2xls</B>-<B>xlsclose</B> sequences, resp. -They exist for the sake of Matlab compatibility.<BR><BR><B>xlsfinf</B>o +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>USAGE</B></U></FONT></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR><B>xlsread</B> +and <B>xlswrite</B> are mere wrappers for +<B>xlsopen</B>-<B>xls2oct</B>-<B>xlsclose</B>-<B>parsecell</B> and +<B>xlsopen</B>-<B>oct2xls</B>-<B>xlsclose</B> sequences, resp. They +exist for the sake of Matlab compatibility.<BR><BR><B>xlsfinf</B>o can be used for finding out what worksheet names exist in the file. For OOXML files the input parameter REQINTF should be specified with a value of 'poi' (case-insensitive) and -obviously- the complete POI @@ -172,89 +185,94 @@ Add new data to spreadsheet</I><BR><B>xlh = oct2xls (Newdata, xlh, <AnotherWorksheet>, <Range>)</B><BR><BR><I># Close the workbook and write it to disk; then clear the handle</I><BR><B>xlh = -xlsclose (xlh)</B><BR><B>clear xlh</B></P> +xlsclose (xlh)</B><BR><B>clear xlh</B></FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P STYLE="margin-bottom: 0in">When not using the COM interface, -specify a value of 'POI' for parameter REQINTF when accessing OOXML -files in xlsread, xlswrite, xlsopen, xlsfinfo (and be sure the -complete Apache POI interface is installed).</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">When +not using the COM interface, specify a value of 'POI' for parameter +REQINTF when accessing OOXML files in xlsread, xlswrite, xlsopen, +xlsfinfo (and be sure the complete Apache POI interface is +installed).</FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>MATLAB -COMPATIBILITY</B></U></FONT></P> -<P STYLE="margin-bottom: 0in"><BR><B>xlsread</B>, <B>xlswrite</B> and -<B>xlsfinfo</B> are for the most part Matlab-compatible. Some small -differences are mentioned below.<BR><BR><B>xlsread</B><BR>Matlab's -<B>xlsread</B> supports invoking extra functions while reading -("passing function handle"); octave not. But this can be -simulated outside <B>xlsread</B>.<BR><BR>Matlab's <B>xlsread</B> -flags some spreadsheet errors, octave-forge just returns blank -cells.<BR><BR>When using a Java interface, octave-forge returns info -about the actual (rather than the requested) cell range where the -data came from; Matlab and ActiveX/Excel can't. This is due to Excel -automatically trimming returned arrays from empty outer columns and -rows. When using COM, octave has the same limitation.<BR>Personally I -find it very useful to know from what part of a worksheet the data -originate so I've put quite some effort in it :-)</P> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>MATLAB +COMPATIBILITY</B></U></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><BR><B>xlsread</B>, +<B>xlswrite</B> and <B>xlsfinfo</B> are for the most part +Matlab-compatible. Some small differences are mentioned +below.<BR><BR><B>xlsread</B><BR>Matlab's <B>xlsread</B> supports +invoking extra functions while reading ("passing function +handle"); octave not. But this can be simulated outside +<B>xlsread</B>.<BR><BR>Matlab's <B>xlsread</B> flags some spreadsheet +errors, octave-forge just returns blank cells.<BR><BR>When using a +Java interface, octave-forge returns info about the actual (rather +than the requested) cell range where the data came from; Matlab and +ActiveX/Excel can't. This is due to Excel automatically trimming +returned arrays from empty outer columns and rows. When using COM, +octave has the same limitation.<BR>Personally I find it very useful +to know from what part of a worksheet the data originate so I've put +quite some effort in it :-)</FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P STYLE="margin-bottom: 0in">Matlab's xlsread ignores all -non-numeric data values outside the smallest rectangle encompassing -all numerical values. Octave's xlsread doesn't. This means that -Matlab ignores all row/column headers, not very user-friendly IMO. -<BR><BR>When using the Java interface, reading and writing xls-files -by octave-forge is platform-independent. On systems w/o Excel Matlab -can only read Excel 95 formatted .xls files.<BR><BR>Matlab's <B>xlsread</B> -invokes <B>csvread</B> if no Excel interface is present. -Octave-forge's <B>xlsread</B> doesn't.<BR><BR><B>xlswrite</B><BR>Octave-forge's +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Matlab's +xlsread ignores all non-numeric data values outside the smallest +rectangle encompassing all numerical values. Octave's xlsread +doesn't. This means that Matlab ignores all row/column headers, not +very user-friendly IMO. <BR><BR>When using the Java interface, +reading and writing xls-files by octave-forge is +platform-independent. On systems w/o Excel Matlab can only read Excel +95 formatted .xls files.<BR><BR>Matlab's <B>xlsread</B> invokes +<B>csvread</B> if no Excel interface is present. Octave-forge's +<B>xlsread</B> doesn't.<BR><BR><B>xlswrite</B><BR>Octave-forge's <B>xlswrite</B> works on systems w/o Excel support, Matlab's doesn't -(properly).</P> +(properly).</FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P STYLE="margin-bottom: 0in">When specifying a sheet number larger -than the number of existing sheets in an .xls file, Matlab's xlswrite -adds empty sheets until the new sheet number is created; Octave's -xlswrite only adds one sheet called “Sheet<number>” -where <number> is the specified sheet number. +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">When +specifying a sheet number larger than the number of existing sheets +in an .xls file, Matlab's xlswrite adds empty sheets until the new +sheet number is created; Octave's xlswrite only adds one sheet called +“Sheet<number>” where <number> is the +specified sheet number. </FONT></FONT> </P> -<P STYLE="margin-bottom: 0in">Even better (IMO) while M's xlswrite -always creates Sheet1/Sheet2/Sheet3 when creating a new spreadsheet, -octave's xlswrite only creates the requested worksheet.</P> -<P STYLE="margin-bottom: 0in">And octave doesn't touch the “active -sheet”.</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Even +better (IMO) while M's xlswrite always creates Sheet1/Sheet2/Sheet3 +when creating a new spreadsheet, octave's xlswrite only creates the +requested worksheet.</FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">And +octave doesn't touch the “active sheet”.</FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P STYLE="margin-bottom: 0in">If the specified write range is larger -than the actual data array, Matlab's xlswrite adds #N/A cells to fill -up the lowermost rows and rightmost columns; octave-forge's xlswrite -doesn't. <BR><BR><B>xlsfinfo</B><BR>When invoking Excel/COM -interface, octave-forge's <B>xlsfinfo</B> also echoes the type of -sheet (worksheet, chart), not just the sheet names. Using Java I -haven't found similar functionality (yet).</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">If +the specified write range is larger than the actual data array, +Matlab's xlswrite adds #N/A cells to fill up the lowermost rows and +rightmost columns; octave-forge's xlswrite doesn't. <BR><BR><B>xlsfinfo</B><BR>When +invoking Excel/COM interface, octave-forge's <B>xlsfinfo</B> also +echoes the type of sheet (worksheet, chart), not just the sheet +names. Using Java I haven't found similar functionality (yet).</FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>COMPARISON -OF INTERFACES & USAGE</B></U></FONT></P> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>COMPARISON +OF INTERFACES & USAGE</B></U></FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P STYLE="margin-bottom: 0in">Using Excel itself (through COM / -ActiveX on Windows systems) is probably the most robust and versatile -and especially FAST option. There's one gotcha: in case of some type -of COM errors Excel will keep running invisibly, you can only end it -through Task Manager.<BR>A tiny problem is that one cannot find out -easily through COM what file types are supported; xls, wks, wk1, -xlsx, etc.<BR>Another -obvious- limitation is that COM Excel access -only works on Windows systems where Excel is installed.<BR>As -Excel/COM trims returned arrays from empty outer row and columns it -is not easy to find out from what cell range the returned data -originate.<BR><BR>JExcelAPI (Java-based and therefore -platform-independent) is proven technology but switching between -reading and writing is quite involved and memory-hungry when +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Using +Excel itself (through COM / ActiveX on Windows systems) is probably +the most robust and versatile and especially FAST option. There's one +gotcha: in case of some type of COM errors Excel will keep running +invisibly, you can only end it through Task Manager.<BR>A tiny +problem is that one cannot find out easily through COM what file +types are supported; xls, wks, wk1, xlsx, etc.<BR>Another -obvious- +limitation is that COM Excel access only works on Windows systems +where Excel is installed.<BR>As Excel/COM trims returned arrays from +empty outer row and columns it is not easy to find out from what cell +range the returned data originate.<BR><BR>JExcelAPI (Java-based and +therefore platform-independent) is proven technology but switching +between reading and writing is quite involved and memory-hungry when processing large spreadsheets. As the docs state, JExcelAPI is optimized for reading and it does do that well - but slower than Excel/COM. The fact that upon a switch from reading to writing the @@ -264,68 +282,129 @@ next write() doesn't seem to work. The first is by JExcelAPI design, the second is probably a bug (in octave-forge/Java or JExcelAPI ? I don't know). Adding data to existing spreadsheets does work, but IMO -undue user confidence is needed.</P> -<P STYLE="margin-bottom: 0in">JExcelAPI supports BIFF5 and BIFF8 -(Excel 95 and Excel 97-2003, respectively).</P> -<P STYLE="margin-bottom: 0in">JexcelAPI, unlike ApachePOI, doesn't -evaluate functions while reading but instead relies on cached results -(i.e. results computed by Excel itself). Depending on Excel settings -(“Automatic calculation” ON or OFF) this may or may not -yield incorrect results.<BR><BR>Apache POI (Java-based and -platform-independent too) is based on the OpenOffice.org I/O Excel -r/w routines. It is a little more versatile than JExcelAPI, while it -doesn't support BIFF5 it does support BIFF8 (Excel 97 – 2003) -and OOXML (Excel 2007).</P> -<P STYLE="margin-bottom: 0in">It is slower than native JXL let alone -Excel & COM but it features active formula evaluation, although -at the moment (v. 3.6) not all Excel functions have been implemented. -I've made the relevant script (xls2jpoi2oct) fall back on cached -formula results (and yield a suitable warning) for non-implemented -Excel functions while reading Excel files.<BR><BR>All in all, of the -two Java options I'd prefer Apache POI rather than JexcelAPI. But the -latter is indispensable for BIFF5 formats.</P> +undue user confidence is needed.</FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">JExcelAPI +supports BIFF5 and BIFF8 (Excel 95 and Excel 97-2003, respectively).</FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">JexcelAPI, +unlike ApachePOI, doesn't evaluate functions while reading but +instead relies on cached results (i.e. results computed by Excel +itself). Depending on Excel settings (“Automatic calculation” +ON or OFF) this may or may not yield incorrect results.<BR><BR>Apache +POI (Java-based and platform-independent too) is based on the +OpenOffice.org I/O Excel r/w routines. It is a little more versatile +than JExcelAPI, while it doesn't support BIFF5 it does support BIFF8 +(Excel 97 – 2003) and OOXML (Excel 2007).</FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">It +is slower than native JXL let alone Excel & COM but it features +active formula evaluation, although at the moment (v. 3.6) not all +Excel functions have been implemented. I've made the relevant script +(xls2jpoi2oct) fall back on cached formula results (and yield a +suitable warning) for non-implemented Excel functions while reading +Excel files.<BR><BR>All in all, of the two Java options I'd prefer +Apache POI rather than JexcelAPI. But the latter is indispensable for +BIFF5 formats.</FONT></FONT></P> <P STYLE="margin-bottom: 0in"><BR> </P> <P STYLE="margin-bottom: 0in"><BR> </P> -<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>DEVELOPMENT</B></U></FONT></P> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>A +NOTE ON JAVA MEMORY USAGE</B></U></FONT></FONT></P> +<P STYLE="margin-bottom: 0in"><BR> +</P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><B>Java +memory pool allocation size</B></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">The +java virtual machine (JVM) initializes one big chunk of your +computer's RAM in which all java classes and methods etc. are to be +loaded: the java memory pool. It does this because java has a very +sophisticated “garbage collection” system. At least on +Windows, the initial size is 2MB and the maximum size is 64MB. On +Linux this allocated size is much bigger. This part of memory is +where the java-based ODS octave routines (and the java-based xls +routines) live and keep their variables etc.</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">For +transferring large pieces of information to and from spreadsheets you +might hit the limits of this pool. E.g. to be able to handle I/O of +an array of around 50,000 cells I needed a memory pool size of 512 +MB.</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">The +memory size can be increased by inserting a file called “java.opts” +(without quotes) in the directory +./share/octave/packages/java-<version> (where the script file +javaclasspath.m is located), containing just the following lines:</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; text-decoration: none"><BR> +</P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; text-decoration: none"><FONT FACE="Courier New, monospace"><FONT SIZE=2 STYLE="font-size: 11pt"><B>-Xms16m</B></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; text-decoration: none"><FONT FACE="Courier New, monospace"><FONT SIZE=2 STYLE="font-size: 11pt"><B>-Xmx512m</B></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<BR> +</P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">(where +16 = initial size, 512 = maximum size, m stands for Megabyte).</FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<BR> +</P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">After +processing a large chunk of spreadsheet information you might notice +that octave's memory footprint does not shrink so it looks like +java's memory pool does not shrink back; but rest assured, the memory +footprint is the <I>allocated</I><SPAN STYLE="font-style: normal"> +(reserved) memory size, not the actual used size. After the JVM has +done its garbage collection, only the so-called “working set” +of the memory allocation is really in use and that is a trimmed-down +part of the memory allocation pool. On Windows systems it often +suffices to minimize the octave terminal for a few seconds to get a +more reasonable memory footprint.</SPAN></FONT></FONT></P> +<P ALIGN=LEFT STYLE="margin-bottom: 0in; font-weight: normal; text-decoration: none"> +<BR> +</P> +<P STYLE="margin-bottom: 0in"><BR> +</P> +<P ALIGN=CENTER STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=4 STYLE="font-size: 15pt"><U><B>DEVELOPMENT</B></U></FONT></FONT></P> <P ALIGN=CENTER STYLE="margin-bottom: 0in"><BR> </P> -<P STYLE="margin-bottom: 0in"><B>xlsopen</B>/<B>xlsclos</B>e and -friends have been written so that adding other interfaces (Perl? +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt"><B>xlsopen</B>/<B>xlsclos</B>e +and friends have been written so that adding other interfaces (Perl? native octave? ...?) should be very easily accomplished. <B>xlsopen</B> merely needs two stanzas, <B>xls2oct</B>, <B>oct2xls</B> and <B>xlsfinfo</B> each need an additional elseif clause, and <B>xlsclose</B> needs a -small stanza for closing the pointer struct and writing to disk. +small stanza for closing the pointer struct and writing to disk. </FONT></FONT> </P> -<P STYLE="margin-bottom: 0in">The real work lies in creating the -relevant <B>xls2<...>2oct</B> & <B>oct2<...>2xls</B> -scripts, but that shouldn't be really hard. Separating the file -access functions and the actual reading/writing from/to the workbook -in memory has made developer's life (I mean: my time developing this -stuff) much easier.<BR><BR>Some other options for development (who?):</P> +<P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">The +real work lies in creating the relevant <B>xls2<...>2oct</B> & +<B>oct2<...>2xls</B> scripts, but that shouldn't be really +hard. Separating the file access functions and the actual +reading/writing from/to the workbook in memory has made developer's +life (I mean: my time developing this stuff) much easier.<BR><BR>Some +other options for development (who?):</FONT></FONT></P> <UL> - <LI><P STYLE="margin-bottom: 0in">Speeding up, especially Java - worksheet/cell access. For cracks, not me.</P> - <LI><P STYLE="margin-bottom: 0in">Automatic conversion of Excel - date/time values into octave ones and vice versa. But then again - Excel's dates are 01-01-1900 based (octave's 0-0-0000) and buggy - (Excel thinks 1900 is a leap year), and I sometimes have to use - dates from before 1900. Maybe as an option?</P> - <LI><P STYLE="margin-bottom: 0in">Creating Excel graphs (a - significant enterprise to write from scratch).</P> - <LI><P STYLE="margin-bottom: 0in">Support for "passing function - handle" in xlsread.</P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Speeding + up, especially Java worksheet/cell access. For cracks, not me.</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Automatic + conversion of Excel date/time values into octave ones and vice + versa. But then again Excel's dates are 01-01-1900 based (octave's + 0-0-0000) and buggy (Excel thinks 1900 is a leap year), and I + sometimes have to use dates from before 1900. Maybe as an option?</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Creating + Excel graphs (a significant enterprise to write from scratch).</FONT></FONT></P> + <LI><P STYLE="margin-bottom: 0in"><FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Support + for "passing function handle" in xlsread.</FONT></FONT></P> </UL> <P STYLE="margin-left: 0.26in; text-indent: -0.26in; margin-bottom: 0in"> <BR> </P> <P STYLE="margin-left: 0.26in; text-indent: -0.26in; margin-bottom: 0in"> -Enjoy!</P> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Enjoy!</FONT></FONT></P> <P STYLE="margin-left: 0.26in; text-indent: -0.26in; margin-bottom: 0in"> <BR> </P> <P ALIGN=CENTER STYLE="margin-left: 0.26in; text-indent: -0.26in; margin-bottom: 0in"> -Philip Nienhuis, Jan 12, 2010</P> +<FONT FACE="Arial, sans-serif"><FONT SIZE=2 STYLE="font-size: 11pt">Philip +Nienhuis, Jan 18, 2010</FONT></FONT></P> </BODY> </HTML> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |