跳转到主要内容

实现Python中MS Excel函数的等价函数。

项目描述

XLFunctions

https://travis-ci.org/bradbase/xlfunctions.png?branch=master https://coveralls.io/repos/github/bradbase/xlfunctions/badge.svg?branch=master https://img.shields.io/pypi/v/xlfunctions.svg https://img.shields.io/pypi/pyversions/xlfunctions.svg Package stability

一组类,用于实现Microsoft Excel中使用的函数。目的是成为支持评估Excel计算的确切库。

在Python宇宙中正在开发多种解决方案,它们正在编写相同的函数的自己的实现。通常,这些实现只是包装pandas、numpy或scipy。虽然可能适合这些解决方案的目的,但计算结果可能不一定与Excel一致。

也有一些库尝试过实现通用的Python版Excel函数,但由于它们没有被库积极使用,因此似乎很快就被放弃了。xlfunctions正被xlcalculator(对Koala2的尝试性重写,以及FlyingKoala)使用。

在计算过程中,Excel偶尔会做一些不寻常的事情,这些事情可能并不总是与Excel以外的领域接受的事情一致。考虑到这一点,numpy、scipy或pandas库可能不会计算出与Excel一致的结果。这尤其适用于Excel的日期处理。这个库尝试尽量使结果尽可能接近Excel的期望值。如果您希望与Excel完全一致,请阅读有关Excel数字精度的讨论(以下)

支持的功能

  • ABS

  • AVERAGE

  • CHOOSE

  • CONCAT

  • COUNT

  • COUNTA

  • DATE

  • IRR

  • LN
    • Python Math.log()与Excel LN不同。目前返回Math.log()

  • MAX

  • MID

  • MIN

  • MOD

  • NPV

  • PMT

  • POWER

  • RIGHT

  • ROUND

  • ROUNDDOWN

  • ROUNDUP

  • SLN

  • SQRT

  • SUM

  • SUMPRODUCT

  • TODAY

  • VLOOKUP
    • 精确匹配仅限

  • XNPV

  • YEARFRAC
    • 基准1,实际/实际,仅限于小数点后3位

运行测试

设置您的环境

virtualenv -p 3.7 ve
ve/bin/pip install -e .[test]

从xlfunctions根目录

ve/bin/python -m unittest discover -p "test_*.py"

或者简单地运行tox

tox

添加/注册Excel函数

Excel函数可以通过使用xlfunctions.xl.register()装饰器添加。以下是一个简单的示例

from xlfunctions import xl

@xl.register()
@xl.validate_args
def ADDONE(num: xl.Number):
    return num + 1

v@xl.alidate_args装饰器将确保注解的参数被转换并验证。例如,即使您传入一个字符串,它也会按照典型的Excel方式转换为数字

>>> ADDONE(1):
2
>>> ADDONE('1'):
2

如果您想贡献函数,请创建一个pull request。所有新函数都应该附带足够的测试来覆盖其功能。

Excel数字精度

Excel数字精度是一个复杂的话题。

它已经在维基百科页面上进行了讨论。

其基本原理归结为浮点数,以及在内存中如何表示它们与它们在磁盘上存储以及它们在屏幕上显示之间的争论。一篇微软文章解释了这种争论。

本项目尝试在从Excel文件中读取数字时格外小心,以尽量消除各种表示错误。

需要进一步的工作来确保在转换过程中数字与Excel保持一致。

据我所知,这需要实现一个低级别的数字数据类型(C或C++,Cython??)来复制其行为。Python内置的数字类型不复制适当的行为。

变更

0.2.2 (2020-05-28)

  • 实现了针对Excel数字类型的一些更多运算符。

0.2.1 (2020-05-28)

  • 修正了一个错误消息,以便引用正确的类型。

  • 添加了一个测试,以确保SUM()可以与包含Excel数据类型的数组一起工作。

0.2.0 (2020-05-28)

  • 通过引入在需要时可以评估的表达式,支持延迟参数执行。这是支持高效逻辑运算符实现所必需的。例如,当“if”条件为真时,不需要计算假值。

  • 实现了所有Excel类型。

    • 更好地控制Python和Excel之间的逻辑差异。(例如,比较None和空处理。)

    • 非常具体地控制类型转换,并处理非常特定的情况。(例如,当表示布尔值的字符串将评估为布尔值时,以及何时不会。例如,在Excel中,int(bool('False')) == 0,但在AND('False', True) == True。)

    • 将日期/时间作为独立类型。

  • 将错误重新移回其自己的模块。

  • 将标准解析移入其自己的模块。

  • 使函数签名验证和转换更加一致,允许在函数体中进行更少的错误处理和数据转换。

0.1.0 (2020-05-25)

  • 库完全重写。

    • 引入了一个函数注册表,可用于在第三方软件中扩展函数库。

    • 减少了静态方法的过度使用,并将所有Excel函数转换为简单的Python函数(带有一些装饰器)。

    • 根据微软文档对函数进行了分类组织。

    • 对支持的参数进行了适当的验证和转换。

    • 许多函数现在对其类型更加灵活,并更正确地模拟Excel的行为。

    • 使用dateutilyearfrac库进行复杂日期计算,而不是从头开始实现。

    • 实现了100%的测试覆盖率。

0.0.3b (2020-05-11)

  • 初始版本。

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

xlfunctions-0.2.2.tar.gz (41.5 kB 查看哈希值)

上传时间

支持者