libformula, вероятно, хорошее место для начала. Вот доказательство концепции:
$ excel 'TRIM(" abc 123 ")'
abc 123
где excel
это простой скрипт:
#!/bin/sh
java -cp /usr/share/java/commons-logging.jar:libformula/demo:libbase/dist/libbase-6.1-SNAPSHOT.jar:libformula/dist/libformula-6.1-SNAPSHOT.jar:/home/cwarden/git/excel/src org.xerus.excel.Excel "$1"
и org.xerus.excel.Excel
принимает строку из ARGV и оценивает его как формулу:
package org.xerus.excel;
import org.pentaho.reporting.libraries.formula.EvaluationException;
import org.pentaho.reporting.libraries.formula.Formula;
import org.pentaho.reporting.libraries.formula.DefaultFormulaContext;
import org.pentaho.reporting.libraries.formula.parser.ParseException;
public class Excel {
public static void main(final String[] args) throws ParseException, EvaluationException {
final Formula f = new Formula(args[0]);
f.initialize(new DefaultFormulaContext());
final Object o = f.evaluate();
System.out.println(o);
}
}
libformula включает демо-программа, org.pentaho.reporting.libraries.formula.demo.PrintAllFunctions
, которая выводит все поддерживаемые функции:
Category User-Defined
ARRAYCONCATENATE, ARRAYCONTAINS, ARRAYLEFT, ARRAYMID, CSVARRAY, CSVTEXT, NORMALIZEARRAY, NULL, PARSEDATE, SEQUENCEQUOTER
Category Information
CHOOSE, COUNT, COUNTA, COUNTBLANK, ERROR, HASCHANGED, INDEX, ISBLANK, ISERR, ISERROR, ISEVEN, ISLOGICAL, ISNA, ISNONTEXT, ISNUMBER, ISODD, ISREF, ISTEXT, LOOKUP, NA, VALUE
Category Rounding
INT
Category Mathematical
ABS, ACOS, ACOSH, ASIN, ATAN, ATAN2, AVERAGE, AVERAGEA, COS, EVEN, EXP, LN, LOG10, MAX, MAXA, MIN, MINA, MOD, N, ODD, PI, POWER, SIN, SQRT, SUM, SUMA, VAR
Category Text
ARRAYRIGHT, ASC, CHAR, CLEAN, CODE, CONCATENATE, EXACT, FIND, FIXED, FIXED, LEFT, LEN, LOWER, MESSAGE, MID, PROPER, REPLACE, REPT, RIGHT, SEARCH, STRINGCOUNT, SUBSTITUTE, T, TEXT, TRIM, UNICHAR, UNICODE, UPPER, URLENCODE
Category Date/Time
DATE, DATEDIF, DATETIMEVALUE, DATEVALUE, DAY, DAYS, HOUR, MINUTE, MONTH, MONTHEND, NOW, PREVWEEKDAY, SECOND, TIME, TIMEVALUE, TODAY, WEEKDAY, YEAR, YESTERDAY
Category Logical
AND, FALSE, IF, IFNA, NOT, OR, TRUE, XOR
Category Database
BEGINSWITH, CONTAINS, ENDSWITH, EQUALS, IN, LIKE
Возможно, возможно с LibreOffice (что может быть написано на Python). Но это слухи, я не знаю деталей. –
Если ваши формулы такие простые, вы можете закодировать их на каком-то другом языке (Common Lisp, Python, Lua, C++, ...) –
Если вы просто хотите, чтобы функции и не взаимодействовать с файлами excel, я бы также предложил посмотреть на что-то вроде Python. – Holloway