#电子表格 #Excel #解析器 #日期时间

公式

电子表格类似公式的解析器和评估器

4 个版本

0.1.0 2022年11月11日
0.0.3 2022年9月11日
0.0.2 2022年9月8日
0.0.1 2022年9月5日

#1522 in 解析器实现

MIT 许可证

130KB
2.5K SLoC

Rust 2K SLoC // 0.1% comments Pest 419 SLoC // 0.5% comments

Crates.io npm Workflow Status

Formula

电子表格类似公式的解析器和评估器

Formula 处于早期阶段,尚未准备好用于生产环境。

目前我们拥有以下功能

  • 18 个日期时间函数
  • 26 个文本函数
  • 26 个数学函数
  • 7 个逻辑函数
  • 2 个网络函数
  • 以及所有算术和比较运算符

安装和使用

Rust

使用 cargo add formula 命令将此库添加到您的项目中,或者将 formula = "*" 添加到您的 Cargo.toml 文件中。

使用方法类似于以下代码

use formula::{Formula, Expr, Result};

fn main() -> Result<()> {
    let formula = Formula::new("=UPPER(TRIM('   Hello '))")?;
    let value = formula.parse()?;
    assert_eq!(value, Expr::String("HELLO".to_string()));
    Ok(())
}
JavaScript

使用 npm install formula-wasm 将此库添加到您的项目中,或者将 formula-wasm 添加到您的 package.json 文件中。

使用方法类似于以下代码

import { parse } from 'formula-wasm';

const value = parse('=UPPER(TRIM("   Hello "))');
console.assert(value, "HELLO");

我们目前不支持的功能

  • 我们不支持世界上所有的现有函数,但我们愿意添加更多,比如 Excel 函数、Google Sheets 函数等等
  • 目前,我们不支持表格数据。这意味着您需要提取表格数据并将它们的值传递给此库
  • 我们不支持像 1+1 这样的简单公式,或者作为参数使用,例如 AND(1>3, 1<3)SUM(2-1, 2)。相反,您可以使用我们的 F. 函数,例如 AND(F.GT(1, 3), F.LT(1, 3))SUM(F.SUB(2, 1), 2)
  • 我们仍然不支持括号来改变运算顺序,但您可以使用我们的 F. 函数。所以例如,而不是使用 2*(1+1),您应该使用 F.MUL(2, F.ADD(1, 1))

贡献

我们非常希望得到您的贡献!请阅读我们的贡献指南 以开始。

灵感来源于

许可证

本项目受MIT许可证的许可。有关更多信息,请参阅LICENSE 文件。

依赖项

~3–16MB
~209K SLoC