Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Excel函数的命令行执行_Linux_Windows_Excel_Command Line - Fatal编程技术网

Linux Excel函数的命令行执行

Linux Excel函数的命令行执行,linux,windows,excel,command-line,Linux,Windows,Excel,Command Line,可以从命令行调用Excel函数吗 我不想与任何文件进行任何交互。我只想像其他命令行工具一样使用这些函数。它应该只起到一些一次性的作用 例如,我希望有一种方法可以做这样的事情: $ excel roman(15) XV $ excel randbetween(10,20) 14 当然,并非所有可用函数都可以这样运行,但是越多越好 是否有任何本机应用程序(在Linux或Windows上,但最好是跨平台)可以 提供这种选择吗 或者我们可以通过操纵excel本身来实现这一点吗 (尽管,根据我所搜索的

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

我不想与任何文件进行任何交互。我只想像其他命令行工具一样使用这些函数。它应该只起到一些一次性的作用

例如,我希望有一种方法可以做这样的事情:

$ excel roman(15)
XV

$ excel randbetween(10,20)
14
当然,并非所有可用函数都可以这样运行,但是越多越好

  • 是否有任何本机应用程序(在Linux或Windows上,但最好是跨平台)可以 提供这种选择吗

  • 或者我们可以通过操纵excel本身来实现这一点吗 (尽管,根据我所搜索的内容,这似乎并不正确 可能吗


  • 一种方法是编写脚本(VBScript或其他脚本环境),以:

  • 打开Excel实例(不可见)
  • 将字符串附加到“=”符号
  • 将公式存放在单元格中
  • 计算工作表
  • 向用户显示结果
  • 关闭Excel的实例

    这需要安装Excel或访问OneDrive

  • 这可以使用Java API for Microsoft文档在Java中完成。在内存中创建Excel工作表,从命令行读取公式,然后打印结果

    下面的程序执行此操作:

    package stackoverflow.excel.formula;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.CellValue;
    import org.apache.poi.ss.usermodel.FormulaEvaluator;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class Main {
    
        public static void main(String[] args) {
            String formula = args[0];
    
            // Create a cell and load the formula.
            XSSFWorkbook workbook = new XSSFWorkbook();
            XSSFSheet sheet = workbook.createSheet();
            Row row = sheet.createRow(0);
            Cell cell = row.createCell(0);
            cell.setCellFormula(formula);
    
            // Evaluate the formula.
            FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
            CellValue cellValue = evaluator.evaluate(cell);
            switch (cellValue.getCellType()) {
            case Cell.CELL_TYPE_BOOLEAN:
                System.out.println(cellValue.getBooleanValue());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                System.out.println(cellValue.getNumberValue());
                break;
            case Cell.CELL_TYPE_STRING:
                System.out.println(cellValue.getStringValue());
                break;
            default: 
                break;
            }
        }
    
    }
    
    构建和打包程序的简单Maven pom.xml:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>stackoverflow</groupId>
      <artifactId>excel_formula_cli</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <description>https://stackoverflow.com/questions/27843945/command-line-execution-of-excel-functions</description>
    
      <dependencies>
          <dependency>
              <groupId>org.apache.poi</groupId>
              <artifactId>poi-ooxml</artifactId>
              <version>3.9</version>
          </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.2</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>stackoverflow.excel.formula.Main</mainClass>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    
    
    </project>
    
    
    4.0.0
    栈溢出
    查看受支持函数的列表。

    可能是一个很好的开始。以下是概念证明:

    $ excel 'TRIM(" abc 123  ")'
    abc 123
    
    其中
    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"
    
    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
    

    你能用一个例子来编辑你的答案吗?我对VBScript一点也不熟悉。但我猜它与VBA或VB没有太大的区别。也许可以使用LibreOffice(可能是Python脚本)。但这是一个谣言,我不知道你的公式是多么简单,你可以用其他语言(普通LISP,Python,Lua,C++,……)来编码它们。如果你只需要函数而不与Excel文件交互,我也建议寻找一些类似Python的东西。@ Trengot,我知道Python,但我希望我能找到一些像Excel一样具有相同功能集的工具。我不想听起来好像我认为python没有excel强大。在我看来,情况正好相反。无论如何,这是一个很好的建议。现在,我正试图通过google找到是否可以在命令行中单独运行该函数,而不必键入“python-c…”@BasileStarynkevitch,这是我认为作为最后手段我会做的。我很懒,我还以为是别人干的……:)谢谢这听起来正是我想要的。