2010-01-11 119 views
3

有什麼工具可將OpenOffice或Excel電子表格(及其所有公式)轉換爲可在運行時調用的Java對象?將電子表格公式轉換爲java

很明顯,這隻會形成一個計算引擎,只是關於數字和文本,而不是定時或API調用。

即使命名單元格區域被用來(有效)命名變量,輸出代碼也可能難以理解。它需要重構才能更像普通的Java代碼。不過,我認爲這對原型化某些數據處理類型作業很有用。或者用於嵌入由高級Excel用戶維護的一些計算引擎。

編輯:一個簡單的例子:

APPEARANCE

 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 

單元名稱

 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 

公式

 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 

將轉化爲Java作爲類似:

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); 
    } 
} 

我會承擔細胞固定型 - 無論是java.math.BigDecimal的形式或一個字符串。

+0

請添加呈現出源電子表格和內容示例你期望生成的代碼。 – 2010-01-11 18:27:45

+0

單元格命名是Excel中的一項標準功能。我在示例中使用了BigDecimal來減少四捨五入的問題(尤其是貨幣計算)。 – martinr 2010-01-11 18:57:23

+0

很明顯,上面的代碼生成示例有一個基本的缺陷,即它不代表在Java類中使用2D數組的表單。它需要做到這一點(並隱藏命名單元訪問後面的getters和setters),以支持SUM,MATCHES,LOOKUP或任何引用單元格範圍。 – martinr 2010-01-11 19:53:32

回答

4
  • Apache POI項目提供可讀取(大部分)Excel電子表格的Java代碼。

  • Jacob的另一個項目爲任意Windows程序的COM自動化提供了一個Java接口,當然還包括Excel。你基本上是使用Java從外部使用Excel的API。

+0

我注意到POI會進行一些基本的公式評估,並支持使用插件類型方法擴展POI以添加更高級的公式支持。太棒了。謝謝。 – martinr 2010-01-11 19:16:58

1

我們做了一個類似的項目與SmartXLS for java。 它有一個運行時計算引擎和支持加載項公式。源工作簿被轉換爲一個java類,可以嵌入到java程序中,並使用參數調用,就像在Excel中輸入一樣。

1

還有一個選項是Expr4J。它實現了與Excel兼容的通用表達式語言分析器,並具有用於計算表達式圖的依賴性引擎。它還實現了Excel內置函數的大部分功能。

從網站,一個例子是:

public class DependencyExample 
{ 
    public static void main(String[] args) throws Exception { 
     DependencyEngine e = new DependencyEngine(new BasicEngineProvider()); 
     e.set("B1", "=A1*2"); 
     e.set("A1", "=12*2"); 
     e.set("C1", "=B1*A1"); 
     System.out.println(e.getValue(Range.valueOf("B1"))); 
     System.out.println(e.getValue(Range.valueOf("C1"))); 
     e.set("A1", "2"); 
     System.out.println(e.getValue(Range.valueOf("B1"))); 
     System.out.println(e.getValue(Range.valueOf("C1"))); 
    } 
} 

(我的項目工作,所以顯然是感興趣的任何反饋)


+0

這個項目的狀態是什麼?源代碼在哪裏? – 2013-05-17 15:12:28