преобразовать формулы электронных таблиц в Java - PullRequest
4 голосов
/ 11 января 2010

Какие инструменты доступны для преобразования электронной таблицы 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.

Ответы [ 4 ]

4 голосов
/ 11 января 2010
  • Проект Apache POI предоставляет код Java, который может читать (в основном) электронные таблицы Excel.

  • Другой проект, Jacob, предоставляет Java-интерфейс для автоматизации COM произвольных программ Windows, конечно, включая Excel. По сути, вы работаете с API Excel снаружи, на Java.

1 голос
/ 02 февраля 2010

Еще одна опция - 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")));
    }
}

(я работаю над проектом, поэтому, очевидно, был бы заинтересован в любой обратной связи)


1 голос
/ 28 января 2010

Мы сделали аналогичный проект с SmartXLS для Java . Он имел подсчет времени выполнения и поддержку формул надстроек. Исходная рабочая книга преобразуется в Java-класс, который может быть встроен в Java-программу и вызывается с параметрами, аналогичными вводу в Excel.

1 голос
/ 11 января 2010

JExcelApi позволяет загружать файл .xls и читать / записывать в ячейки.

http://www.andykhan.com/jexcelapi/

...