Changelogs >


PyUp actively tracks 437,546 Python packages for vulnerabilities to keep your Python environments secure.

Scan your dependencies


- bug fix: error in printing formulas that were read in as None type, see issue 59
- bug fix: added custom datetime and time style handling, see issue 36


- improvement: added support for non-standard sheet ids, see issue [55](
- improvement: added support for general IO file type inputs, see issue [57](


- improvement: added support for non-standard sheet ids (created by 3rd party tools), see issue [53](
- improvement: added support for writing to existing sheets that contain excel customization, see issue [54](


- imporvement: added support for non-standard excel file xml tags, see issue `44 <>`_
- bug fix: fixed keyrow bug, see issue `47 <>`_
- bug fix: addressed csv writing issue related to cells that contain '\n' that previous started a new row. New version replaces '\n' with '', see issue `49 <>`_
- bug fix: newly written workbooks written by pylightxl could not create new worksheets within excel after opening. The fix was to removed sheetView xml tag, see issue `50 <>`_
- improvement: added encoding='utf-8' to write altworksheets to support chinese encoding error, see issue `51 <>`_


- added comment parsing, see issue [45](
- DEPRECATION WARNING: all indexing method that use "formula" as an argument will be replaced
with "output" in future version. Please update your codebase to use "output" instead of "formula".
This was done to simplify indexing the value (``output='v'``), the formula (``output='f'``) or the
comment (``output='c'``).
- added file stream reading for ``readxl`` that now supports ``with block`` for reading. See issue [25](


- added handling for datetime parsing


- bug fix: writing to existing file previously would only write to the current working directory, it
now can handle subdirs. In addition inadvertently discovered a bug in python source code ElementTree.iterparse
where ``source`` passed as a string was not closing the file properly. We submitted a issue to python issue tracker.


- updated reading error'ed cells "N/A"
- updated workbook indexing bug from program generated workbooks that did not index from 1


- license update


- hot-fix: added python2 support for encoding with cgi instead of html


- bug-fix: updated encoding for string cells that contained xml-like data (ex: cell A1 "<cell content>")


- add feature to ``writecsv`` to be able to handle ``pathlib`` object and ``io.StreamIO`` object
- refactored readxl to remove regex, now readxl is all cElementTree
- refactored readxl/writexl to able to handle excel files written by openpyxl that is generated
differently than how excel write files.


- added new function: ``'table1')`` returns the contents of named range "table1"
- added new function: ``'Sheet1').range('A1:C3')`` that returns the contents of a range
it also has the ability to return the formulas of the range
- updated ``'Sheet1').row()`` and ``'Sheet1').col()`` to take in a new argument ``formual``
that returns the formulas of a row or col
- bugfix: write to existing without named ranges was throwing a "repair" error. Fixed typo on xml for it
and added unit tests to capture it
- added new function: ``xl.readcsv(fn, delimiter, ws)`` to read csv files and create a pylightxl db out
of it (type converted)
- added new function: ``xl.writecsv(db, fn, ws, delimiter)`` to write out a pylightxl worksheet as a csv


- bug fix: added ability to input an empty string into the cell update functions
(previously entering val='') threw and error


- added support for cell values that have multiple formats within a single cell.
previous versions did not support this functionality since it is logged differently in sharedString.xml
- added support for updating formulas and viewing them:

- view formula: ``'Sheet1').address('A1', formula=True)``
- edit formula: ``'Sheet1').update_address('A1', val='=A1+10')``

- updated the following function arguments to drive commonality:

- was: ``readxl(fn, sheetnames)`` new: ``readxl(fn, ws)``
- was: ``writexl(db, path)`` new: ``writexl(db, fn)``
- was: ```` new: ````
- was: ``db.add_ws(sheetname, data)`` new: ``db.add_ws(ws, data)``

- added new feature to be able to read-in NamedRanges, store it in the Database, update it, remove it,
and write it. NamedRanges were integrated with existing function to handle semi-structured-data

- ``db.add_nr(name'range1', ws='sheet1', address='A1:C2')``
- ``db.remove_nr(name='range1')``
- ``db.nr_names``

- add feature to remove worksheet: ``db.remove_ws(ws='Sheet1')``
- add feature to rename worksheet: ``db.rename_ws(old='sh1', new='sh2')``
- added a cleanup function upon writing to delete _pylightxl_ temp folder in case an error left them
- added feature to write to file that is open by excel by appending a "new_" tag to the file name and
a warning message that file is opened by excel so a file was saved as "new_" + filename


- bug fix: accounted for num2letter roll-over issue
- new feature: added a pylightxl native function for handling semi-structured data
- refactored code to be a single file


- bug fix: accounted for reading error'ed out cell "N/A"
- bug fix: accounted for bool TRUE/FALSE cell values not registering on readxl
- bug fix: accounted for edge case that was prematurely splitting cell tags <c r /> by formula closing
bracket <f />
- bug fix: accounted for cell address roll-over