From 58ccbb12e2c0f9803905c90b29bd67adbd58a356 Mon Sep 17 00:00:00 2001 From: Chris Withers Date: Fri, 11 Dec 2020 10:39:32 +0000 Subject: [PATCH 1/7] admit defeat --- docs/conf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 38f974a..2e786c1 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -10,7 +10,10 @@ source_suffix = '.rst' master_doc = 'index' project = u'xlrd' -copyright = '2005-%s Stephen John Machin, Lingfo Pty Ltd' % datetime.datetime.now().year +copyright = ( + '2005-2019 Stephen John Machin, Lingfo Pty Ltd. ' + '2019-%s Chris Withers' +) % datetime.datetime.now().year version = release = __VERSION__ exclude_patterns = ['_build'] pygments_style = 'sphinx' From b37d159ecffa871cca77743f6313079e320ad5e6 Mon Sep 17 00:00:00 2001 From: Chris Withers Date: Sat, 12 Dec 2020 14:48:13 +0000 Subject: [PATCH 2/7] embolden for the hard of thinking --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index a0551e7..49cda38 100644 --- a/README.rst +++ b/README.rst @@ -21,8 +21,8 @@ files in the historical ``.xls`` format. .. warning:: - This library will no longer read anything other than ``.xls`` files. For - alternatives that read newer file formats, please see http://www.python-excel.org/. + **This library will no longer read anything other than ``.xls`` files. For + alternatives that read newer file formats, please see http://www.python-excel.org/.** The following are also not supported but will safely and reliably be ignored: From f45f6304e1ca00d7268ab5ca9bac5103417e8be2 Mon Sep 17 00:00:00 2001 From: Chris Withers Date: Sat, 12 Dec 2020 15:24:25 +0000 Subject: [PATCH 3/7] emboldening breaks RTD rendering, and likely won't help :-( --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 49cda38..a0551e7 100644 --- a/README.rst +++ b/README.rst @@ -21,8 +21,8 @@ files in the historical ``.xls`` format. .. warning:: - **This library will no longer read anything other than ``.xls`` files. For - alternatives that read newer file formats, please see http://www.python-excel.org/.** + This library will no longer read anything other than ``.xls`` files. For + alternatives that read newer file formats, please see http://www.python-excel.org/. The following are also not supported but will safely and reliably be ignored: From 0c4e80b3d48dfe2250ac4e514c8231a742fee221 Mon Sep 17 00:00:00 2001 From: Aaron Mader Date: Thu, 19 Aug 2021 11:50:46 -0400 Subject: [PATCH 4/7] Update README.rst Adding an indication that this project is available on pypi. Specifically; it is helpful to indicate *which* pypi package should be used (as there are several, potentially nefarious clones). --- README.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.rst b/README.rst index a0551e7..e3b8077 100644 --- a/README.rst +++ b/README.rst @@ -37,6 +37,10 @@ Password-protected files are not supported and cannot be read by this library. Quick start: +.. code-block:: bash + + pip install xlrd + .. code-block:: python import xlrd From 18e314ecbd8dde81f4f87e9a3f9c53a5fd50c942 Mon Sep 17 00:00:00 2001 From: sanshi Date: Fri, 30 May 2025 10:13:20 +0800 Subject: [PATCH 5/7] bugfix: Fix an occasional compatibility issue when using Excel formulas --- xlrd/formula.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xlrd/formula.py b/xlrd/formula.py index e26639b..00e4464 100644 --- a/xlrd/formula.py +++ b/xlrd/formula.py @@ -953,7 +953,7 @@ def not_in_name_formula(op_arg, oname_arg): ]) res = Operand(oREF, None, rank, otext) if bop.kind == oERR or aop.kind == oERR: - res = oERR + res.kind = oERR elif bop.kind == oREF == aop.kind: if aop.value is not None and bop.value is not None: assert len(aop.value) == 1 From 99270dd9603cfd7846f9d4f49c72b29eb0f4ff8d Mon Sep 17 00:00:00 2001 From: sanshi Date: Thu, 5 Jun 2025 19:30:38 +0800 Subject: [PATCH 6/7] Improve test coverage for invalid formula handling --- tests/samples/invalid_formula.xls | Bin 0 -> 43008 bytes tests/test_formulas.py | 9 +++++++++ 2 files changed, 9 insertions(+) create mode 100644 tests/samples/invalid_formula.xls diff --git a/tests/samples/invalid_formula.xls b/tests/samples/invalid_formula.xls new file mode 100644 index 0000000000000000000000000000000000000000..6fa82dff3af5fd4117c08a497eb0f1e5336d0d57 GIT binary patch literal 43008 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 Date: Sat, 14 Jun 2025 09:44:53 +0100 Subject: [PATCH 7/7] Prepare for 2.0.2 release --- CHANGELOG.rst | 7 +++++++ xlrd/info.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e545334..24adbbc 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,13 @@ Changes ======= +2.0.2 (14 June 2025) +-------------------- + +- Fix bug reading sheets containing invalid formulae. + +Thanks to sanshi42 for the fix! + 2.0.1 (11 December 2020) ------------------------ diff --git a/xlrd/info.py b/xlrd/info.py index f26b6bb..eb7de6f 100644 --- a/xlrd/info.py +++ b/xlrd/info.py @@ -1 +1 @@ -__version__ = __VERSION__ = "2.0.1" +__version__ = __VERSION__ = "2.0.2"