Какие инструменты доступны для преобразования электронной таблицы OpenOffice или Excel (со всеми ее формулами) в объект Java, который можно вызывать во время выполнения?
Очевидно, что это только сделало бы механизм вычислений и было бы только о числах и тексте, а не о времени или вызовах API.
Даже если именованные диапазоны ячеек используются (для эффективного) именования переменных, выходной код, вероятно, будет трудным для понимания. Потребуется рефакторинг, чтобы получить больше похожий на нормальный Java-код. Однако я думаю, что это было бы полезно для создания прототипов некоторых заданий типа обработки данных. Или для встраивания некоторых вычислительных механизмов, поддерживаемых опытным пользователем Excel.
Редактировать : Тривиальный пример:
ВНЕШНИЙ
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, либо String.