All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Added SWITCH() function
- Allow continued calculations after UnknownFunction exception (thanks @igheorghita)
- Fixed SUMPRODUCT() for scalar case (thanks @igheorghita)
- Better handle indirect cells in compiled workbooks
- Better handle numpy floats in compiled workbooks
- Add support for openpyxl >= 3.0.8
- Add support for networkx 2.6
- Some minor improvements for Iterative Calculations
- Added CHOOSE() function
- Added FORECAST() function
- Added INTERCEPT() function
- Added IFNA() function
- Added ISBLANK() function
- Added ISLOGICAL() function
- Added ISNONTEXT() function
- Added N() function
- Added NA() function
- Added SLOPE() function
- Added SUBSTITUTE() function
- Added TEXT() function (Thanks, Luckykarter)
- Added TREND() function
- Added Reference Form for INDEX()
- Added str_params to excel_helper()
- Added ExcelCompiler.validate_serialized()
- Improve LINEST() compatibilty w/ Excel
- Improve TEXT() compatibilty w/ Excel
- Improve error and number handling in some Text functions
- Improve IFS() to support array context
- Missing references from INDIRECT() and OFFSET() resolve more often
- Fix #111, Incorrect implementation of YEARFRAC
- Fixed some exceptions in LINEST()
- Fix serialize ranges with formulas
- Fixed a minor bug in DATE()
- Fixed TIMEVALUE() parsing for elapsed times
- Python 3.9 now supported
- Add bitwise functions: bitand, bitor, bitxor, bitlshift and bitrshift (Thanks, bogdan-oprescu-nxp)
- Add PV function (Thanks, estandiaa-marain)
- Allow plugins to be passed to the deserialization function from_file() (Thanks, nanaposo)
- Drop support for Python 3.5
- Fix openpyxl >= 3.0.4 (Thanks, ckp95)
- Fix HLOOKUP row_index_num validation to use num rows (Thanks, nanaposo)
- Fix #86, tokenize.TokenError: ('EOF in multi-line statement',
- Fix #88, Handle calcPR in workbook (Thanks, andreif)
- Fix #89, NPV function fails when passed range of cashflows (Thanks, jpp-0)
- Fix #93, AssertionError during set_value(), by adding a better error message
- Fix #99, Pycel raises NotImplementedError on rectangular ranges (Thanks, rmorel)
- Fix #103, build_operator_operand_fixup() throws #VALUE error when concatenating AddressCell objects (Thanks, nboukraa)
- Fix #104, Insufficient coverage and testing after recent merges
- Fix #105, Incorrect RPN for expressions with consecutive negations (Thanks, victorjmarin)
- Fix #109, String concatenation fails for particular cases (Thanks, bogdan-oprescu-nxp)
- Fix issue in =IF() when comparing to numpy result
- Fix MID() and REPLACE() and LEN() in a CSE context
- Fix INDEX() error handling
- Fix error handling for lookup variants
- Fix #80, incompatible w/ networkx 2.4
- Speed up compile
- Implement defined names in multicolon ranges
- Tokenize ':' when adjoining functions as infix operator
- Various changes in prep to improve references, including
- Add reference expansion to function helpers
- Add sheet to indirect() and ref_param=0 to offset()
- Implement is_address() helper
- Implement intersection and union for AddressCell
- Fix #77, empty arg in IFERROR()
- Fix #78, None compare and cleanup error handling for various IFS() funcs
- Implement multi colon ranges
- Add support for missing (empty) function parameters
- Fix threading issue in iterative evaluator
- Fix range intersection with null result for ROW and COLUMN
- Fix #74 - Count not working for ranges
- Implement INDIRECT & OFFSET
- Implement SMALL, LARGE & ROUNDDOWN (Thanks, nanaposo)
- Add error message for unhandled missing function parameter
- Fix threading issue w/ CSE evaluator
- Implement CEILING_MATH, CEILING_PRECISION, FLOOR_MATH & FLOOR_PRECISION
- Implement FACT & FACTDOUBLE
- Implement AVERAGEIF, MAXIFS, MINIFS
- Implement ODD, EVEN, ISODD, ISEVEN, SIGN
- Fix #67 - Evaluation with unbounded range
- Fix bugs w/ single cells for xIFS functions
- Add Formula Support for Multi Area Ranges from defined names
- Allow ExcelCompiler init from openpyxl workbook
- Implement LOWER(), REPLACE(), TRIM() & UPPER()
- Implement DATEVALUE(), IFS() and ISERR() (Thanks, int128t)
- Reorganized time and time utils and text functions
- Add excelutil.AddressMultiAreaRange.
- Add abs_coordinate() property to AddressRange and AddressCell
- Cleanup import statements
- Resolved tox version issue on travis
- Fix defined names with Multi Area Range
- Add twelve date and time functions
- Serialize workbook filename and use it instead of the serialization filename (Thanks, nanaposo)
- Implement AVERAGEIFS()
- Take Iterative Calc Parameter defaults from workbook
- #60, Binder Notebook Example not Working
- Added method to evaluate the conditional format (formulas) for a cell or cells
- Added ExcelCompiler(..., cycles=True) to allow Excel iterative calculations
- Implement VALUE()
- Improve compile performance reversion from CSE work
- #54, In normalize_year(), month % 12 can be 0 -> IllegalMonthError
- Add library plugin support
- Improve evaluate of unbounded row/col (ie: A:B)
- Fix some regressions from 1.0b11
- Implement LEFT()
- Implement ISERROR()
- Implement FIND()
- Implement ISNUMBER()
- Implement SUMPRODUCT()
- Implement CEILING()
- Implement TRUNC() and FLOOR()
- Add support for LOG()
- Improve ABS(), INT() and ROUND()
- Add quoted_address() method to AddressRange and AddressCell
- Add public interface to get list of formula_cells()
- Add NotImplementedError for "linked" sheet names
- Add reference URL to function info
- Added considerable extensions to CSE Array Formula Support
- Add CSE Array handling to excelformula and excelcompiler
- Change Row, Column & Index to rectangular arrays only
- Add in_array_formula_context
- Add cse_array_wrapper() to allow calling functions in array context
- Add error_string_wrapper() to check for excel errors
- Move math_wrap() to function_helpers.
- Handle Direct CSE Array in cell
- Reorganize CSE Array Formula handling in excelwrapper
- For CSE Arrays that are smaller than target fill w/ None
- Trim oversize array results to fit target range
- Improve needed addresses parser from python code
- Improve _coerce_to_number() and _numerics() for CSE arrays
- Remove formulas from excelwrapper._OpxRange()
- Refactored ExcelWrapper, ExcelFormula & ExcelCompiler to allow...
- Refactored function_helpers to add decorators for excelizing library functions
- Improved various messages and exceptions in validate_calcs() and trim_graph()
- Improve Some NotImplementedError() messages
- Only build compiler eval context once
- Address Range Union and Intersection need sheet_name
- Fix function info for paired functions from same line
- Fix Range Intersection
- Fix Unary Minus on Empty cell
- Fix ISNA()
- Fix AddressCell create from tuple
- Power(0,-1) now returns DIV0
- Cleanup index()
- Implement operators for Array Formulas
- Implement concatenate and concat
- Implement subtotal
- Add support for expanding array formulas
- Add support for table relative references
- Add function information methods
- Improve messages for validate_calcs and not implemented functions
- Fix column and row for array formulas
- Implement Array (CSE) Formulas
- Fix #45 - Unbounded Range Addresses (ie: A:B or 1:2) broken
- Fix #42 - 'ReadOnlyWorksheet' object has no attribute 'iter_cols'
- Fix #43 - Fix error with leading/trailing whitespace
- Implement XOR(), NOT(), TRUE(), FALSE()
- Improve error handling for AND(), OR()
- Implement POWER() function
- Move to openpyxl 2.6+
- Remove support for Python 3.4
- Work around openpyxl returning datetimes
- Pin to openpyxl 2.5.12 to avoid bug in 2.5.14 (fixed in PR #315)
- Much work to better match Excel error processing
- Extend validate_calcs() to allow testing entire workbook
- Improvements to match(), including wildcard support
- Finished implementing match(), lookup(), vlookup() and hlookup()
- Implement COLUMN() and ROW()
- Implement % operator
- Implement len()
- Implement binary base number Excel functions (hex2dec, etc.)
- Fix PI()
- Converted to Python 3.4+
- Removed Windows Excel COM driver (openpyxl is used for all xlsx reading)
- Add support for defined names
- Add support for structured references
- Fix support for relative formulas
- set_value() and evaluate() support ranges and lists
- Add several more library functions
- Add AddressRange and AddressCell classes to encapsulate address calcs
- Add validate_calcs() to aid debugging excellib functions
- Add build feature which can limit recompile to only when excel file changes
- Improved handling for #DIV0! and #VALUE!
- Tests run on Python 3.4, 3.5, 3.6, 3.7 (via tox)
- Heavily refactored ExcelCompiler
- Moved all formula evaluation, parsing, etc, code to ExcelFormula class
- Convert to using openpyxl tokenizer
- Converted prints to logging calls
- Convert to using pytest
- Add support for travis and codecov.io
- 100% unit test coverage (mostly)
- Add debuggable formula evaluation
- Cleanup generated Python code to make easier to read
- Add a text format (yaml or json) serialization format
- flake8 (pep8) checks added
- pip now handles which Python versions can be used
- Release to PyPI
- Docs updated
- Python 2 no longer supported
- Numerous
- Original version available from Dirk Ggorissen's Pycel Github Page.
- Supports Python 2