title: convert spreadsheet formulas to java
body: <p>What tools are available to convert an OpenOffice or Excel spreadsheet (with all its formulas) into a Java object that can be called at run-time?</p>
  
  <p>Obviously this would only make a calculation engine and just be about numbers and text, not timing or API calls.</p>
  
  <p>Even with named cell ranges being used to (effectively) name variables the output code would presumably be difficult to understand.  It would need refactoring to get more like normal Java code.  However I think it would be useful for prototyping some data processing type jobs.  Or for embedding some calculation engines maintained by an advanced Excel user.</p>
  
  <p><strong>Edit</strong> : A trivial example:</p>
  
  <p>APPEARANCE</p>
  
  <pre><code>        A               B               C               D
  1       Mortgage Value  100,000.00
  2       Interest rate   4.5%
  3       Type            Interest-only
  4       Years           3
  5       Regular payment 4,500.00
  6       Total interest  13,500.00
  </code></pre>
  
  <p>CELL NAMES</p>
  
  <pre><code>        A               B               C               D
  1       Mortgage Value  VALUE
  2       Interest rate   INTEREST
  3       Type            TYPE
  4       Years           YEARS
  5       Regular payment REGPYMT
  6       Total interest  TOTALPYMT
  </code></pre>
  
  <p>FORMULAS</p>
  
  <pre><code>        A               B               C               D
  1       Mortgage Value  100,000.00
  2       Interest rate   4.5%
  3       Type            Interest-only
  4       Years           3
  5       Regular payment =VALUE*INTEREST
  6       Total interest  =YEARS*REGPYMT
  </code></pre>
  
  <p>would translate into Java as something like:</p>
  
  <pre><code>package example.calcengine;
  import java.math.*;
  public class MyCalcEngine {
  
      // unnamed cells
      public String A1 = "Mortgage Value";
      public String A2 = "Interest rate";
      public String A3 = "Type";
      public String A4 = "Years";
      public String A5 = "Regular payment";
      public String A6 = "Total interest";
  
      // named cells
      public BigDecimal VALUE = new BigDecimal(100000.00);
      public BigDecimal INTEREST = new BigDecimal(0.045);
      public String TYPE = "Interest-only";
      public BigDecimal YEARS = new BigDecimal(3);
      public BigDecimal REGPYMT = new BigDecimal(0);
      public BigDecimal TOTALPYMT = new BigDecimal(0);
  
      // formulas
      public void calculate() {
        REGPYMT = VALUE.multiply(INTEREST);
        TOTALPYMT = REGPYMT.multiply(YEARS);
      }
  }
  </code></pre>
  
  <p>I'd assume fixed type for cells - either a java.math.BigDecimal or a String.</p>