Excel 函数的命令行执行

5 linux windows excel command-line

可以从命令行调用 Excel 函数吗?

我不希望与任何文件进行任何交互。我只想像其他命令行工具一样使用这些函数。它应该仅仅服务于一些一次性的目的。

例如,如果有办法做这样的事情,我会喜欢它:

$ excel roman(15)
XV

$ excel randbetween(10,20)
14
Run Code Online (Sandbox Code Playgroud)

当然,并不是所有可用的功能都可以这样运行,但越多越好。

  1. 是否有任何本机应用程序(在 Linux 或 Windows 上,但最好是跨平台的)提供这种选项?

  2. 或者我们有什么方法可以操纵excel本身来做到这一点(尽管根据我搜索的内容,这似乎不可能)?

xn.*_*xn. 4

libformula可能是一个很好的起点。这是概念证明:

$ excel 'TRIM(" abc 123  ")'
abc 123
Run Code Online (Sandbox Code Playgroud)

excel这个简单的 shell 脚本在哪里:

#!/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"
Run Code Online (Sandbox Code Playgroud)

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);
        }
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)