diff -Nru openpyxl-2.3.0/AUTHORS.rst openpyxl-2.4.9/AUTHORS.rst --- openpyxl-2.3.0/AUTHORS.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/AUTHORS.rst 2017-10-17 07:04:42.000000000 +0000 @@ -11,16 +11,20 @@ * Stefan Behnel * Bernt R. Brenna * Sven Burk +* Max Bolingbroke * Anders Chrigstrom * ccoacley * Maarten De Paepe * Etienne Desautels +* Dmitriy Chernyshov * Eric Chlebek * Alexandre Fayolle +* Don Freeman * Eric Gazoni * Brice Gelineau * Alex Gronholm * Yaroslav Halchenko +* Fumito Hamamura * Khchine Hamza * Josh Haywood * Jeff Holman @@ -32,6 +36,7 @@ * Chi Ho Kwok * Yingjie Lan * Detlef Lannert +* Laurent Laporte * Nicholas Laver * Greg Lehmann * Adam Lofts @@ -52,12 +57,15 @@ * Rick Rankin * ramn_se * Philip Roche +* Wojciech Rola * James Smagala * Wolfgane Scherer * Joseph Tate +* Gar Thompson * Dieter Vandenbussche * Paul Van Der Linden * Gerald Van Huffelen +* Koert van der Veer * Laurent Vasseur * Kay Webber * Shibukawa Yoshiki diff -Nru openpyxl-2.3.0/bitbucket-pipelines.yml openpyxl-2.4.9/bitbucket-pipelines.yml --- openpyxl-2.3.0/bitbucket-pipelines.yml 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/bitbucket-pipelines.yml 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,8 @@ +image: openpyxl/openpyxl-ci + +pipelines: + default: + - step: + script: + - /tools/clean-launch.sh tox --skip-missing-interpreters + - /tools/clean-launch.sh /tools/build-coverage.sh diff -Nru openpyxl-2.3.0/debian/changelog openpyxl-2.4.9/debian/changelog --- openpyxl-2.3.0/debian/changelog 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/changelog 2018-01-12 10:57:28.000000000 +0000 @@ -1,3 +1,23 @@ +openpyxl (2.4.9-1) unstable; urgency=medium + + * Team upload. + * New upstream release + Closes: #790751 + * Take over maintenance to Debian Science team + * cme fix dpkg-control + * Standards-Version: 4.1.3 + * debhelper 9 + * Drop python-imaging as alternative to python-pil + Closes: #866446 + * Verify that homepage is correct + Closes: #790752 + * Add missing DEP3 headers + * Enable usage of python-et-xmlfile which is now available in Debian + * Distinct descriptions + * Fix watch file + + -- Andreas Tille Fri, 12 Jan 2018 11:57:28 +0100 + openpyxl (2.3.0-3) unstable; urgency=medium * Do not resolve entities with lxml to avoid XXE vulnerability diff -Nru openpyxl-2.3.0/debian/compat openpyxl-2.4.9/debian/compat --- openpyxl-2.3.0/debian/compat 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/compat 2018-01-12 10:57:28.000000000 +0000 @@ -1 +1 @@ -7 +9 diff -Nru openpyxl-2.3.0/debian/control openpyxl-2.4.9/debian/control --- openpyxl-2.3.0/debian/control 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/control 2018-01-12 10:57:28.000000000 +0000 @@ -1,39 +1,53 @@ Source: openpyxl +Maintainer: NeuroDebian Team +Uploaders: Yaroslav Halchenko , + Michael Hanke Section: python Priority: optional -Maintainer: NeuroDebian Team -Uploaders: Yaroslav Halchenko , Michael Hanke -Build-Depends: debhelper (>= 7.0.50~), - python (>= 2.6), python-setuptools(>= 0.6), - python-pytest, python-pil | python-imaging, - python-lxml (>= 3.3.4) | python-et-xmlfile, - python3-all (>= 3.2), python3-setuptools, - python3-pytest, python3-pil | python3-imaging, - python3-lxml (>= 3.3.4) | python3-et-xmlfile, - python-jdcal, python3-jdcal, -Standards-Version: 3.9.8 +Build-Depends: debhelper (>= 9), + python, + python-setuptools, + python-pytest, + python-pil, + python-lxml (>= 3.3.4), + python-et-xmlfile, + python3-all, + python3-setuptools, + python3-pytest, + python3-pil, + python3-lxml (>= 3.3.4), + python3-et-xmlfile, + python-jdcal, + python3-jdcal +Standards-Version: 4.1.3 +Vcs-Browser: https://salsa.debian.org/science-team/openpyxl.git +Vcs-Git: https://salsa.debian.org/science-team/openpyxl.git Homepage: http://bitbucket.org/openpyxl/openpyxl/ -Vcs-Git: git://git.debian.org/git/pkg-exppsy/openpyxl.git -Vcs-Browser: http://git.debian.org/?p=pkg-exppsy/openpyxl.git X-Python-Version: >= 2.7 X-Python3-Version: >= 3.2 Package: python-openpyxl Architecture: all -Depends: ${python:Depends}, ${misc:Depends}, +Depends: ${python:Depends}, + ${misc:Depends}, python-jdcal, - python-lxml (>= 3.3.4) | python-et-xmlfile, -Recommends: python-pytest, python-pil, python-imaging -Description: module to read/write OpenXML xlsx/xlsm files + python-lxml (>= 3.3.4), + python-et-xmlfile +Recommends: python-pytest, + python-pil +Description: Python module to read/write OpenXML xlsx/xlsm files Openpyxl is a pure Python module to read/write Excel 2007 (OpenXML) xlsx/xlsm files. Package: python3-openpyxl Architecture: all -Depends: ${python3:Depends}, ${misc:Depends}, +Depends: ${python3:Depends}, + ${misc:Depends}, python3-jdcal, - python3-lxml (>= 3.3.4) | python3-et-xmlfile, -Recommends: python3-pytest, python3-pil -Description: module to read/write OpenXML xlsx/xlsm files - Openpyxl is a pure Python module to read/write Excel 2007 (OpenXML) + python3-lxml (>= 3.3.4), + python3-et-xmlfile +Recommends: python3-pytest, + python3-pil +Description: Python 3 module to read/write OpenXML xlsx/xlsm files + Openpyxl is a pure Python 3 module to read/write Excel 2007 (OpenXML) xlsx/xlsm files. diff -Nru openpyxl-2.3.0/debian/copyright openpyxl-2.4.9/debian/copyright --- openpyxl-2.3.0/debian/copyright 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/copyright 2018-01-12 10:57:28.000000000 +0000 @@ -1,4 +1,4 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: openpyxl Upstream-Contact: https://groups.google.com/forum/#!forum/openpyxl-users Source: https://bitbucket.org/openpyxl/openpyxl/ diff -Nru openpyxl-2.3.0/debian/gbp.conf openpyxl-2.4.9/debian/gbp.conf --- openpyxl-2.3.0/debian/gbp.conf 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/gbp.conf 2018-01-12 10:57:28.000000000 +0000 @@ -1,25 +1,8 @@ [DEFAULT] -# the default build command: -builder = debuild -i'\.(git\.*|gbp.conf|gitignore)' -# the default clean command: -cleaner = fakeroot debian/rules clean # the default branch for upstream sources: -overlay = True +upstream-branch = master # the default branch for the debian patch: debian-branch = debian # the default tag formats used: -upstream-tag = %(version)s +upstream-tag = v%(version)s debian-tag = debian/%(version)s - -# Options only affecting git-buildpackage -[git-buildpackage] -# ignore some any non-gitted files -#ignore-new = True -#upstream-branch = dfsgclean -# uncomment this to automatically GPG sign tags -sign-tags = True -# use this for more svn-buildpackage like bahaviour: -export-dir = ../build-area/ -tarball-dir = ../tarballs/ - - diff -Nru openpyxl-2.3.0/debian/patches/deb_no_et_xml_file openpyxl-2.4.9/debian/patches/deb_no_et_xml_file --- openpyxl-2.3.0/debian/patches/deb_no_et_xml_file 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/patches/deb_no_et_xml_file 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- a/setup.py -+++ b/setup.py -@@ -64,7 +64,7 @@ setup(name='openpyxl', - 'python (>=2.6.0)', - ], - install_requires=[ -- 'jdcal', 'et_xmlfile', -+ 'jdcal', # absent on debians atm 'et_xmlfile', - ], - package_data={ - 'openpyxl': ['.constants.json'] diff -Nru openpyxl-2.3.0/debian/patches/series openpyxl-2.4.9/debian/patches/series --- openpyxl-2.3.0/debian/patches/series 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/patches/series 2018-01-12 10:57:28.000000000 +0000 @@ -1,3 +1 @@ up_no_lxml -deb_no_et_xml_file -up_python3_print diff -Nru openpyxl-2.3.0/debian/patches/up_no_lxml openpyxl-2.4.9/debian/patches/up_no_lxml --- openpyxl-2.3.0/debian/patches/up_no_lxml 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/patches/up_no_lxml 2018-01-12 10:57:28.000000000 +0000 @@ -8,77 +8,13 @@ Applied-Upstream: 2017-01-17 Last-Update: 2017-02-07 ---- a/openpyxl/conftest.py -+++ b/openpyxl/conftest.py -@@ -47,4 +47,8 @@ def pytest_runtest_setup(item): - from lxml.etree import LIBXML_VERSION - if LIBXML_VERSION < (3, 4, 0, 0): - pytest.skip("LXML >= 3.4 is required") -+ elif item.get_marker("no_lxml"): -+ from openpyxl import LXML -+ if LXML: -+ pytest.skip("LXML has a different interface") - ---- a/openpyxl/xml/functions.py -+++ b/openpyxl/xml/functions.py -@@ -21,11 +21,14 @@ if LXML is True: - fromstring, - tostring, - register_namespace, -- iterparse, - QName, -- xmlfile -+ xmlfile, -+ XMLParser, - ) - from xml.etree.cElementTree import iterparse -+ # do not resolve entities -+ safe_parser = XMLParser(resolve_entities=False) -+ fromstring = partial(fromstring, parser=safe_parser) - else: - try: - from xml.etree.cElementTree import ( --- a/openpyxl/xml/tests/test_functions.py +++ b/openpyxl/xml/tests/test_functions.py -@@ -2,6 +2,7 @@ import pytest - - from openpyxl.xml.functions import ConditionalElement +@@ -10,6 +10,7 @@ def test_safe_iterator_none(): + seq = safe_iterator(None) + assert seq == [] +import xml - @pytest.fixture - def root(): -@@ -50,3 +51,26 @@ def test_localtag(xml, tag): - from .. functions import fromstring - node = fromstring(xml) - assert localname(node) == tag -+ -+ -+@pytest.mark.lxml_required -+def test_dont_resolve(): -+ from ..functions import fromstring -+ s = b""" -+ -+ ]> -+ &xxe;""" -+ node = fromstring(s) -+ -+ -+@pytest.mark.no_lxml -+def test_dont_resolve(): -+ from ..functions import fromstring -+ s = b""" -+ -+ ]> -+ &xxe;""" -+ with pytest.raises(xml.etree.ElementTree.ParseError): -+ node = fromstring(s) ---- a/pytest.ini -+++ b/pytest.ini -@@ -9,3 +9,4 @@ markers = - not_py33: Do not run test on Python 3. - lxml_required: lxml required to run test - lxml_buffering: lxml >= 3.4.0 required -+ no_lxml: do not use lxml + @pytest.mark.parametrize("xml, tag", + [ diff -Nru openpyxl-2.3.0/debian/patches/up_python3_print openpyxl-2.4.9/debian/patches/up_python3_print --- openpyxl-2.3.0/debian/patches/up_python3_print 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/patches/up_python3_print 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ ---- a/openpyxl/benchmarks/styles.py -+++ b/openpyxl/benchmarks/styles.py -@@ -1,3 +1,5 @@ -+from __future__ import print_function -+ - from itertools import product - from random import Random - from tempfile import TemporaryFile -@@ -61,7 +63,7 @@ def to_profile(wb, f, n): - print('took %.4fs for %d styles' % (t + time.time(), n)) - - for func in (optimized_workbook, non_optimized_workbook): -- print '%s: ' % func.__name__, -+ print('%s: ' % func.__name__, end='') - wb = func(styles) - f = TemporaryFile() - to_profile(wb, f, n) diff -Nru openpyxl-2.3.0/debian/watch openpyxl-2.4.9/debian/watch --- openpyxl-2.3.0/debian/watch 2017-02-07 14:37:53.000000000 +0000 +++ openpyxl-2.4.9/debian/watch 2018-01-12 10:57:28.000000000 +0000 @@ -1,4 +1,3 @@ -version=3 +version=4 opts="uversionmangle=s/-([ab])/~$1/g" \ - http://bitbucket.org/openpyxl/openpyxl/downloads \ - /openpyxl/openpyxl/get/(\d*\.\d*\.\d*[-0-9ab]*).tar.bz2 +https://bitbucket.org/openpyxl/openpyxl/downloads/?tab=tags .*/@ANY_VERSION@@ARCHIVE_EXT@ diff -Nru openpyxl-2.3.0/doc/api/openpyxl.cell.cell.rst openpyxl-2.4.9/doc/api/openpyxl.cell.cell.rst --- openpyxl-2.3.0/doc/api/openpyxl.cell.cell.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.cell.cell.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.cell.cell module -========================= - -.. automodule:: openpyxl.cell.cell - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.cell.interface.rst openpyxl-2.4.9/doc/api/openpyxl.cell.interface.rst --- openpyxl-2.3.0/doc/api/openpyxl.cell.interface.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.cell.interface.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.cell.interface module -============================== - -.. automodule:: openpyxl.cell.interface - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.cell.read_only.rst openpyxl-2.4.9/doc/api/openpyxl.cell.read_only.rst --- openpyxl-2.3.0/doc/api/openpyxl.cell.read_only.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.cell.read_only.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.cell.read_only module -============================== - -.. automodule:: openpyxl.cell.read_only - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.cell.rst openpyxl-2.4.9/doc/api/openpyxl.cell.rst --- openpyxl-2.3.0/doc/api/openpyxl.cell.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.cell.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -openpyxl.cell package -===================== - -.. automodule:: openpyxl.cell - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.cell.cell - openpyxl.cell.interface - openpyxl.cell.read_only - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.area_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.area_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.area_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.area_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.area_chart module -================================ - -.. automodule:: openpyxl.chart.area_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.axis.rst openpyxl-2.4.9/doc/api/openpyxl.chart.axis.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.axis.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.axis.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.axis module -========================== - -.. automodule:: openpyxl.chart.axis - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.bar_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.bar_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.bar_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.bar_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.bar_chart module -=============================== - -.. automodule:: openpyxl.chart.bar_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.bubble_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.bubble_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.bubble_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.bubble_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.bubble_chart module -================================== - -.. automodule:: openpyxl.chart.bubble_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.chartspace.rst openpyxl-2.4.9/doc/api/openpyxl.chart.chartspace.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.chartspace.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.chartspace.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.chartspace module -================================ - -.. automodule:: openpyxl.chart.chartspace - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.data_source.rst openpyxl-2.4.9/doc/api/openpyxl.chart.data_source.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.data_source.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.data_source.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.data_source module -================================= - -.. automodule:: openpyxl.chart.data_source - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.descriptors.rst openpyxl-2.4.9/doc/api/openpyxl.chart.descriptors.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.descriptors.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.descriptors.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.descriptors module -================================= - -.. automodule:: openpyxl.chart.descriptors - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.error_bar.rst openpyxl-2.4.9/doc/api/openpyxl.chart.error_bar.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.error_bar.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.error_bar.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.error_bar module -=============================== - -.. automodule:: openpyxl.chart.error_bar - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.label.rst openpyxl-2.4.9/doc/api/openpyxl.chart.label.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.label.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.label.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.label module -=========================== - -.. automodule:: openpyxl.chart.label - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.layout.rst openpyxl-2.4.9/doc/api/openpyxl.chart.layout.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.layout.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.layout.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.layout module -============================ - -.. automodule:: openpyxl.chart.layout - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.legend.rst openpyxl-2.4.9/doc/api/openpyxl.chart.legend.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.legend.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.legend.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.legend module -============================ - -.. automodule:: openpyxl.chart.legend - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.line_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.line_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.line_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.line_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.line_chart module -================================ - -.. automodule:: openpyxl.chart.line_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.marker.rst openpyxl-2.4.9/doc/api/openpyxl.chart.marker.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.marker.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.marker.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.marker module -============================ - -.. automodule:: openpyxl.chart.marker - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.picture.rst openpyxl-2.4.9/doc/api/openpyxl.chart.picture.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.picture.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.picture.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.picture module -============================= - -.. automodule:: openpyxl.chart.picture - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.pie_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.pie_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.pie_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.pie_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.pie_chart module -=============================== - -.. automodule:: openpyxl.chart.pie_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.radar_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.radar_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.radar_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.radar_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.radar_chart module -================================= - -.. automodule:: openpyxl.chart.radar_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.reference.rst openpyxl-2.4.9/doc/api/openpyxl.chart.reference.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.reference.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.reference.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.reference module -=============================== - -.. automodule:: openpyxl.chart.reference - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -openpyxl.chart package -====================== - -.. automodule:: openpyxl.chart - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.chart.area_chart - openpyxl.chart.axis - openpyxl.chart.bar_chart - openpyxl.chart.bubble_chart - openpyxl.chart.chartspace - openpyxl.chart.data_source - openpyxl.chart.descriptors - openpyxl.chart.error_bar - openpyxl.chart.label - openpyxl.chart.layout - openpyxl.chart.legend - openpyxl.chart.line_chart - openpyxl.chart.marker - openpyxl.chart.picture - openpyxl.chart.pie_chart - openpyxl.chart.radar_chart - openpyxl.chart.reference - openpyxl.chart.scatter_chart - openpyxl.chart.series - openpyxl.chart.series_factory - openpyxl.chart.shapes - openpyxl.chart.stock_chart - openpyxl.chart.surface_chart - openpyxl.chart.text - openpyxl.chart.title - openpyxl.chart.trendline - openpyxl.chart.updown_bars - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.scatter_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.scatter_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.scatter_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.scatter_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.scatter_chart module -=================================== - -.. automodule:: openpyxl.chart.scatter_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.series_factory.rst openpyxl-2.4.9/doc/api/openpyxl.chart.series_factory.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.series_factory.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.series_factory.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.series_factory module -==================================== - -.. automodule:: openpyxl.chart.series_factory - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.series.rst openpyxl-2.4.9/doc/api/openpyxl.chart.series.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.series.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.series.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.series module -============================ - -.. automodule:: openpyxl.chart.series - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.shapes.rst openpyxl-2.4.9/doc/api/openpyxl.chart.shapes.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.shapes.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.shapes.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.shapes module -============================ - -.. automodule:: openpyxl.chart.shapes - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.chartsheet.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.chartsheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.chartsheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.chartsheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.chartsheet module -===================================== - -.. automodule:: openpyxl.chartsheet.chartsheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.custom.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.custom.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.custom.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.custom.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.custom module -================================= - -.. automodule:: openpyxl.chartsheet.custom - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.properties.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.properties.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.properties.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.properties.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.properties module -===================================== - -.. automodule:: openpyxl.chartsheet.properties - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.protection.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.protection.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.protection.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.protection.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.protection module -===================================== - -.. automodule:: openpyxl.chartsheet.protection - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.publish.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.publish.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.publish.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.publish.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.publish module -================================== - -.. automodule:: openpyxl.chartsheet.publish - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.relation.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.relation.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.relation.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.relation.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.relation module -=================================== - -.. automodule:: openpyxl.chartsheet.relation - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -openpyxl.chartsheet package -=========================== - -.. automodule:: openpyxl.chartsheet - :members: - :undoc-members: - :show-inheritance: - -Subpackages ------------ - -.. toctree:: - - openpyxl.chartsheet.tests - -Submodules ----------- - -.. toctree:: - - openpyxl.chartsheet.chartsheet - openpyxl.chartsheet.custom - openpyxl.chartsheet.properties - openpyxl.chartsheet.protection - openpyxl.chartsheet.publish - openpyxl.chartsheet.relation - openpyxl.chartsheet.views - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -openpyxl.chartsheet.tests package -================================= - -.. automodule:: openpyxl.chartsheet.tests - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.chartsheet.tests.test_chartsheet - openpyxl.chartsheet.tests.test_custom - openpyxl.chartsheet.tests.test_properties - openpyxl.chartsheet.tests.test_protection - openpyxl.chartsheet.tests.test_publish - openpyxl.chartsheet.tests.test_relation - openpyxl.chartsheet.tests.test_views - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_chartsheet.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_chartsheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_chartsheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_chartsheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_chartsheet module -================================================ - -.. automodule:: openpyxl.chartsheet.tests.test_chartsheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_custom.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_custom.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_custom.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_custom.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_custom module -============================================ - -.. automodule:: openpyxl.chartsheet.tests.test_custom - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_properties.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_properties.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_properties.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_properties.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_properties module -================================================ - -.. automodule:: openpyxl.chartsheet.tests.test_properties - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_protection.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_protection.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_protection.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_protection.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_protection module -================================================ - -.. automodule:: openpyxl.chartsheet.tests.test_protection - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_publish.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_publish.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_publish.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_publish.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_publish module -============================================= - -.. automodule:: openpyxl.chartsheet.tests.test_publish - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_relation.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_relation.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_relation.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_relation.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_relation module -============================================== - -.. automodule:: openpyxl.chartsheet.tests.test_relation - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_views.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_views.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.tests.test_views.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.tests.test_views.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.tests.test_views module -=========================================== - -.. automodule:: openpyxl.chartsheet.tests.test_views - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chartsheet.views.rst openpyxl-2.4.9/doc/api/openpyxl.chartsheet.views.rst --- openpyxl-2.3.0/doc/api/openpyxl.chartsheet.views.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chartsheet.views.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chartsheet.views module -================================ - -.. automodule:: openpyxl.chartsheet.views - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.stock_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.stock_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.stock_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.stock_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.stock_chart module -================================= - -.. automodule:: openpyxl.chart.stock_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.surface_chart.rst openpyxl-2.4.9/doc/api/openpyxl.chart.surface_chart.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.surface_chart.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.surface_chart.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.surface_chart module -=================================== - -.. automodule:: openpyxl.chart.surface_chart - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.text.rst openpyxl-2.4.9/doc/api/openpyxl.chart.text.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.text.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.text.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.text module -========================== - -.. automodule:: openpyxl.chart.text - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.title.rst openpyxl-2.4.9/doc/api/openpyxl.chart.title.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.title.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.title.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.title module -=========================== - -.. automodule:: openpyxl.chart.title - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.trendline.rst openpyxl-2.4.9/doc/api/openpyxl.chart.trendline.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.trendline.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.trendline.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.trendline module -=============================== - -.. automodule:: openpyxl.chart.trendline - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.chart.updown_bars.rst openpyxl-2.4.9/doc/api/openpyxl.chart.updown_bars.rst --- openpyxl-2.3.0/doc/api/openpyxl.chart.updown_bars.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.chart.updown_bars.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.chart.updown_bars module -================================= - -.. automodule:: openpyxl.chart.updown_bars - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.comments.comments.rst openpyxl-2.4.9/doc/api/openpyxl.comments.comments.rst --- openpyxl-2.3.0/doc/api/openpyxl.comments.comments.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.comments.comments.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.comments.comments module -================================= - -.. automodule:: openpyxl.comments.comments - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.comments.rst openpyxl-2.4.9/doc/api/openpyxl.comments.rst --- openpyxl-2.3.0/doc/api/openpyxl.comments.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.comments.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -openpyxl.comments package -========================= - -.. automodule:: openpyxl.comments - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.comments.comments - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.base.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.base.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.base.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.base.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.descriptors.base module -================================ - -.. automodule:: openpyxl.descriptors.base - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.excel.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.excel.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.excel.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.excel.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.descriptors.excel module -================================= - -.. automodule:: openpyxl.descriptors.excel - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.namespace.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.namespace.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.namespace.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.namespace.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.descriptors.namespace module -===================================== - -.. automodule:: openpyxl.descriptors.namespace - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.nested.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.nested.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.nested.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.nested.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.descriptors.nested module -================================== - -.. automodule:: openpyxl.descriptors.nested - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -openpyxl.descriptors package -============================ - -.. automodule:: openpyxl.descriptors - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.descriptors.base - openpyxl.descriptors.excel - openpyxl.descriptors.namespace - openpyxl.descriptors.nested - openpyxl.descriptors.sequence - openpyxl.descriptors.serialisable - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.sequence.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.sequence.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.sequence.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.sequence.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.descriptors.sequence module -==================================== - -.. automodule:: openpyxl.descriptors.sequence - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.descriptors.serialisable.rst openpyxl-2.4.9/doc/api/openpyxl.descriptors.serialisable.rst --- openpyxl-2.3.0/doc/api/openpyxl.descriptors.serialisable.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.descriptors.serialisable.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.descriptors.serialisable module -======================================== - -.. automodule:: openpyxl.descriptors.serialisable - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.colors.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.colors.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.colors.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.colors.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.colors module -============================== - -.. automodule:: openpyxl.drawing.colors - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.drawing.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.drawing.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.drawing.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.drawing.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.drawing module -=============================== - -.. automodule:: openpyxl.drawing.drawing - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.effect.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.effect.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.effect.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.effect.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.effect module -============================== - -.. automodule:: openpyxl.drawing.effect - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.fill.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.fill.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.fill.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.fill.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.fill module -============================ - -.. automodule:: openpyxl.drawing.fill - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.graphic.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.graphic.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.graphic.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.graphic.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.graphic module -=============================== - -.. automodule:: openpyxl.drawing.graphic - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.image.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.image.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.image.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.image.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.image module -============================= - -.. automodule:: openpyxl.drawing.image - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.line.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.line.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.line.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.line.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.line module -============================ - -.. automodule:: openpyxl.drawing.line - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -openpyxl.drawing package -======================== - -.. automodule:: openpyxl.drawing - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.drawing.colors - openpyxl.drawing.drawing - openpyxl.drawing.effect - openpyxl.drawing.fill - openpyxl.drawing.graphic - openpyxl.drawing.image - openpyxl.drawing.line - openpyxl.drawing.shape - openpyxl.drawing.shapes - openpyxl.drawing.spreadsheet_drawing - openpyxl.drawing.text - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.shape.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.shape.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.shape.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.shape.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.shape module -============================= - -.. automodule:: openpyxl.drawing.shape - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.shapes.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.shapes.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.shapes.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.shapes.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.shapes module -============================== - -.. automodule:: openpyxl.drawing.shapes - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.spreadsheet_drawing.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.spreadsheet_drawing.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.spreadsheet_drawing.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.spreadsheet_drawing.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.spreadsheet_drawing module -=========================================== - -.. automodule:: openpyxl.drawing.spreadsheet_drawing - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.drawing.text.rst openpyxl-2.4.9/doc/api/openpyxl.drawing.text.rst --- openpyxl-2.3.0/doc/api/openpyxl.drawing.text.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.drawing.text.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.drawing.text module -============================ - -.. automodule:: openpyxl.drawing.text - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.formatting.formatting.rst openpyxl-2.4.9/doc/api/openpyxl.formatting.formatting.rst --- openpyxl-2.3.0/doc/api/openpyxl.formatting.formatting.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.formatting.formatting.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.formatting.formatting module -===================================== - -.. automodule:: openpyxl.formatting.formatting - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.formatting.rst openpyxl-2.4.9/doc/api/openpyxl.formatting.rst --- openpyxl-2.3.0/doc/api/openpyxl.formatting.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.formatting.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -openpyxl.formatting package -=========================== - -.. automodule:: openpyxl.formatting - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.formatting.formatting - openpyxl.formatting.rule - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.formatting.rule.rst openpyxl-2.4.9/doc/api/openpyxl.formatting.rule.rst --- openpyxl-2.3.0/doc/api/openpyxl.formatting.rule.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.formatting.rule.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.formatting.rule module -=============================== - -.. automodule:: openpyxl.formatting.rule - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.packaging.manifest.rst openpyxl-2.4.9/doc/api/openpyxl.packaging.manifest.rst --- openpyxl-2.3.0/doc/api/openpyxl.packaging.manifest.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.packaging.manifest.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.packaging.manifest module -================================== - -.. automodule:: openpyxl.packaging.manifest - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.packaging.relationship.rst openpyxl-2.4.9/doc/api/openpyxl.packaging.relationship.rst --- openpyxl-2.3.0/doc/api/openpyxl.packaging.relationship.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.packaging.relationship.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.packaging.relationship module -====================================== - -.. automodule:: openpyxl.packaging.relationship - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.packaging.rst openpyxl-2.4.9/doc/api/openpyxl.packaging.rst --- openpyxl-2.3.0/doc/api/openpyxl.packaging.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.packaging.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -openpyxl.packaging package -========================== - -.. automodule:: openpyxl.packaging - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.packaging.manifest - openpyxl.packaging.relationship - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.comments.rst openpyxl-2.4.9/doc/api/openpyxl.reader.comments.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.comments.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.comments.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.reader.comments module -=============================== - -.. automodule:: openpyxl.reader.comments - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.excel.rst openpyxl-2.4.9/doc/api/openpyxl.reader.excel.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.excel.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.excel.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.reader.excel module -============================ - -.. automodule:: openpyxl.reader.excel - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.rst openpyxl-2.4.9/doc/api/openpyxl.reader.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -openpyxl.reader package -======================= - -.. automodule:: openpyxl.reader - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.reader.comments - openpyxl.reader.excel - openpyxl.reader.strings - openpyxl.reader.style - openpyxl.reader.workbook - openpyxl.reader.worksheet - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.strings.rst openpyxl-2.4.9/doc/api/openpyxl.reader.strings.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.strings.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.strings.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.reader.strings module -============================== - -.. automodule:: openpyxl.reader.strings - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.style.rst openpyxl-2.4.9/doc/api/openpyxl.reader.style.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.style.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.style.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.reader.style module -============================ - -.. automodule:: openpyxl.reader.style - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.workbook.rst openpyxl-2.4.9/doc/api/openpyxl.reader.workbook.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.workbook.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.workbook.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.reader.workbook module -=============================== - -.. automodule:: openpyxl.reader.workbook - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.reader.worksheet.rst openpyxl-2.4.9/doc/api/openpyxl.reader.worksheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.reader.worksheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.reader.worksheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.reader.worksheet module -================================ - -.. automodule:: openpyxl.reader.worksheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.alignment.rst openpyxl-2.4.9/doc/api/openpyxl.styles.alignment.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.alignment.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.alignment.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.alignment module -================================ - -.. automodule:: openpyxl.styles.alignment - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.borders.rst openpyxl-2.4.9/doc/api/openpyxl.styles.borders.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.borders.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.borders.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.borders module -============================== - -.. automodule:: openpyxl.styles.borders - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.colors.rst openpyxl-2.4.9/doc/api/openpyxl.styles.colors.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.colors.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.colors.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.colors module -============================= - -.. automodule:: openpyxl.styles.colors - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.differential.rst openpyxl-2.4.9/doc/api/openpyxl.styles.differential.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.differential.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.differential.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.differential module -=================================== - -.. automodule:: openpyxl.styles.differential - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.fills.rst openpyxl-2.4.9/doc/api/openpyxl.styles.fills.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.fills.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.fills.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.fills module -============================ - -.. automodule:: openpyxl.styles.fills - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.fonts.rst openpyxl-2.4.9/doc/api/openpyxl.styles.fonts.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.fonts.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.fonts.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.fonts module -============================ - -.. automodule:: openpyxl.styles.fonts - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.hashable.rst openpyxl-2.4.9/doc/api/openpyxl.styles.hashable.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.hashable.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.hashable.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.hashable module -=============================== - -.. automodule:: openpyxl.styles.hashable - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.named_styles.rst openpyxl-2.4.9/doc/api/openpyxl.styles.named_styles.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.named_styles.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.named_styles.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.named_styles module -=================================== - -.. automodule:: openpyxl.styles.named_styles - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.numbers.rst openpyxl-2.4.9/doc/api/openpyxl.styles.numbers.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.numbers.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.numbers.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.numbers module -============================== - -.. automodule:: openpyxl.styles.numbers - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.protection.rst openpyxl-2.4.9/doc/api/openpyxl.styles.protection.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.protection.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.protection.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.protection module -================================= - -.. automodule:: openpyxl.styles.protection - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.proxy.rst openpyxl-2.4.9/doc/api/openpyxl.styles.proxy.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.proxy.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.proxy.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.proxy module -============================ - -.. automodule:: openpyxl.styles.proxy - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.rst openpyxl-2.4.9/doc/api/openpyxl.styles.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,26 +0,0 @@ -openpyxl.styles package -======================= - -.. automodule:: openpyxl.styles - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.styles.alignment - openpyxl.styles.borders - openpyxl.styles.colors - openpyxl.styles.differential - openpyxl.styles.fills - openpyxl.styles.fonts - openpyxl.styles.hashable - openpyxl.styles.named_styles - openpyxl.styles.numbers - openpyxl.styles.protection - openpyxl.styles.proxy - openpyxl.styles.styleable - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.styles.styleable.rst openpyxl-2.4.9/doc/api/openpyxl.styles.styleable.rst --- openpyxl-2.3.0/doc/api/openpyxl.styles.styleable.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.styles.styleable.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.styles.styleable module -================================ - -.. automodule:: openpyxl.styles.styleable - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.utils.bound_dictionary.rst openpyxl-2.4.9/doc/api/openpyxl.utils.bound_dictionary.rst --- openpyxl-2.3.0/doc/api/openpyxl.utils.bound_dictionary.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.utils.bound_dictionary.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.utils.bound_dictionary module -====================================== - -.. automodule:: openpyxl.utils.bound_dictionary - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.utils.datetime.rst openpyxl-2.4.9/doc/api/openpyxl.utils.datetime.rst --- openpyxl-2.3.0/doc/api/openpyxl.utils.datetime.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.utils.datetime.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.utils.datetime module -============================== - -.. automodule:: openpyxl.utils.datetime - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.utils.exceptions.rst openpyxl-2.4.9/doc/api/openpyxl.utils.exceptions.rst --- openpyxl-2.3.0/doc/api/openpyxl.utils.exceptions.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.utils.exceptions.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.utils.exceptions module -================================ - -.. automodule:: openpyxl.utils.exceptions - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.utils.indexed_list.rst openpyxl-2.4.9/doc/api/openpyxl.utils.indexed_list.rst --- openpyxl-2.3.0/doc/api/openpyxl.utils.indexed_list.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.utils.indexed_list.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.utils.indexed_list module -================================== - -.. automodule:: openpyxl.utils.indexed_list - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.utils.rst openpyxl-2.4.9/doc/api/openpyxl.utils.rst --- openpyxl-2.3.0/doc/api/openpyxl.utils.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.utils.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -openpyxl.utils package -====================== - -.. automodule:: openpyxl.utils - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.utils.bound_dictionary - openpyxl.utils.datetime - openpyxl.utils.exceptions - openpyxl.utils.indexed_list - openpyxl.utils.units - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.utils.units.rst openpyxl-2.4.9/doc/api/openpyxl.utils.units.rst --- openpyxl-2.3.0/doc/api/openpyxl.utils.units.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.utils.units.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.utils.units module -=========================== - -.. automodule:: openpyxl.utils.units - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.child.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.child.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.child.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.child.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.workbook.child module -============================== - -.. automodule:: openpyxl.workbook.child - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.names.external.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.names.external.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.names.external.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.names.external.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.workbook.names.external module -======================================= - -.. automodule:: openpyxl.workbook.names.external - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.names.named_range.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.names.named_range.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.names.named_range.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.names.named_range.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.workbook.names.named_range module -========================================== - -.. automodule:: openpyxl.workbook.names.named_range - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.names.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.names.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.names.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.names.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -openpyxl.workbook.names package -=============================== - -.. automodule:: openpyxl.workbook.names - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.workbook.names.external - openpyxl.workbook.names.named_range - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.properties.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.properties.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.properties.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.properties.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.workbook.properties module -=================================== - -.. automodule:: openpyxl.workbook.properties - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -openpyxl.workbook package -========================= - -.. automodule:: openpyxl.workbook - :members: - :undoc-members: - :show-inheritance: - -Subpackages ------------ - -.. toctree:: - - openpyxl.workbook.names - -Submodules ----------- - -.. toctree:: - - openpyxl.workbook.child - openpyxl.workbook.properties - openpyxl.workbook.workbook - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.workbook.workbook.rst openpyxl-2.4.9/doc/api/openpyxl.workbook.workbook.rst --- openpyxl-2.3.0/doc/api/openpyxl.workbook.workbook.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.workbook.workbook.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.workbook.workbook module -================================= - -.. automodule:: openpyxl.workbook.workbook - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.datavalidation.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.datavalidation.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.datavalidation.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.datavalidation.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.datavalidation module -======================================== - -.. automodule:: openpyxl.worksheet.datavalidation - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.dimensions.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.dimensions.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.dimensions.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.dimensions.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.dimensions module -==================================== - -.. automodule:: openpyxl.worksheet.dimensions - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.drawing.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.drawing.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.drawing.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.drawing.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.drawing module -================================= - -.. automodule:: openpyxl.worksheet.drawing - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.filters.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.filters.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.filters.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.filters.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.filters module -================================= - -.. automodule:: openpyxl.worksheet.filters - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.header_footer.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.header_footer.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.header_footer.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.header_footer.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.header_footer module -======================================= - -.. automodule:: openpyxl.worksheet.header_footer - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.hyperlink.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.hyperlink.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.hyperlink.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.hyperlink.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.hyperlink module -=================================== - -.. automodule:: openpyxl.worksheet.hyperlink - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.pagebreak.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.pagebreak.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.pagebreak.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.pagebreak.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.pagebreak module -=================================== - -.. automodule:: openpyxl.worksheet.pagebreak - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.page.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.page.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.page.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.page.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.page module -============================== - -.. automodule:: openpyxl.worksheet.page - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.properties.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.properties.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.properties.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.properties.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.properties module -==================================== - -.. automodule:: openpyxl.worksheet.properties - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.protection.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.protection.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.protection.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.protection.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.protection module -==================================== - -.. automodule:: openpyxl.worksheet.protection - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.read_only.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.read_only.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.read_only.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.read_only.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.read_only module -=================================== - -.. automodule:: openpyxl.worksheet.read_only - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.related.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.related.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.related.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.related.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.related module -================================= - -.. automodule:: openpyxl.worksheet.related - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -openpyxl.worksheet package -========================== - -.. automodule:: openpyxl.worksheet - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.worksheet.datavalidation - openpyxl.worksheet.dimensions - openpyxl.worksheet.drawing - openpyxl.worksheet.filters - openpyxl.worksheet.header_footer - openpyxl.worksheet.hyperlink - openpyxl.worksheet.page - openpyxl.worksheet.pagebreak - openpyxl.worksheet.properties - openpyxl.worksheet.protection - openpyxl.worksheet.read_only - openpyxl.worksheet.related - openpyxl.worksheet.views - openpyxl.worksheet.worksheet - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.views.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.views.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.views.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.views.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.views module -=============================== - -.. automodule:: openpyxl.worksheet.views - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.worksheet.worksheet.rst openpyxl-2.4.9/doc/api/openpyxl.worksheet.worksheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.worksheet.worksheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.worksheet.worksheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.worksheet.worksheet module -=================================== - -.. automodule:: openpyxl.worksheet.worksheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.comments.rst openpyxl-2.4.9/doc/api/openpyxl.writer.comments.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.comments.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.comments.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.comments module -=============================== - -.. automodule:: openpyxl.writer.comments - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.etree_worksheet.rst openpyxl-2.4.9/doc/api/openpyxl.writer.etree_worksheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.etree_worksheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.etree_worksheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.etree_worksheet module -====================================== - -.. automodule:: openpyxl.writer.etree_worksheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.excel.rst openpyxl-2.4.9/doc/api/openpyxl.writer.excel.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.excel.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.excel.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.excel module -============================ - -.. automodule:: openpyxl.writer.excel - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.lxml_worksheet.rst openpyxl-2.4.9/doc/api/openpyxl.writer.lxml_worksheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.lxml_worksheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.lxml_worksheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.lxml_worksheet module -===================================== - -.. automodule:: openpyxl.writer.lxml_worksheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.relations.rst openpyxl-2.4.9/doc/api/openpyxl.writer.relations.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.relations.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.relations.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.relations module -================================ - -.. automodule:: openpyxl.writer.relations - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.rst openpyxl-2.4.9/doc/api/openpyxl.writer.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -openpyxl.writer package -======================= - -.. automodule:: openpyxl.writer - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.writer.comments - openpyxl.writer.etree_worksheet - openpyxl.writer.excel - openpyxl.writer.lxml_worksheet - openpyxl.writer.relations - openpyxl.writer.strings - openpyxl.writer.styles - openpyxl.writer.theme - openpyxl.writer.workbook - openpyxl.writer.worksheet - openpyxl.writer.write_only - diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.strings.rst openpyxl-2.4.9/doc/api/openpyxl.writer.strings.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.strings.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.strings.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.strings module -============================== - -.. automodule:: openpyxl.writer.strings - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.styles.rst openpyxl-2.4.9/doc/api/openpyxl.writer.styles.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.styles.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.styles.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.styles module -============================= - -.. automodule:: openpyxl.writer.styles - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.theme.rst openpyxl-2.4.9/doc/api/openpyxl.writer.theme.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.theme.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.theme.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.theme module -============================ - -.. automodule:: openpyxl.writer.theme - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.workbook.rst openpyxl-2.4.9/doc/api/openpyxl.writer.workbook.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.workbook.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.workbook.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.workbook module -=============================== - -.. automodule:: openpyxl.writer.workbook - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.worksheet.rst openpyxl-2.4.9/doc/api/openpyxl.writer.worksheet.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.worksheet.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.worksheet.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.worksheet module -================================ - -.. automodule:: openpyxl.writer.worksheet - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.writer.write_only.rst openpyxl-2.4.9/doc/api/openpyxl.writer.write_only.rst --- openpyxl-2.3.0/doc/api/openpyxl.writer.write_only.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.writer.write_only.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.writer.write_only module -================================= - -.. automodule:: openpyxl.writer.write_only - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.xml.constants.rst openpyxl-2.4.9/doc/api/openpyxl.xml.constants.rst --- openpyxl-2.3.0/doc/api/openpyxl.xml.constants.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.xml.constants.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.xml.constants module -============================= - -.. automodule:: openpyxl.xml.constants - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.xml.functions.rst openpyxl-2.4.9/doc/api/openpyxl.xml.functions.rst --- openpyxl-2.3.0/doc/api/openpyxl.xml.functions.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.xml.functions.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.xml.functions module -============================= - -.. automodule:: openpyxl.xml.functions - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.xml.namespace.rst openpyxl-2.4.9/doc/api/openpyxl.xml.namespace.rst --- openpyxl-2.3.0/doc/api/openpyxl.xml.namespace.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.xml.namespace.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -openpyxl.xml.namespace module -============================= - -.. automodule:: openpyxl.xml.namespace - :members: - :undoc-members: - :show-inheritance: diff -Nru openpyxl-2.3.0/doc/api/openpyxl.xml.rst openpyxl-2.4.9/doc/api/openpyxl.xml.rst --- openpyxl-2.3.0/doc/api/openpyxl.xml.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/api/openpyxl.xml.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -openpyxl.xml package -==================== - -.. automodule:: openpyxl.xml - :members: - :undoc-members: - :show-inheritance: - -Submodules ----------- - -.. toctree:: - - openpyxl.xml.constants - openpyxl.xml.functions - openpyxl.xml.namespace - diff -Nru openpyxl-2.3.0/doc/changes.rst openpyxl-2.4.9/doc/changes.rst --- openpyxl-2.3.0/doc/changes.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/changes.rst 2017-10-17 07:04:42.000000000 +0000 @@ -1,3 +1,396 @@ +2.4.9 (unreleased) +================== + + +Bugfixes +-------- +* `#809 `_ Incomplete documentation of `copy_worksheet` method +* `#811 `_ Scoped definedNames not removed when worksheet is deleted +* `#824 `_ Raise an exception if a chart is used in multiple sheets +* `#842 `_ Non-ASCII table column headings cause an exception in Python 2 +* `#846 `_ Conditional formats not supported in write-only mode +* `#849 `_ Conditional formats with no sqref cause an exception +* `#859 `_ Headers that start with a number conflict with font size +* `#902 `_ TableStyleElements don't always have a condtional format +* `#908 `_ Read-only mode sometimes returns too many cells + + + +Pull requests +------------- +* `#179 `_ Cells kept in a set +* `#180 `_ Support for Workbook protection +* `#182 `_ Read support for page breaks +* `#183 `_ Improve documentation of `copy_worksheet` method +* `#198 `_ Fix for #908 + + +2.4.8 (2017-05-30) +================== + + +Bugfixes +-------- +* AutoFilter.sortState being assignd to the ws.sortState +* `#766 `_ Sheetnames with apostrophes need additional escaping +* `#729 `_ Cannot open files created by Microsoft Dynamics +* `#819 `_ Negative percents not case correctly +* `#821 `_ Runtime imports can cause deadlock +* `#855 `_ Print area containing only columns leads to corrupt file + + +Minor changes +------------- +* Preserve any table styles + + +2.4.7 (2017-04-24) +================== + + +Bugfixes +-------- +* `#807 `_ Sample files being included by mistake in sdist + + +2.4.6 (2017-04-14) +================== + + +Bugfixes +-------- +* `#776 `_ Cannot apply formatting to plot area +* `#780 `_ Exception when element attributes are Python keywords +* `#781 `_ Exception raised when saving files with styled columns +* `#785 `_ Number formats for data labels are incorrect +* `#788 `_ Worksheet titles not quoted in defined names +* `#800 `_ Font underlines not read correctly + + +2.4.5 (2017-03-07) +================== + + +Bugfixes +-------- +* `#750 `_ Adding images keeps file handles open +* `#772 `_ Exception for column-only ranges +* `#773 `_ Cannot copy worksheets with non-ascii titles on Python 2 + + +Pull requests +------------- + +* `161 `_ Support for non-standard names for Workbook part. +* `162 `_ Documentation correction + + +2.4.4 (2017-02-23) +================== + + +Bugfixes +-------- + +* `#673 `_ Add close method to workbooks +* `#762 `_ openpyxl can create files with invalid style indices +* `#729 `_ Allow images in write-only mode +* `#744 `_ Rounded corners for charts +* `#747 `_ Use repr when handling non-convertible objects +* `#764 `_ Hashing function is incorrect +* `#765 `_ Named styles share underlying array + + +Minor Changes +------------- + +* Add roundtrip support for worksheet tables. + + +Pull requests +------------- + +* `160 `_ Don't init mimetypes more than once. + + +2.4.3 (unreleased) +================== +bad release + + +2.4.2 (2017-01-31) +================== + + +Bug fixes +--------- + +* `#727 `_ DeprecationWarning is incorrect +* `#734 `_ Exception raised if userName is missing +* `#739 `_ Always provide a date1904 attribute +* `#740 `_ Hashes should be stored as Base64 +* `#743 `_ Print titles broken on sheetnames with spaces +* `#748 `_ Workbook breaks when active sheet is removed +* `#754 `_ Incorrect descriptor for Filter values +* `#756 `_ Potential XXE vulerability +* `#758 `_ Cannot create files with page breaks and charts +* `#759 `_ Problems with worksheets with commas in their titles + + +Minor Changes +------------- + +* Add unicode support for sheet name incrementation. + + +2.4.1 (2016-11-23) +================== + + +Bug fixes +--------- + +* `#643 `_ Make checking for duplicate sheet titles case insensitive +* `#647 `_ Trouble handling LibreOffice files with named styles +* `#687 `_ Directly assigned new named styles always refer to "Normal" +* `#690 `_ Cannot parse print titles with multiple sheet names +* `#691 `_ Cannot work with macro files created by LibreOffice +* Prevent duplicate differential styles +* `#694 `_ Allow sheet titles longer than 31 characters +* `#697 `_ Cannot unset hyperlinks +* `#699 `_ Exception raised when format objects use cell references +* `#703 `_ Copy height and width when copying comments +* `#705 `_ Incorrect content type for VBA macros +* `#707 `_ IndexError raised in read-only mode when accessing individual cells +* `#711 `_ Files with external links become corrupted +* `#715 `_ Cannot read files containing macro sheets +* `#717 `_ Details from named styles not preserved when reading files +* `#722 `_ Remove broken Print Title and Print Area definitions + + +Minor changes +------------- + +* Add support for Python 3.6 +* Correct documentation for headers and footers + + +Deprecations +------------ + +Worksheet methods `get_named_range()` and `get_sqaured_range()` + + +Bug fixes +--------- + + +2.4.0 (2016-09-15) +================== + + +Bug fixes +--------- + +* `#652 `_ Exception raised when epoch is 1904 +* `#642 `_ Cannot handle unicode in headers and footers in Python 2 +* `#646 `_ Cannot handle unicode sheetnames in Python 2 +* `#658 `_ Chart styles, and axis units should not be 0 +* `#663 `_ Strings in external workbooks not unicode + + +Major changes +------------- + +* Add support for builtin styles and include one for Pandas + + +Minor changes +------------- + +* Add a `keep_links` option to `load_workbook`. External links contain cached + copies of the external workbooks. If these are big it can be advantageous to + be able to disable them. +* Provide an example for using cell ranges in DataValidation. +* PR 138 - add copy support to comments. + + +2.4.0-b1 (2016-06-08) +===================== + + +Minor changes +------------- + +* Add an the alias `hide_drop_down` to DataValidation for `showDropDown` because that is how Excel works. + + +Bug fixes +--------- + +* `#625 `_ Exception raises when inspecting EmptyCells in read-only mode +* `#547 `_ Functions for handling OOXML "escaped" ST_XStrings +* `#629 `_ Row Dimensions not supported in write-only mode +* `#530 `_ Problems when removing worksheets with charts +* `#630 `_ Cannot use SheetProtection in write-only mode + + +Features +-------- + +* Add write support for worksheet tables + + +2.4.0-a1 (2016-04-11) +===================== + + +Minor changes +------------- + +* Remove deprecated methods from DataValidation +* Remove deprecated methods from PrintPageSetup +* Convert AutoFilter to Serialisable and extend support for filters +* Add support for SortState +* Removed `use_iterators` keyword when loading workbooks. Use `read_only` instead. +* Removed `optimized_write` keyword for new workbooks. Use `write_only` instead. +* Improve print title support +* Add print area support +* New implementation of defined names +* New implementation of page headers and footers +* Add support for Python's NaN +* Added iter_cols method for worksheets +* ws.rows and ws.columns now always return generators and start at the top of the worksheet +* Add a `values` property for worksheets +* Default column width changed to 8 as per the specification + + +Deprecations +------------ + +* Cell anchor method +* Worksheet point_pos method +* Worksheet add_print_title method +* Worksheet HeaderFooter attribute, replaced by individual ones +* Flatten function for cells +* Workbook get_named_range, add_named_range, remove_named_range, get_sheet_names, get_sheet_by_name +* Comment text attribute +* Use of range strings deprecated for ws.iter_rows() +* Use of coordinates deprecated for ws.cell() +* Deprecate .copy() method for StyleProxy objects + + +Bug fixes +--------- + +* `#152 `_ Hyperlinks lost when reading files +* `#171 `_ Add function for copying worksheets +* `#386 `_ Cells with inline strings considered empty +* `#397 `_ Add support for ranges of rows and columns +* `#446 `_ Workbook with definedNames corrupted by openpyxl +* `#481 `_ "safe" reserved ranges are not read from workbooks +* `#501 `_ Discarding named ranges can lead to corrupt files +* `#574 `_ Exception raised when using the class method to parse Relationships +* `#579 `_ Crashes when reading defined names with no content +* `#597 `_ Cannot read worksheets without coordinates +* `#617 `_ Customised named styles not correctly preserved + + +2.3.5 (2016-04-11) +================== + + +Bug fixes +--------- + +* `#618 `_ Comments not written in write-only mode + + +2.3.4 (2016-03-16) +================== + + +Bug fixes +--------- + +* `#594 `_ Content types might be missing when keeping VBA +* `#599 `_ Cells with only one cell look empty +* `#607 `_ Serialise NaN as '' + + +Minor changes +------------- + +* Preserve the order of external references because formualae use numerical indices. +* Typo corrected in cell unit tests (PR 118) + + +2.3.3 (2016-01-18) +================== + + +Bug fixes +--------- + +* `#540 `_ Cannot read merged cells in read-only mode +* `#565 `_ Empty styled text blocks cannot be parsed +* `#569 `_ Issue warning rather than raise Exception raised for unparsable definedNames +* `#575 `_ Cannot open workbooks with embdedded OLE files +* `#584 `_ Exception when saving borders with attributes + + +Minor changes +------------- + +* `PR 103 `_ Documentation about chart scaling and axis limits +* Raise an exception when trying to copy cells from other workbooks. + + +2.3.2 (2015-12-07) +================== + + +Bug fixes +--------- + +* `#554 `_ Cannot add comments to a worksheet when preserving VBA +* `#561 `_ Exception when reading phonetic text +* `#562 `_ DARKBLUE is the same as RED +* `#563 `_ Minimum for row and column indexes not enforced + + +Minor changes +------------- + +* `PR 97 `_ One VML file per worksheet. +* `PR 96 `_ Correct descriptor for CharacterProperties.rtl +* `#498 `_ Metadata is not essential to use the package. + + +2.3.1 (2015-11-20) +================== + + +Bug fixes +--------- + +* `#534 `_ Exception when using columns property in read-only mode. +* `#536 `_ Incorrectly handle comments from Google Docs files. +* `#539 `_ Flexible value types for conditional formatting. +* `#542 `_ Missing content types for images. +* `#543 `_ Make sure images fit containers on all OSes. +* `#544 `_ Gracefully handle missing cell styles. +* `#546 `_ ExternalLink duplicated when editing a file with macros. +* `#548 `_ Exception with non-ASCII worksheet titles +* `#551 `_ Combine multiple LineCharts + + +Minor changes +------------- + +* `PR 88 `_ Fix page margins in parser. + + 2.3.0 (2015-10-20) ================== diff -Nru openpyxl-2.3.0/doc/charts/introduction.rst openpyxl-2.4.9/doc/charts/introduction.rst --- openpyxl-2.3.0/doc/charts/introduction.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/introduction.rst 2017-10-17 07:04:42.000000000 +0000 @@ -44,15 +44,23 @@ >>> values = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) >>> chart = BarChart() >>> chart.add_data(values) ->>> ws.add_chart(chart) +>>> ws.add_chart(chart, "E15") >>> wb.save("SampleChart.xlsx") +By default the top-left corner of a chart is anchored to cell E15 and the +size is 15 x 7.5 cm (approximately 5 columns by 14 rows). This can be changed +by setting the `anchor`, `width` and `height` properties of the chart. The +actual size will depend on operating system and device. Other anchors are +possible see :mod:`openpyxl.drawing.spreadsheet_drawing` for further information. + + Working with axes ----------------- .. toctree:: + limits_and_scaling secondary @@ -64,6 +72,14 @@ chart_layout +Styling charts +-------------- + +.. toctree:: + + pattern + + Advanced charts --------------- Binary files /tmp/tmpOn6hKO/Diuqtbx54t/openpyxl-2.3.0/doc/charts/limits_and_scaling_log.png and /tmp/tmpOn6hKO/8y7RcCZxFs/openpyxl-2.4.9/doc/charts/limits_and_scaling_log.png differ diff -Nru openpyxl-2.3.0/doc/charts/limits_and_scaling_log.py openpyxl-2.4.9/doc/charts/limits_and_scaling_log.py --- openpyxl-2.3.0/doc/charts/limits_and_scaling_log.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/limits_and_scaling_log.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,67 @@ +from openpyxl import Workbook +from openpyxl.chart import ( + ScatterChart, + Reference, + Series, +) +import math + +wb = Workbook() +ws = wb.active + +ws.append(['X', 'Gaussian']) +for i, x in enumerate(range(-10, 11)): + ws.append([x, "=EXP(-(($A${row}/6)^2))".format(row = i + 2)]) + +chart1 = ScatterChart() +chart1.title = "No Scaling" +chart1.x_axis.title = 'x' +chart1.y_axis.title = 'y' +chart1.legend = None + +chart2 = ScatterChart() +chart2.title = "X Log Scale" +chart2.x_axis.title = 'x (log10)' +chart2.y_axis.title = 'y' +chart2.legend = None +chart2.x_axis.scaling.logBase = 10 + +chart3 = ScatterChart() +chart3.title = "Y Log Scale" +chart3.x_axis.title = 'x' +chart3.y_axis.title = 'y (log10)' +chart3.legend = None +chart3.y_axis.scaling.logBase = 10 + +chart4 = ScatterChart() +chart4.title = "Both Log Scale" +chart4.x_axis.title = 'x (log10)' +chart4.y_axis.title = 'y (log10)' +chart4.legend = None +chart4.x_axis.scaling.logBase = 10 +chart4.y_axis.scaling.logBase = 10 + +chart5 = ScatterChart() +chart5.title = "Log Scale Base e" +chart5.x_axis.title = 'x (ln)' +chart5.y_axis.title = 'y (ln)' +chart5.legend = None +chart5.x_axis.scaling.logBase = math.e +chart5.y_axis.scaling.logBase = math.e + +x = Reference(ws, min_col=1, min_row=2, max_row=22) +y = Reference(ws, min_col=2, min_row=2, max_row=22) +s = Series(y, xvalues=x) +chart1.append(s) +chart2.append(s) +chart3.append(s) +chart4.append(s) +chart5.append(s) + +ws.add_chart(chart1, "C1") +ws.add_chart(chart2, "I1") +ws.add_chart(chart3, "C15") +ws.add_chart(chart4, "I15") +ws.add_chart(chart5, "F30") + +wb.save("log.xlsx") Binary files /tmp/tmpOn6hKO/Diuqtbx54t/openpyxl-2.3.0/doc/charts/limits_and_scaling_minmax.png and /tmp/tmpOn6hKO/8y7RcCZxFs/openpyxl-2.4.9/doc/charts/limits_and_scaling_minmax.png differ diff -Nru openpyxl-2.3.0/doc/charts/limits_and_scaling_minmax.py openpyxl-2.4.9/doc/charts/limits_and_scaling_minmax.py --- openpyxl-2.3.0/doc/charts/limits_and_scaling_minmax.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/limits_and_scaling_minmax.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,42 @@ +from openpyxl import Workbook +from openpyxl.chart import ( + ScatterChart, + Reference, + Series, +) + +wb = Workbook() +ws = wb.active + +ws.append(['X', '1/X']) +for x in range(-10, 11): + if x: + ws.append([x, 1.0 / x]) + +chart1 = ScatterChart() +chart1.title = "Full Axes" +chart1.x_axis.title = 'x' +chart1.y_axis.title = '1/x' +chart1.legend = None + +chart2 = ScatterChart() +chart2.title = "Clipped Axes" +chart2.x_axis.title = 'x' +chart2.y_axis.title = '1/x' +chart2.legend = None + +chart2.x_axis.scaling.min = 0 +chart2.y_axis.scaling.min = 0 +chart2.x_axis.scaling.max = 11 +chart2.y_axis.scaling.max = 1.5 + +x = Reference(ws, min_col=1, min_row=2, max_row=22) +y = Reference(ws, min_col=2, min_row=2, max_row=22) +s = Series(y, xvalues=x) +chart1.append(s) +chart2.append(s) + +ws.add_chart(chart1, "C1") +ws.add_chart(chart2, "C15") + +wb.save("minmax.xlsx") Binary files /tmp/tmpOn6hKO/Diuqtbx54t/openpyxl-2.3.0/doc/charts/limits_and_scaling_orientation.png and /tmp/tmpOn6hKO/8y7RcCZxFs/openpyxl-2.4.9/doc/charts/limits_and_scaling_orientation.png differ diff -Nru openpyxl-2.3.0/doc/charts/limits_and_scaling_orientation.py openpyxl-2.4.9/doc/charts/limits_and_scaling_orientation.py --- openpyxl-2.3.0/doc/charts/limits_and_scaling_orientation.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/limits_and_scaling_orientation.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,60 @@ +from openpyxl import Workbook +from openpyxl.chart import ( + ScatterChart, + Reference, + Series, +) + +wb = Workbook() +ws = wb.active + +ws["A1"] = "Archimedean Spiral" +ws.append(["T", "X", "Y"]) +for i, t in enumerate(range(100)): + ws.append([t / 16.0, "=$A${row}*COS($A${row})".format(row = i + 3), + "=$A${row}*SIN($A${row})".format(row = i + 3)]) + +chart1 = ScatterChart() +chart1.title = "Default Orientation" +chart1.x_axis.title = 'x' +chart1.y_axis.title = 'y' +chart1.legend = None + +chart2 = ScatterChart() +chart2.title = "Flip X" +chart2.x_axis.title = 'x' +chart2.y_axis.title = 'y' +chart2.legend = None +chart2.x_axis.scaling.orientation = "maxMin" +chart2.y_axis.scaling.orientation = "minMax" + +chart3 = ScatterChart() +chart3.title = "Flip Y" +chart3.x_axis.title = 'x' +chart3.y_axis.title = 'y' +chart3.legend = None +chart3.x_axis.scaling.orientation = "minMax" +chart3.y_axis.scaling.orientation = "maxMin" + +chart4 = ScatterChart() +chart4.title = "Flip Both" +chart4.x_axis.title = 'x' +chart4.y_axis.title = 'y' +chart4.legend = None +chart4.x_axis.scaling.orientation = "maxMin" +chart4.y_axis.scaling.orientation = "maxMin" + +x = Reference(ws, min_col=2, min_row=2, max_row=102) +y = Reference(ws, min_col=3, min_row=2, max_row=102) +s = Series(y, xvalues=x) +chart1.append(s) +chart2.append(s) +chart3.append(s) +chart4.append(s) + +ws.add_chart(chart1, "D1") +ws.add_chart(chart2, "J1") +ws.add_chart(chart3, "D15") +ws.add_chart(chart4, "J15") + +wb.save("orientation.xlsx") diff -Nru openpyxl-2.3.0/doc/charts/limits_and_scaling.rst openpyxl-2.4.9/doc/charts/limits_and_scaling.rst --- openpyxl-2.3.0/doc/charts/limits_and_scaling.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/limits_and_scaling.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,61 @@ +Axis Limits and Scale +===================== + +Minima and Maxima +----------------- + +Axis minimum and maximum values can be set manually to display specific regions +on a chart. + +.. literalinclude:: limits_and_scaling_minmax.py + + +.. image:: limits_and_scaling_minmax.png + :alt: "Sample charts with examples of axis clipping" + + +.. note:: + + In some cases such as the one shown, setting the axis limits is effectively + equivalent to displaying a sub-range of the data. For large datasets, + rendering of scatter plots (and possibly others) will be much faster when + using subsets of the data rather than axis limits in both Excel and + Open/Libre Office. + + +Logarithmic Scaling +------------------- + +Both the x- and y-axes can be scaled logarithmically. The base of the logarithm +can be set to any valid float. If the x-axis is scaled logarithmically, negative +values in the domain will be discarded. + +.. literalinclude:: limits_and_scaling_log.py + + +This produces five charts that look something like this: + +.. image:: limits_and_scaling_log.png + :alt: "Sample charts with examples of axis log scaling" + +The first four charts show the same data unscaled, scaled logarithmically in +each axis and in both axes, with the logarithm base set to 10. The final chart +shows the same data with both axes scaled, but the base of the logarithm set to +``e``. + +Axis Orientation +---------------- + +Axes can be displayed "normally" or in reverse. Axis orientation is controlled +by the scaling ``orientation`` property, which can have a value of either +``'minMax'`` for normal orientation or ``'maxMin'`` for reversed. + +.. literalinclude:: limits_and_scaling_orientation.py + + +This produces four charts with the axes in each possible combination of +orientations that look something like this: + +.. image:: limits_and_scaling_orientation.png + :alt: "Sample charts with different axis orientations" + Binary files /tmp/tmpOn6hKO/Diuqtbx54t/openpyxl-2.3.0/doc/charts/pattern.png and /tmp/tmpOn6hKO/8y7RcCZxFs/openpyxl-2.4.9/doc/charts/pattern.png differ diff -Nru openpyxl-2.3.0/doc/charts/pattern.py openpyxl-2.4.9/doc/charts/pattern.py --- openpyxl-2.3.0/doc/charts/pattern.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/pattern.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,45 @@ +from openpyxl import Workbook +from openpyxl.chart import BarChart, Reference +from openpyxl.chart.marker import DataPoint + +from openpyxl.drawing.fill import PatternFillProperties, ColorChoice + +wb = Workbook() +ws = wb.active + +rows = [ + ("Sample",), + (1,), + (2,), + (3,), + (2,), + (3,), + (3,), + (1,), + (2,), +] + +for r in rows: + ws.append(r) + + +c = BarChart() +data = Reference(ws, min_col=1, min_row=1, max_row=8) +c.add_data(data, titles_from_data=True) +c.title = "Chart with patterns" + +# set a pattern for the whole series +series = c.series[0] +fill = PatternFillProperties(prst="pct5") +fill.foreground = ColorChoice(prstClr="red") +fill.background = ColorChoice(prstClr="blue") +series.graphicalProperties.pattFill = fill + +# set a pattern for a 6th data point (0-indexed) +pt = DataPoint(idx=5) +pt.graphicalProperties.pattFill = PatternFillProperties(prst="ltHorz") +series.dPt.append(pt) + +ws.add_chart(c, "C1") + +wb.save("pattern.xlsx") diff -Nru openpyxl-2.3.0/doc/charts/pattern.rst openpyxl-2.4.9/doc/charts/pattern.rst --- openpyxl-2.3.0/doc/charts/pattern.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/pattern.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,12 @@ +Adding Patterns +--------------- + + +Whole data series and individual data points can be extensively styled through the `graphicalProperties`. Getting things just right may take some time. + + +.. literalinclude:: pattern.py + + +.. image:: pattern.png + :alt: "Sample bar chart with patterned columns" diff -Nru openpyxl-2.3.0/doc/charts/secondary.py openpyxl-2.4.9/doc/charts/secondary.py --- openpyxl-2.3.0/doc/charts/secondary.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/secondary.py 2017-10-17 07:04:42.000000000 +0000 @@ -19,7 +19,7 @@ c1 = BarChart() v1 = Reference(ws, min_col=1, min_row=1, max_col=7) -c1.series = [Series(v1, title_from_data=True)] +c1.add_data(v1, titles_from_data=True, from_rows=True) c1.x_axis.title = 'Days' c1.y_axis.title = 'Aliens' @@ -30,11 +30,11 @@ # Create a second chart c2 = LineChart() v2 = Reference(ws, min_col=1, min_row=2, max_col=7) -c2.series = [Series(v2, title_from_data=True)] -c2.y_axis.axId = 20 +c2.add_data(v2, titles_from_data=True, from_rows=True) +c2.y_axis.axId = 200 c2.y_axis.title = "Humans" -# Assign the y-axis of the second chart to the third axis of the first chart -c1.z_axis = c2.y_axis + +# Display y-axis of the second chart on the right by setting it to cross the x-axis at its maximum c1.y_axis.crosses = "max" c1 += c2 diff -Nru openpyxl-2.3.0/doc/charts/secondary.rst openpyxl-2.4.9/doc/charts/secondary.rst --- openpyxl-2.3.0/doc/charts/secondary.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/charts/secondary.rst 2017-10-17 07:04:42.000000000 +0000 @@ -1,8 +1,8 @@ Adding a second axis ===================== -Adding a second axis actually involves creating a second chart and assigning -the numeric axis of it to the third axis of the first chart. +Adding a second axis actually involves creating a second chart that shares a +common x-axis with the first chart but has a separate y-axis. .. literalinclude:: secondary.py diff -Nru openpyxl-2.3.0/doc/comments.rst openpyxl-2.4.9/doc/comments.rst --- openpyxl-2.3.0/doc/comments.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/comments.rst 2017-10-17 07:04:42.000000000 +0000 @@ -26,8 +26,7 @@ >>> comment.author 'Comment Author' -You cannot assign the same Comment object to two different cells. Doing so -raises an AttributeError. +If you assign the same comment to multiple cells then openpyxl will automatically create copies .. :: doctest @@ -38,9 +37,10 @@ >>> comment = Comment("Text", "Author") >>> ws["A1"].comment = comment >>> ws["B2"].comment = comment -Traceback (most recent call last): -AttributeError: Comment already assigned to A1 in worksheet Sheet. Cannot -assign a comment to more than one cell +>>> ws["A1"].comment is comment +True +>>> ws["B2"].comment is comment +False Loading and saving comments diff -Nru openpyxl-2.3.0/doc/conf.py openpyxl-2.4.9/doc/conf.py --- openpyxl-2.3.0/doc/conf.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/conf.py 2017-10-17 07:04:42.000000000 +0000 @@ -24,9 +24,6 @@ import openpyxl - -from openpyxl.descriptors import Alias - def AliasProxyGet(self, instance, cls): return getattr(cls, self.alias) @@ -41,6 +38,7 @@ return self.key if os.environ.get("APIDOC") == "True": + from openpyxl.descriptors import Alias Alias.__get__ = AliasProxyGet NumberFormatDescriptor.__get__ = NumberFormatGet @@ -75,10 +73,10 @@ # |version| and |release|, also used in various other places throughout the # built documents. # -# The short X.Y version. -version = openpyxl.__version__ # The full version, including alpha/beta/rc tags. -release = version +release = openpyxl.__version__ +# The short X.Y version. +version = ".".join(release.split(".")[:-1]) # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -119,7 +117,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -import os + on_rtd = os.environ.get('READTHEDOCS', None) == 'True' if on_rtd: html_theme = 'default' diff -Nru openpyxl-2.3.0/doc/defined_names.rst openpyxl-2.4.9/doc/defined_names.rst --- openpyxl-2.3.0/doc/defined_names.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/defined_names.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,27 @@ +Defined Names +============= + + +The specification has the following to say about defined names: + + "Defined names are descriptive text that is used to represents a cell, range + of cells, formula, or constant value." + +This means they are very loosely defined. They might contain a constant, a +formula, a single cell reference, a range of cells or multiple ranges of +cells across different worksheets. Or all of the above. They are defined +globally for a workbook and accessed from there `defined_names` attribue. + +Sample use for ranges +--------------------- + +Accessing a range called "my_range":: + + my_range = wb.defined_names['my_range'] + # if this contains a range of cells then the destinations attribute is not None + dests = my_range.destinations # returns a generator of (worksheet title, cell range) tuples + + cells = [] + for title, coord in dests: + ws = wb[title] + cells.append(ws[coord]) diff -Nru openpyxl-2.3.0/doc/development.rst openpyxl-2.4.9/doc/development.rst --- openpyxl-2.3.0/doc/development.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/development.rst 2017-10-17 07:04:42.000000000 +0000 @@ -29,6 +29,30 @@ docstrings. +Getting the source +------------------ + +The source code is hosted on bitbucket.org. You can get it using a Mercurial +client and the following URL. + +.. parsed-literal:: + + $ hg clone \https://bitbucket.org/openpyxl/openpyxl + $ hg up |version| + $ virtualenv openpyxl + $ cd openpyxl + $ source bin/activate + $ pip install -U -r requirements.txt + $ python setup.py develop + + +Specification +------------- + +The file specification for OOXML was released jointly as `ECMA 376 +`_ and +`ISO 29500 `_. + Testing ------- @@ -50,9 +74,8 @@ Organisation ++++++++++++ -Tests can be at library - openpyxl/tests or preferably for unit tests at -package / module level e.g openpyxl/cell. This makes testing and getting -statistics for code under development easier: +Tests should be preferably at package / module level e.g openpyxl/cell. This +makes testing and getting statistics for code under development easier: :code:`py.test --cov openpyxl/cell openpyxl/cell` @@ -76,11 +99,13 @@ Microsoft Tools +++++++++++++++ -Along with the SDK, Microsoft also has a "Productivity Tool" for working with -Office OpenXML. http://www.microsoft.com/en-us/download/details.aspx?id=30425 - -It allows you to quickly inspect a whole Excel file. Unfortunately, -validation errors contain many false positives. +Along with the SDK, Microsoft also has a `"Productivity Tool" +`_ for working +with Office OpenXML. + +This allows you to quickly inspect or compare whole Excel files. +Unfortunately, validation errors contain many false positives. The tool also +contain links to the specification and implementers' notes. Please see :doc:`windows-development` for additional information on setting up and testing on Windows. @@ -95,11 +120,11 @@ Branch naming convention ------------------------ -We use a "major.minor.patch" numbering system, ie. 1.8.3 Development branches -are named after "major.minor" releases. In general, API change will only -happen major releases but there will be exceptions. Always communicate API -changes to the mailing list before making them. If you are changing an API -try and an implement a fallback (with deprecation warning) for the old +We use a "major.minor.patch" numbering system, ie. |release|. Development +branches are named after "major.minor" releases. In general, API change will +only happen major releases but there will be exceptions. Always communicate +API changes to the mailing list before making them. If you are changing an +API try and an implement a fallback (with deprecation warning) for the old behaviour. The "default branch" is used for releases and always has changes from a @@ -110,10 +135,10 @@ Pull Requests ------------- -In general, pull requests should be submitted to the current, unreleased -development branch. Eg. if the current release is 1.8.x, pull requests should -be made to the 1.9 branch. Exceptions are bug fixes to released versions -which should be made to the relevant release branch and merged upstream into +Pull requests should be submitted to the current, unreleased development +branch. Eg. if the current release is |release|, pull requests should be made +to the |version| branch. Exceptions are bug fixes to released versions which +should be made to the relevant release branch and merged upstream into development. Please use tox to test code for different submissions **before** making a @@ -125,7 +150,7 @@ +++++++++++++ Remember to update the documentation when adding or changing features. Check -that documentation is syntactically correct +that documentation is syntactically correct. :code:`tox -e doc` @@ -141,9 +166,9 @@ ++++++++++ There is a tox profile for long-running memory benchmarks using the -`memory_utils` package +`memory_utils` package. - :code:`tox -e memory` +:code:`tox -e memory` Pympler Binary files /tmp/tmpOn6hKO/Diuqtbx54t/openpyxl-2.3.0/doc/filters.png and /tmp/tmpOn6hKO/8y7RcCZxFs/openpyxl-2.4.9/doc/filters.png differ diff -Nru openpyxl-2.3.0/doc/filters.py openpyxl-2.4.9/doc/filters.py --- openpyxl-2.3.0/doc/filters.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/filters.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,31 @@ +from openpyxl import Workbook + +wb = Workbook() +ws = wb.active + +data = [ + ["Fruit", "Quantity"], + ["Kiwi", 3], + ["Grape", 15], + ["Apple", 3], + ["Peach", 3], + ["Pomegranate", 3], + ["Pear", 3], + ["Tangerine", 3], + ["Blueberry", 3], + ["Mango", 3], + ["Watermelon", 3], + ["Blackberry", 3], + ["Orange", 3], + ["Raspberry", 3], + ["Banana", 3] +] + +for r in data: + ws.append(r) + +ws.auto_filter.ref = "A1:B15" +ws.auto_filter.add_filter_column(0, ["Kiwi", "Apple", "Mango"]) +ws.auto_filter.add_sort_condition("B2:B15") + +wb.save("filtered.xlsx") diff -Nru openpyxl-2.3.0/doc/filters.rst openpyxl-2.4.9/doc/filters.rst --- openpyxl-2.3.0/doc/filters.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/filters.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,19 @@ +Using filters and sorts +======================= + + +It's possible to add a filter to a worksheet. + +.. note:: + + Filters and sorts can only be configured by openpyxl but will need to be applied in applications like Excel. This is because they actually rearranges or format cells or rows in the range. + +To add a filter you define a range and then add columns and sort conditions: + +.. literalinclude:: filters.py + + +This will add the relevant instructions to the file but will **neither actually filter nor sort**. + +.. image:: filters.png + :alt: "Filter and sort prepared but not executed for a range of cells" diff -Nru openpyxl-2.3.0/doc/format_merged_cells.py openpyxl-2.4.9/doc/format_merged_cells.py --- openpyxl-2.3.0/doc/format_merged_cells.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/format_merged_cells.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,59 @@ +from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment +from openpyxl import Workbook + + +def style_range(ws, cell_range, border=Border(), fill=None, font=None, alignment=None): + """ + Apply styles to a range of cells as if they were a single cell. + + :param ws: Excel worksheet instance + :param range: An excel range to style (e.g. A1:F20) + :param border: An openpyxl Border + :param fill: An openpyxl PatternFill or GradientFill + :param font: An openpyxl Font object + """ + + top = Border(top=border.top) + left = Border(left=border.left) + right = Border(right=border.right) + bottom = Border(bottom=border.bottom) + + first_cell = ws[cell_range.split(":")[0]] + if alignment: + ws.merge_cells(cell_range) + first_cell.alignment = alignment + + rows = ws[cell_range] + if font: + first_cell.font = font + + for cell in rows[0]: + cell.border = cell.border + top + for cell in rows[-1]: + cell.border = cell.border + bottom + + for row in rows: + l = row[0] + r = row[-1] + l.border = l.border + left + r.border = r.border + right + if fill: + for c in row: + c.fill = fill + +wb = Workbook() +ws = wb.active +my_cell = ws['B2'] +my_cell.value = "My Cell" +thin = Side(border_style="thin", color="000000") +double = Side(border_style="double", color="ff0000") + +border = Border(top=double, left=thin, right=thin, bottom=double) +fill = PatternFill("solid", fgColor="DDDDDD") +fill = GradientFill(stop=("000000", "FFFFFF")) +font = Font(b=True, color="FF0000") +al = Alignment(horizontal="center", vertical="center") + + +style_range(ws, 'B2:F4', border=border, fill=fill, font=font, alignment=al) +wb.save("styled.xlsx") diff -Nru openpyxl-2.3.0/doc/formatting.rst openpyxl-2.4.9/doc/formatting.rst --- openpyxl-2.3.0/doc/formatting.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/formatting.rst 2017-10-17 07:04:42.000000000 +0000 @@ -16,7 +16,7 @@ >>> from openpyxl.formatting import Rule >>> from openpyxl.styles import Font, PatternFill, Border >>> from openpyxl.styles.differential import DifferentialStyle ->>> dxf = DifferentialStyle(font=Font(bold=True), fill=PatternFill(start_color='FFEE1111', end_color='FFEE1111')) +>>> dxf = DifferentialStyle(font=Font(bold=True), fill=PatternFill(start_color='EE1111', end_color='EE1111')) >>> rule = Rule(type='cellIs', dxf=dxf, formula=["10"]) Because the signatures for some rules can be quite verbose there are also some convenience factories for creating them. @@ -47,11 +47,11 @@ >>> first = FormatObject(type='min') >>> last = FormatObject(type='max') >>> # colors match the format objects: ->>> colors = [Color('FFAA0000'), Color('FF00AA00')] +>>> colors = [Color('AA0000'), Color('00AA00')] >>> cs2 = ColorScale(cfvo=[first, last], color=colors) >>> # a three color scale would extend the sequences >>> mid = FormatObject(type='num', val=40) ->>> colors.insert(1, Color('FF00AA00')) +>>> colors.insert(1, Color('00AA00')) >>> cs3 = ColorScale(cfvo=[first, mid, last], color=colors) >>> # create a rule with the color scale >>> from openpyxl.formatting.rule import Rule @@ -105,7 +105,7 @@ >>> from openpyxl.formatting.rule import DataBar, FormatObject >>> first = FormatObject(type='min') >>> second = FormatObject(type='max') ->>> data_bar = DataBar(cfvo=[first, second], color="FF638EC6", showValue=None, minLength=None, maxLength=None) +>>> data_bar = DataBar(cfvo=[first, second], color="638EC6", showValue=None, minLength=None, maxLength=None) >>> # assign the data bar to a rule >>> from openpyxl.formatting.rule import Rule >>> rule = Rule(type='dataBar', dataBar=data_bar) @@ -134,29 +134,29 @@ >>> from openpyxl import Workbook >>> from openpyxl.styles import Color, PatternFill, Font, Border +>>> from openpyxl.styles.differential import DifferentialStyle >>> from openpyxl.formatting.rule import ColorScaleRule, CellIsRule, FormulaRule >>> >>> wb = Workbook() >>> ws = wb.active >>> >>> # Create fill ->>> redFill = PatternFill(start_color='FFEE1111', -... end_color='FFEE1111', +>>> redFill = PatternFill(start_color='EE1111', +... end_color='EE1111', ... fill_type='solid') >>> >>> # Add a two-color scale ->>> # add2ColorScale(range_string, start_type, start_value, start_color, end_type, end_value, end_color) ->>> # Takes colors in excel 'FFRRGGBB' style. +>>> # Takes colors in excel 'RRGGBB' style. >>> ws.conditional_formatting.add('A1:A10', -... ColorScaleRule(start_type='min', start_color='FFAA0000', -... end_type='max', end_color='FF00AA00') +... ColorScaleRule(start_type='min', start_color='AA0000', +... end_type='max', end_color='00AA00') ... ) >>> >>> # Add a three-color scale >>> ws.conditional_formatting.add('B1:B10', -... ColorScaleRule(start_type='percentile', start_value=10, start_color='FFAA0000', -... mid_type='percentile', mid_value=50, mid_color='FF0000AA', -... end_type='percentile', end_value=90, end_color='FF00AA00') +... ColorScaleRule(start_type='percentile', start_value=10, start_color='AA0000', +... mid_type='percentile', mid_value=50, mid_color='0000AA', +... end_type='percentile', end_value=90, end_color='00AA00') ... ) >>> >>> # Add a conditional formatting based on a cell comparison @@ -179,4 +179,11 @@ >>> ws.conditional_formatting.add('E1:E10', ... FormulaRule(formula=['E1=0'], font=myFont, border=myBorder, fill=redFill)) >>> +>>> # Highlight cells that contain particular text by using a special formula +>>> red_text = Font(color="9C0006") +>>> red_fill = PatternFill(bgColor="FFC7CE") +>>> dxf = DifferentialStyle(font=red_text, fill=red_fill) +>>> rule = Rule(type="containsText", operator="containsText", text="highlight", dxf=dxf) +>>> rule.formula = ['NOT(ISERROR(SEARCH("highlight",A1)))'] +>>> ws.conditional_formatting.add('A1:F40', rule) >>> wb.save("test.xlsx") diff -Nru openpyxl-2.3.0/doc/formula.rst openpyxl-2.4.9/doc/formula.rst --- openpyxl-2.3.0/doc/formula.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/formula.rst 2017-10-17 07:04:42.000000000 +0000 @@ -9,7 +9,6 @@ >>> from openpyxl.formula import Tokenizer >>> tok = Tokenizer("""=IF($A$1,"then True",MAX(DEFAULT_VAL,'Sheet 2'!B1))""") ->>> tok.parse() >>> print("\n".join("%12s%11s%9s" % (t.value, t.type, t.subtype) for t in tok.items)) IF( FUNC OPEN $A$1 OPERAND RANGE diff -Nru openpyxl-2.3.0/doc/index.rst openpyxl-2.4.9/doc/index.rst --- openpyxl-2.3.0/doc/index.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/index.rst 2017-10-17 07:04:42.000000000 +0000 @@ -31,9 +31,10 @@ This is an open source project, maintained by volunteers in their spare time. This may well mean that particular features or functions that you would like are missing. But things don't have to stay that way. You can contribute the -project :ref:`development` yourself or contract a developer for particular +project :doc:`development` yourself or contract a developer for particular features. + Professional support for openpyxl is available from `Clark Consulting & Research `_ and `Adimian `_. Donations to the project to support further @@ -58,37 +59,41 @@ Official user list can be found on http://groups.google.com/group/openpyxl-users + How to Contribute Code ---------------------- Any help will be greatly appreciated, just follow those steps: - 1. Please start a new fork (https://bitbucket.org/openpyxl/openpyxl/fork) + 1. + Please start a new fork (https://bitbucket.org/openpyxl/openpyxl/fork) for each independent feature, don't try to fix all problems at the same time, it's easier for those who will review and merge your changes ;-) - 2. Hack hack hack + 2. + Hack hack hack - 3. Don't forget to add unit tests for your changes ! (YES, even if it's a - one-liner, or there is a high probability your work will not be taken - into consideration). There are plenty of examples in the /test directory - if you lack know-how or inspiration. + 3. + Don't forget to add unit tests for your changes! (YES, even if it's a + one-liner, changes without tests will **not** be accepted.) There are plenty + of examples in the source if you lack know-how or inspiration. - 4. If you added a whole new feature, or just improved something, you can + 4. + If you added a whole new feature, or just improved something, you can be proud of it, so add yourself to the AUTHORS file :-) - 5. Let people know about the shiny thing you just implemented, update the - docs ! + 5. + Let people know about the shiny thing you just implemented, update the + docs! - 6. When it's done, just issue a pull request (click on the large "pull + 6. + When it's done, just issue a pull request (click on the large "pull request" button on *your* repository) and wait for your code to be reviewed, and, if you followed all theses steps, merged into the main repository. -For further information see :ref:`development` - -.. note: +For further information see :doc:`development` Other ways to help @@ -104,7 +109,7 @@ documentation, it's pretty hard to do anything with it * proposing compatibility fixes for different versions of Python: we support - 2.6 to 3.4, so if it does not work on your environment, let us know :-) + 2.6 to 3.5, so if it does not work on your environment, let us know :-) Installation @@ -117,22 +122,14 @@ .. note:: - To install from sources (there is nothing to build, openpyxl is 100% pure - Python), you can download an archive from `bitbucket`_ (look in the - "tags" tab). - - There is support for the popular `lxml`_ library which will be used if it is installed. + There is support for the popular `lxml`_ library which will be used if it + is installed. This is particular useful when creating large files. - After extracting the archive, you can do:: - - $ python setup.py develop - -.. _bitbucket: https://bitbucket.org/openpyxl/openpyxl/downloads .. _lxml: http://lxml.de .. warning:: - To be able to include images (jpeg,png,bmp,...) into an openpyxl file, + To be able to include images (jpeg, png, bmp,...) into an openpyxl file, you will also need the "pillow" library that can be installed with:: $ pip install pillow @@ -141,16 +138,15 @@ and head to the bottom of the page for Windows binaries. -Getting the source ------------------- +Working with a checkout +----------------------- -Source code is hosted on bitbucket.org. You can get it using a Mercurial client and the following URLs: +Sometimes you might want to work with the checkout of a particular version. +This may be the case if bugs have been fixed but a release has not yet been +made. - * $ hg clone \https://bitbucket.org/openpyxl/openpyxl -r |release| - -or to get the latest development version: - - * $ hg clone \https://bitbucket.org/openpyxl/openpyxl +.. parsed-literal:: + $ pip install -e hg+https://bitbucket.org/openpyxl/openpyxl@\ |version|\ #egg=openpyxl Usage examples @@ -170,6 +166,15 @@ usage + +Pandas and NumPy +++++++++++++++++ + +.. toctree:: + + pandas + + Charts ++++++ @@ -177,6 +182,7 @@ charts/introduction + Comments ++++++++ @@ -184,6 +190,7 @@ comments + Read/write large files ++++++++++++++++++++++ @@ -191,12 +198,15 @@ optimized + Working with styles +++++++++++++++++++ .. toctree:: styles + worksheet_properties + Conditional Formatting ++++++++++++++++++++++ @@ -205,6 +215,31 @@ formatting + +Print Settings +++++++++++++++++++++++ + +.. toctree:: + + print_settings + + +Filtering and Sorting ++++++++++++++++++++++ + +.. toctree:: + + filters + + +Worksheet Tables +++++++++++++++++ + +.. toctree:: + + worksheet_tables.rst + + Data Validation +++++++++++++++ @@ -212,6 +247,15 @@ validation + +Defined Names & Ranges +++++++++++++++++++++++ + +.. toctree:: + + defined_names + + Parsing Formulas ++++++++++++++++ @@ -220,6 +264,14 @@ formula +Protection +++++++++++ + +.. toctree:: + + protection + + Information for Developers -------------------------- @@ -228,6 +280,7 @@ development windows-development + API Documentation ------------------ diff -Nru openpyxl-2.3.0/doc/optimized.rst openpyxl-2.4.9/doc/optimized.rst --- openpyxl-2.3.0/doc/optimized.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/optimized.rst 2017-10-17 07:04:42.000000000 +0000 @@ -10,7 +10,7 @@ from openpyxl import load_workbook wb = load_workbook(filename='large_file.xlsx', read_only=True) - ws = wb['big_data'] # ws is now an IterableWorksheet + ws = wb['big_data'] for row in ws.rows: for cell in row: @@ -24,12 +24,26 @@ :class:`openpyxl.cell.read_only.ReadOnlyCell`. +Worksheet dimensions +-------------------- + +Read-only mode relies on applications and libraries that created the file +providing correct information about the worksheets, specifically the used +part of it, known as the dimensions. Some applications set this incorrectly. +You can check the apparent dimensions of a worksheet using +`ws.calculate_dimension()`. If this returns a range that you know is +incorrect, say `A1:A1` then simply resetting the max_row and max_column +attributes should allow you to work with the file:: + + ws.max_row = ws.max_column = None + + Write-only mode =============== Here again, the regular :class:`openpyxl.worksheet.worksheet.Worksheet` has been replaced by a faster alternative, the :class:`openpyxl.writer.write_only.WriteOnlyWorksheet`. -When you want to dump large amounts of data, you might find optimized writer helpful. +When you want to dump large amounts of data make sure you have `lxml` installed. .. :: doctest @@ -49,29 +63,41 @@ .. :: doctest >>> from openpyxl import Workbook ->>> wb = Workbook(optimized_write = True) +>>> wb = Workbook(write_only = True) >>> ws = wb.create_sheet() >>> from openpyxl.writer.write_only import WriteOnlyCell >>> from openpyxl.comments import Comment ->>> from openpyxl.styles import Style, Font +>>> from openpyxl.styles import Font >>> cell = WriteOnlyCell(ws, value="hello world") ->>> cell.font = Font(name='Courrier', size=36) +>>> cell.font = Font(name='Courier', size=36) >>> cell.comment = Comment(text="A comment", author="Author's Name") +>>> ws.append([cell, 3.14, None]) +>>> wb.save('write_only_file.xlsx') -This will append one new row with 3 cells, one text cell with custom font and -font size, a float and an empty cell that will be discarded anyway. +This will create a write-only workbook with a single sheet, and append +a row of 3 cells: one text cell with a custom font and a comment, a +floating-point number, and an empty cell (which will be discarded +anyway). .. warning:: - * Those worksheet only have an append() method, it's not possible to - access independent cells directly (through cell() or range()). They are - write-only. + * Unlike a normal workbook, a newly-created write-only workbook + does not contain any worksheets; a worksheet must be specifically + created with the :func:`create_sheet()` method. + + * In a write-only workbook, rows can only be added with + :func:`append()`. It is not possible to write (or read) cells at + arbitrary locations with :func:`cell()` or :func:`iter_rows()`. * It is able to export unlimited amount of data (even more than Excel can handle actually), while keeping memory usage under 10Mb. - * A workbook using the optimized writer can only be saved once. After + * A write-only workbook can only be saved once. After that, every attempt to save the workbook or append() to an existing worksheet will raise an :class:`openpyxl.utils.exceptions.WorkbookAlreadySaved` exception. + + * Everything that appears in the file before the actual cell data must be created + before cells are added because it must written to the file before then. + For example, `freeze_panes` should be set before cells are added. diff -Nru openpyxl-2.3.0/doc/pandas.rst openpyxl-2.4.9/doc/pandas.rst --- openpyxl-2.3.0/doc/pandas.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/pandas.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,93 @@ +Working with Pandas and NumPy +============================= + +openpyxl is able to work with the popular libraries `Pandas +`_ and `NumPy `_ + + +NumPy Support +------------- + +openpyxl has builtin support for the NumPy types float, integer and boolean. +DateTimes are supported using the Pandas' Timestamp type. + + +Working with Pandas Dataframes +------------------------------ + +The :func:`openpyxl.utils.dataframe.dataframe_to_rows` function provides a +simple way to work with Pandas Dataframes:: + + from openpyxl.utils.dataframe import dataframe_to_rows + wb = Workbook() + ws = wb.active + + for r in dataframe_to_rows(df, index=True, header=True): + ws.append(r) + + +While Pandas itself supports conversion to Excel, this gives client code +additional flexibility including the ability to stream dataframes straight to +files. + +To convert a dataframe into a worksheet highlighting the header and index:: + + wb = Workbook() + ws = wb.active + + for r in dataframe_to_rows(df, index=True, header=True): + ws.append(r) + + for cell in ws['A'] + ws[1]: + cell.style = 'Pandas' + + wb.save("pandas_openpyxl.xlsx") + +Alternatively, if you just want to convert the data you can use write-only mode:: + + from openpyxl.cell.cell import WriteOnlyCell + wb = Workbook(write_only=True) + ws = wb.create_sheet() + + cell = WriteOnlyCell(ws) + cell.style = 'Pandas' + + def format_first_row(row, cell): + + for c in row: + cell.value = c + yield cell + + rows = dataframe_to_rows(df) + first_row = format_first_row(next(rows), cell) + ws.append(first_row) + + for row in rows: + row = list(row) + cell.value = row[0] + row[0] = cell + ws.append(row) + + wb.save("openpyxl_stream.xlsx") + + +This code will work just as well with a standard workbook. + + +Converting a worksheet to a Dataframe +------------------------------------- + +To convert a worksheet to a Dataframe you can use the `values` property. This +is very easy if the worksheet has no headers or indices:: + + df = DataFrame(ws.values) + +If the worksheet does have headers or indices, such as one created by Pandas, +then a little more work is required:: + + data = ws.values + cols = next(data)[1:] + data = list(data) + idx = [r[0] for r in data] + data = (islice(r, 1, None) for r in data) + df = DataFrame(data, index=idx, columns=cols) diff -Nru openpyxl-2.3.0/doc/print_settings.rst openpyxl-2.4.9/doc/print_settings.rst --- openpyxl-2.3.0/doc/print_settings.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/print_settings.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,76 @@ +Print Settings +============== + +openpyxl provides reasonably full support for print settings. + + +Edit Print Options +------------------- +.. :: doctest + +>>> from openpyxl.workbook import Workbook +>>> +>>> wb = Workbook() +>>> ws = wb.active +>>> +>>> ws.print_options.horizontalCentered = True +>>> ws.print_options.verticalCentered = True + + +Headers and Footers +------------------- + +Headers and footers use their own formatting language. This is fully +supported when writing them but, due to the complexity and the possibility of +nesting, only partially when reading them. There is support for the font, +size and color for a left, centre/center, or right element. Granular control +(highlighting individuals words) will require applying control codes +manually. + + +.. :: doctest + +>>> from openpyxl.workbook import Workbook +>>> +>>> wb = Workbook() +>>> ws = wb.active +>>> +>>> ws.oddHeader.left.text = "Page &[Page] of &N" +>>> ws.oddHeader.left.size = 14 +>>> ws.oddHeader.left.font = "Tahoma,Bold" +>>> ws.oddHeader.left.color = "CC3366" + + +Also supported are `evenHeader` and `evenFooter` as well as `firstHeader` and `firstFooter`. + + +Add Print Titles +---------------- + +You can print titles on every page to ensure that the data is properly +labelled. + +.. :: doctest + +>>> from openpyxl.workbook import Workbook +>>> +>>> wb = Workbook() +>>> ws = wb.active +>>> +>>> ws.print_title_cols = 'A:B' # the first two cols +>>> ws.print_title_rows = '1:1' # the first row + + +Add a Print Area +---------------- + +You can select a part of a worksheet as the only part that you want to print + +.. :: doctest + +>>> from openpyxl.workbook import Workbook +>>> +>>> wb = Workbook() +>>> ws = wb.active +>>> +>>> ws.print_area = 'A1:F10' diff -Nru openpyxl-2.3.0/doc/protection.rst openpyxl-2.4.9/doc/protection.rst --- openpyxl-2.3.0/doc/protection.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/protection.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,57 @@ +Protection +========== + +.. warning:: + + Password protecting a workbook or worksheet only provides a quite basic level of security. + The data is not encrypted, so can be modified by any number of freely available tools. In + fact the specification states: "Worksheet or workbook element protection should not be + confused with file security. It is not meant to make your workbook safe from unintentional + modification, and cannot protect it from malicious modification." + +Openpyxl provides support for protecting a workbook and worksheet from modification. The Open XML +"Legacy Password Hash Algorithm" is used to generate hashed password values unless another +algorithm is explicitly configured. + +Workbook Protection +------------------- + +To prevent other users from viewing hidden worksheets, adding, moving, deleting, or hiding worksheets, and +renaming worksheets, you can protect the structure of your workbook with a password. The password can be +set using the :func:`openpyxl.workbook.protection.WorkbookProtection.workbookPassword` property :: + + >>> wb.security.workbookPassword = '...' + +Similarly removing change tracking and change history from a shared workbook can be prevented by setting +another password. This password can be set using the +:func:`openpyxl.workbook.protection.WorkbookProtection.revisionsPassword` property :: + + >>> wb.security.revisionsPassword = '...' + +Other properties on the :class:`openpyxl.workbook.protection.WorkbookProtection` object control exactly what +restrictions are in place, but these will only be enforced if the appropriate password is set. + +Specific setter functions are provided if you need to set the raw password value without using the +default hashing algorithm - e.g. :: + + hashed_password = ... + wb.security.set_workbook_password(hashed_password, already_hashed=True) + + +Worksheet Protection +-------------------- + +Various aspects of a worksheet can also be locked by setting attributes on the +:class:`openpyxl.worksheet.protection.SheetProtection` object. Unlike the worksheet protection, sheet +protection may be enabled with or without using a password. Sheet protection is enabled using the +:attr:`openpxyl.worksheet.protection.SheetProtection.sheet` attribute :: + + >>> ws = wb.active + >>> wb.protection.sheet = True + +If no password is specified, users can disable configured sheet protection without specifying a password. +Otherwise they must supply a password to change configured protections. The password is set using +the :func:`openpxyl.worksheet.protection.SheetProtection.password` property :: + + >>> ws = wb.active + >>> ws.protection.password = '...' diff -Nru openpyxl-2.3.0/doc/styles.rst openpyxl-2.4.9/doc/styles.rst --- openpyxl-2.3.0/doc/styles.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/styles.rst 2017-10-17 07:04:42.000000000 +0000 @@ -5,8 +5,7 @@ ------------ Styles are used to change the look of your data while displayed on screen. -They are also used to determine the number format being used for a given cell -or range of cells. +They are also used to determine the formatting for numbers. Styles can be applied to the following aspects: @@ -61,7 +60,15 @@ ... hidden=False) >>> -Styles are shared between objects and once they have been assigned they +Cell Styles and Named Styles +---------------------------- + +There are two types of styles: cell styles and named styles, also known as style templates. + +Cell Styles ++++++++++++ + +Cell styles are shared between objects and once they have been assigned they cannot be changed. This stops unwanted side-effects such as changing the style for lots of cells when instead of only one. @@ -69,7 +76,6 @@ >>> from openpyxl.styles import colors >>> from openpyxl.styles import Font, Color ->>> from openpyxl.styles import colors >>> from openpyxl import Workbook >>> wb = Workbook() >>> ws = wb.active @@ -95,9 +101,11 @@ .. :: doctest >>> from openpyxl.styles import Font +>>> from copy import copy >>> >>> ft1 = Font(name='Arial', size=14) ->>> ft2 = ft1.copy(name="Tahoma") +>>> ft2 = copy(ft1) +>>> ft2.name = "Tahoma" >>> ft1.name 'Arial' >>> ft2.name @@ -108,7 +116,7 @@ Basic Font Colors ----------------- -Colors are usually RGB or aRGB hexvalues. The `colors` module contains some constants +Colors are usually RGB or aRGB hexvalues. The `colors` module contains some handy constants .. :: doctest @@ -147,6 +155,18 @@ >>> row = ws.row_dimensions[1] >>> row.font = Font(underline="single") +.. _styling-merged-cells: + +Styling Merged Cells +-------------------- + +Sometimes you want to format a range of cells as if they were a single +object. Excel pretends that this is possible by merging cells (deleting all +but the top-left cell) and then recreating them in order to apply +pseudo-styles. + +.. literalinclude:: format_merged_cells.py + Edit Page Setup ------------------- @@ -163,78 +183,119 @@ >>> ws.page_setup.fitToWidth = 1 -Edit Print Options -------------------- -.. :: doctest +Named Styles +++++++++++++ ->>> from openpyxl.workbook import Workbook ->>> ->>> wb = Workbook() ->>> ws = wb.active ->>> ->>> ws.print_options.horizontalCentered = True ->>> ws.print_options.verticalCentered = True +In contrast to Cell Styles, Named Styles are mutable. They make sense when +you want to apply formatting to lots of different cells at once. NB. once you +have assigned a named style to a cell, additional changes to the style will +**not** affect the cell. +Once a named style has been registered with a workbook, it can be referred to simply by name. -Header / Footer ---------------- - -Headers and footers use their own formatting language. This is fully -supported when writing them but, due to the complexity and the possibility of -nesting, only partially when reading them. - +Creating a Named Style +---------------------- .. :: doctest ->>> from openpyxl.workbook import Workbook ->>> ->>> wb = Workbook() ->>> ws = wb.worksheets[0] ->>> ->>> ws.header_footer.center_header.text = 'My Excel Page' ->>> ws.header_footer.center_header.font_size = 14 ->>> ws.header_footer.center_header.font_name = "Tahoma,Bold" ->>> ws.header_footer.center_header.font_color = "CC3366" - -# Or just ->>> ws.header_footer.right_footer.text = 'My Right Footer' - - -Worksheet Additional Properties -------------------------------- - -These are advanced properties for particular behaviours, the most used ones -are the "fitTopage" page setup property and the tabColor that define the -background color of the worksheet tab. - -Available properties for worksheet: "codeName", -"enableFormatConditionsCalculation", "filterMode", "published", -"syncHorizontal", "syncRef", "syncVertical", "transitionEvaluation", -"transitionEntry", "tabColor". Available fields for page setup properties: -"autoPageBreaks", "fitToPage". Available fields for outline properties: -"applyStyles", "summaryBelow", "summaryRight", "showOutlineSymbols". - -see http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.sheetproperties%28v=office.14%29.aspx_ for details. +>>> from openpyxl.styles import NamedStyle, Font, Border, Side +>>> highlight = NamedStyle(name="highlight") +>>> highlight.font = Font(bold=True, size=20) +>>> bd = Side(style='thick', color="000000") +>>> highlight.border = Border(left=bd, top=bd, right=bd, bottom=bd) + +Once a named style has been created, it can be registered with the workbook: + +>>> wb.add_named_style(highlight) + +But named styles will also be registered automatically the first time they are assigned to a cell: + +>>> ws['A1'].style = highlight + +Once registered assign the style using just the name: + +>>> ws['D5'].style = 'highlight' + + +Using builtin styles +-------------------- + +The specification includes some builtin styles which can also be used. +Unfortunately, the names for these styles are stored in their localised +forms. openpyxl will only recognise the English names and only exactly as +written here. These are as follows: + + +* 'Normal' # same as no style + +Number formats +++++++++++++++ + +* 'Comma' +* 'Comma [0]' +* 'Currency' +* 'Currency [0]' +* 'Percent' + +Informative ++++++++++++ + +* 'Calculation' +* 'Total' +* 'Note' +* 'Warning Text' +* 'Explanatory Text' + +Text styles ++++++++++++ + +* 'Title' +* 'Headline 1' +* 'Headline 2' +* 'Headline 3' +* 'Headline 4' +* 'Hyperlink' +* 'Followed Hyperlink' +* 'Linked Cell' + +Comparisons ++++++++++++ + +* 'Input' +* 'Output' +* 'Check Cell' +* 'Good' +* 'Bad' +* 'Neutral' + +Highlights +++++++++++ + +* 'Accent1' +* '20 % - Accent1' +* '40 % - Accent1' +* '60 % - Accent1' +* 'Accent2' +* '20 % - Accent2' +* '40 % - Accent2' +* '60 % - Accent2' +* 'Accent3' +* '20 % - Accent3' +* '40 % - Accent3' +* '60 % - Accent3' +* 'Accent4' +* '20 % - Accent4' +* '40 % - Accent4' +* '60 % - Accent4' +* 'Accent5' +* '20 % - Accent5' +* '40 % - Accent5' +* '60 % - Accent5' +* 'Accent6' +* '20 % - Accent6' +* '40 % - Accent6' +* '60 % - Accent6' +* 'Pandas' -..note:: - By default, outline properties are intitialized so you can directly modify each of their 4 attributes, while page setup properties don't. - If you want modify the latter, you should first initialize a PageSetupPr object with the required parameters. - Once done, they can be directly modified by the routine later if needed. - - -.. :: doctest - ->>> from openpyxl.workbook import Workbook ->>> from openpyxl.worksheet.properties import WorksheetProperties, PageSetupProperties ->>> ->>> wb = Workbook() ->>> ws = wb.active ->>> ->>> wsprops = ws.sheet_properties ->>> wsprops.tabColor = "1072BA" ->>> wsprops.filterMode = False ->>> wsprops.PageSetupProperties = PageSetupProperties(fitToPage=True, autoPageBreaks=False) ->>> wsprops.outlinePr.summaryBelow = False ->>> wsprops.outlinePr.applyStyles = True ->>> wsprops.PageSetupProperties.autoPageBreaks = True +For more information about the builtin styles please refer to the :mod:`openpyxl.styles.builtins` Binary files /tmp/tmpOn6hKO/Diuqtbx54t/openpyxl-2.3.0/doc/table.png and /tmp/tmpOn6hKO/8y7RcCZxFs/openpyxl-2.4.9/doc/table.png differ diff -Nru openpyxl-2.3.0/doc/table.py openpyxl-2.4.9/doc/table.py --- openpyxl-2.3.0/doc/table.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/table.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,26 @@ +from openpyxl import Workbook +from openpyxl.worksheet.table import Table, TableStyleInfo + +wb = Workbook() +ws = wb.active + +data = [ + ['Apples', 10000, 5000, 8000, 6000], + ['Pears', 2000, 3000, 4000, 5000], + ['Bananas', 6000, 6000, 6500, 6000], + ['Oranges', 500, 300, 200, 700], +] + +# add column headings. NB. these must be strings +ws.append(["Fruit", "2011", "2012", "2013", "2014"]) +for row in data: + ws.append(row) + +tab = Table(displayName="Table1", ref="A1:E5") + +# Add a default style with striped rows and banded columns +style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False, + showLastColumn=False, showRowStripes=True, showColumnStripes=True) +tab.tableStyleInfo = style +ws.add_table(tab) +wb.save("table.xlsx") diff -Nru openpyxl-2.3.0/doc/tutorial.rst openpyxl-2.4.9/doc/tutorial.rst --- openpyxl-2.3.0/doc/tutorial.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/tutorial.rst 2017-10-17 07:04:42.000000000 +0000 @@ -5,7 +5,7 @@ ----------------- There is no need to create a file on the filesystem to get started with openpyxl. -Just import the Worbook class and start using it :: +Just import the Workbook class and start using it :: >>> from openpyxl import Workbook >>> wb = Workbook() @@ -24,9 +24,9 @@ You can also create new worksheets by using the :func:`openpyxl.workbook.Workbook.create_sheet` method :: - >>> ws1 = wb.create_sheet() # insert at the end (default) + >>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default) # or - >>> ws2 = wb.create_sheet(0) # insert at first position + >>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position Sheets are given a name automatically when they are created. They are numbered in sequence (Sheet, Sheet1, Sheet2, ...). @@ -39,18 +39,14 @@ ws.sheet_properties.tabColor = "1072BA" -Once you gave a worksheet a name, you can get it as a key of the workbook or -using the :func:`openpyxl.workbook.Workbook.get_sheet_by_name` method :: +Once you gave a worksheet a name, you can get it as a key of the workbook:: >>> ws3 = wb["New Title"] - >>> ws4 = wb.get_sheet_by_name("New Title") - >>> ws is ws3 is ws4 - True You can review the names of all worksheets of the workbook with the -:func:`openpyxl.workbook.Workbook.get_sheet_names` method :: +:func:`openpyxl.workbook.Workbook.sheetnames` property :: - >>> print(wb.get_sheet_names()) + >>> print(wb.sheetnames) ['Sheet2', 'New Title', 'Sheet1'] You can loop through worksheets :: @@ -58,6 +54,26 @@ >>> for sheet in wb: ... print(sheet.title) +You can create copies of worksheets *within a single workbook*: + +:func:`openpyxl.workbook.Workbook.copy_worksheet` method:: + + >>> source = wb.active + >>> target = wb.copy_worksheet(source) + +.. note:: + + Only cells (including values, styles, hyperlinks and comments) and + certain worksheet attribues (including dimensions, format and + properties) are copied. All other workbook / worksheet attributes + are not copied - e.g. Images, Charts. + +.. note:: + + You cannot copy worksheets between workbooks. You also cannot copy + a worksheet if the workbook is open in `read-only` or `write-only` + mode. + Playing with data ------------------ @@ -76,19 +92,16 @@ >>> ws['A4'] = 4 -There is also the :func:`openpyxl.worksheet.Worksheet.cell` method:: +There is also the :func:`openpyxl.worksheet.Worksheet.cell` method. - >>> c = ws.cell('A4') +This provides access to cells using row and column notation:: -You can also access a cell using row and column notation:: - - >>> d = ws.cell(row = 4, column = 2) + >>> d = ws.cell(row=4, column=2, value=10) .. note:: When a worksheet is created in memory, it contains no `cells`. They are - created when first accessed. This way we don't create objects that would never - be accessed, thus reducing the memory footprint. + created when first accessed. .. warning:: @@ -99,11 +112,10 @@ >>> for i in range(1,101): ... for j in range(1,101): - ... ws.cell(row = i, column = j) + ... ws.cell(row=i, column=j) will create 100x100 cells in memory, for nothing. - However, there is a way to clean all those unwanted cells, we'll see that later. Accessing many cells @@ -113,15 +125,19 @@ >>> cell_range = ws['A1':'C2'] + +Ranges of rows or columns can be obtained similarly:: + + >>> colC = ws['C'] + >>> col_range = ws['C:D'] + >>> row10 = ws[10] + >>> row_range = ws[5:10] + You can also use the :func:`openpyxl.worksheet.Worksheet.iter_rows` method:: - >>> tuple(ws.iter_rows('A1:C2')) - ((, , ), - (, , )) - - >>> for row in ws.iter_rows('A1:C2'): - ... for cell in row: - ... print cell + >>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): + ... for cell in row: + ... print(cell) @@ -129,12 +145,25 @@ +Likewise the :func:`openpyxl.worksheet.Worksheet.iter_cols` method will return columns:: + + >>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2): + ... for cell in col: + ... print(cell) + + + + + + + + If you need to iterate through all the rows or columns of a file, you can instead use the :func:`openpyxl.worksheet.Worksheet.rows` property:: >>> ws = wb.active >>> ws['C9'] = 'hello world' - >>> ws.rows + >>> tuple(ws.rows) ((, , ), (, , ), (, , ), @@ -147,7 +176,7 @@ or the :func:`openpyxl.worksheet.Worksheet.columns` property:: - >>> ws.columns + >>> tuple(ws.columns) ((, , , @@ -222,20 +251,18 @@ As OOXML files are basically ZIP files, you can also end the filename with .zip and open it with your favourite ZIP archive manager. -You can specify the attribute as_template=True, to save the document -as a template - - >>> wb = load_workbook('document.xlsx')# doctest: +SKIP - >>> wb.save('document_template.xltx', as_template=True)# doctest: +SKIP - -or specify the attribute as_template=False (by default), to save -the document template (or document) as document. +You can specify the attribute `template=True`, to save a workbook +as a template:: - >>> wb = load_workbook('document_template.xltx')# doctest: +SKIP - >>> wb.save('document.xlsx', as_template=False)# doctest: +SKIP - - >>> wb = load_workbook('document.xlsx')# doctest: +SKIP - >>> wb.save('new_document.xlsx', as_template=False)# doctest: +SKIP + >>> wb = load_workbook('document.xlsx') + >>> wb.template = True + >>> wb.save('document_template.xltx') + +or set this attribute to `False` (default), to save as a document:: + + >>> wb = load_workbook('document_template.xltx') + >>> wb.template = False + >>> wb.save('document.xlsx', as_template=False) .. warning:: @@ -245,27 +272,26 @@ .. note:: - The following will fail: + The following will fail:: - >>> wb = load_workbook('document.xlsx')# doctest: +SKIP + >>> wb = load_workbook('document.xlsx') >>> # Need to save with the extension *.xlsx - >>> wb.save('new_document.xlsm')# doctest: +SKIP + >>> wb.save('new_document.xlsm') >>> # MS Excel can't open the document >>> >>> # or >>> >>> # Need specify attribute keep_vba=True - >>> wb = load_workbook('document.xlsm')# doctest: +SKIP - >>> wb.save('new_document.xlsm')# doctest: +SKIP - >>> # MS Excel can't open the document + >>> wb = load_workbook('document.xlsm') + >>> wb.save('new_document.xlsm') + >>> # MS Excel will not open the document >>> >>> # or >>> - >>> wb = load_workbook('document.xltm', keep_vba=True)# doctest: +SKIP - >>> # If us need template document, then we need specify extension as *.xltm. - >>> # If us need document, then we need specify attribute as_template=False. - >>> wb.save('new_document.xlsm', as_template=True)# doctest: +SKIP - >>> # MS Excel can't open the document + >>> wb = load_workbook('document.xltm', keep_vba=True) + >>> # If we need a template document, then we must specify extension as *.xltm. + >>> wb.save('new_document.xlsm') + >>> # MS Excel will not open the document Loading from a file diff -Nru openpyxl-2.3.0/doc/usage.rst openpyxl-2.4.9/doc/usage.rst --- openpyxl-2.3.0/doc/usage.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/usage.rst 2017-10-17 07:04:42.000000000 +0000 @@ -7,7 +7,7 @@ >>> from openpyxl import Workbook >>> from openpyxl.compat import range ->>> from openpyxl.cell import get_column_letter +>>> from openpyxl.utils import get_column_letter >>> >>> wb = Workbook() >>> @@ -26,46 +26,12 @@ >>> ws3 = wb.create_sheet(title="Data") >>> for row in range(10, 20): ... for col in range(27, 54): -... _ = ws3.cell(column=col, row=row, value="%s" % get_column_letter(col)) +... _ = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col))) >>> print(ws3['AA10'].value) AA >>> wb.save(filename = dest_filename) -Write a workbook from \*.xltx as \*.xlsx ----------------------------------------- -.. ::doctest - ->>> from openpyxl import load_workbook ->>> ->>> ->>> wb = load_workbook('sample_book.xltx') #doctest: +SKIP ->>> ws = wb.active #doctest: +SKIP ->>> ws['D2'] = 42 #doctest: +SKIP ->>> ->>> wb.save('sample_book.xlsx') #doctest: +SKIP ->>> ->>> # or you can overwrite the current document template ->>> # wb.save('sample_book.xltx') - - -Write a workbook from \*.xltm as \*.xlsm ----------------------------------------- -.. ::doctest - ->>> from openpyxl import load_workbook ->>> ->>> ->>> wb = load_workbook('sample_book.xltm', keep_vba=True) #doctest: +SKIP ->>> ws = wb.active #doctest: +SKIP ->>> ws['D2'] = 42 #doctest: +SKIP ->>> ->>> wb.save('sample_book.xlsm') #doctest: +SKIP ->>> ->>> # or you can overwrite the current document template ->>> # wb.save('sample_book.xltm') - - Read an existing workbook ------------------------- .. :: doctest @@ -104,17 +70,18 @@ >>> import datetime >>> from openpyxl import Workbook ->>> wb = Workbook(guess_types=True) +>>> wb = Workbook() >>> ws = wb.active >>> # set date using a Python datetime >>> ws['A1'] = datetime.datetime(2010, 7, 21) >>> >>> ws['A1'].number_format 'yyyy-mm-dd h:mm:ss' ->>> +>>> # You can enable type inference on a case-by-case basis +>>> wb.guess_types = True >>> # set percentage using a string followed by the percent sign >>> ws['B1'] = '3.14%' ->>> +>>> wb.guess_types = False >>> ws['B1'].value 0.031400000000000004 >>> @@ -144,10 +111,14 @@ >>> "HEX2DEC" in FORMULAE True -If you're trying to use a formula that isn't known this could be because you're using a formula that was not included in the initial specification. Such formulae must be prefixed with `xlfn.` to work. +If you're trying to use a formula that isn't known this could be because you're using a formula that was not included in the initial specification. Such formulae must be prefixed with `_xlfn.` to work. Merge / Unmerge cells --------------------- + +When you merge cells all cells but the top-left one are **removed** from the +worksheet. See :ref:`styling-merged-cells` for information on formatting merged cells. + .. :: doctest >>> from openpyxl.workbook import Workbook @@ -155,10 +126,10 @@ >>> wb = Workbook() >>> ws = wb.active >>> ->>> ws.merge_cells('A1:B1') ->>> ws.unmerge_cells('A1:B1') +>>> ws.merge_cells('A2:D2') +>>> ws.unmerge_cells('A2:D2') >>> ->>> # or +>>> # or equivalently >>> ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4) >>> ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4) @@ -187,7 +158,7 @@ .. :: doctest >>> import openpyxl ->>> wb = openpyxl.Workbook(True) +>>> wb = openpyxl.Workbook() >>> ws = wb.create_sheet() >>> ws.column_dimensions.group('A','D', hidden=True) >>> wb.save('group.xlsx') diff -Nru openpyxl-2.3.0/doc/validation.rst openpyxl-2.4.9/doc/validation.rst --- openpyxl-2.3.0/doc/validation.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/validation.rst 2017-10-17 07:04:42.000000000 +0000 @@ -91,6 +91,14 @@ operator="lessThanOrEqual"), formula1=15) +Cell range validation: +:: + + from openpyxl.utils import quote_sheetname + dv = DataValidation(type="list", + formula1="{0}!$B$1:$B$10".format(quote_sheetname(sheetname)) + ) + Custom rule: :: diff -Nru openpyxl-2.3.0/doc/windows-development.rst openpyxl-2.4.9/doc/windows-development.rst --- openpyxl-2.3.0/doc/windows-development.rst 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/doc/windows-development.rst 2017-10-17 07:04:42.000000000 +0000 @@ -26,9 +26,9 @@ You will need to manually install virtualenv. This is best done by first installing pip. open a command line and download the script "get_pip.py" to your preferred Python folder:: bitsadmin /transfer pip http://bootstrap.pypa.io/get-pip.py c:\python27\get-pip.py # change the path as necessary - + Install pip (it needs to be at least pip 6.0):: - + python get_pip.py Now you can install virtualenv:: @@ -36,7 +36,7 @@ Scripts\pip install virtualenv Scripts\virtualenv c:\Users\YOURUSER\openpyxl - + lxml ---- @@ -45,29 +45,34 @@ #. In the command line switch to your repository folder:: cd c:\Users\YOURUSER\openpyxl - + #. Activate the virtualenv:: Scripts\activate #. Install a development version of openpyxl:: - python setup.py develop + pip install -e . #. Download all the relevant `lxml Windows wheels `_ + Releases for legacy versions of Python: + + * `lxml 3.5.0 for Python 2.6 `_ + * `lxml 3.5.0 for Python 3.3 `_ + #. Move all these files to a folder called "downloads" in your openpyxl checkout #. Install the project requirements:: - pip install --download downloads -r requirements.txt + pip download -r requirements.txt -d downloads pip install --no-index --find-links downloads -r requirements.txt To run tests for the virtualenv:: py.test -xrf openpyxl # the flag will stop testing at the first error - + tox --- diff -Nru openpyxl-2.3.0/doc/worksheet_properties.rst openpyxl-2.4.9/doc/worksheet_properties.rst --- openpyxl-2.3.0/doc/worksheet_properties.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/worksheet_properties.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,57 @@ +Additional Worksheet Properties +=============================== + +These are advanced properties for particular behaviours, the most used ones +are the "fitTopage" page setup property and the tabColor that define the +background color of the worksheet tab. + +Available properties for worksheets +----------------------------------- + +* "enableFormatConditionsCalculation" +* "filterMode" +* "published" +* "syncHorizontal" +* "syncRef" +* "syncVertical" +* "transitionEvaluation" +* "transitionEntry" +* "tabColor" + +Available fields for page setup properties +------------------------------------------ + +"autoPageBreaks" +"fitToPage" + +Available fields for outlines +----------------------------- + +* "applyStyles" +* "summaryBelow" +* "summaryRight" +* "showOutlineSymbols" + +see http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.sheetproperties%28v=office.14%29.aspx_ for details. + +.. note:: + By default, outline properties are intitialized so you can directly modify each of their 4 attributes, while page setup properties don't. + If you want modify the latter, you should first initialize a :class:`openpyxl.worksheet.properties.PageSetupProperties` object with the required parameters. + Once done, they can be directly modified by the routine later if needed. + + +.. :: doctest + +>>> from openpyxl.workbook import Workbook +>>> from openpyxl.worksheet.properties import WorksheetProperties, PageSetupProperties +>>> +>>> wb = Workbook() +>>> ws = wb.active +>>> +>>> wsprops = ws.sheet_properties +>>> wsprops.tabColor = "1072BA" +>>> wsprops.filterMode = False +>>> wsprops.pageSetUpPr = PageSetupProperties(fitToPage=True, autoPageBreaks=False) +>>> wsprops.outlinePr.summaryBelow = False +>>> wsprops.outlinePr.applyStyles = True +>>> wsprops.pageSetUpPr.autoPageBreaks = True diff -Nru openpyxl-2.3.0/doc/worksheet_tables.rst openpyxl-2.4.9/doc/worksheet_tables.rst --- openpyxl-2.3.0/doc/worksheet_tables.rst 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/doc/worksheet_tables.rst 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,26 @@ +Worksheet Tables +================ + + +Worksheet tables are references to groups of cells. This makes +certain operations such as styling the cells in a table easier. + + +Creating a table +---------------- + +.. literalinclude:: table.py + + +By default tables are created with a header from the first row and filters for all the columns. + +Styles are managed using the the `TableStyleInfo` object. This allows you to +stripe rows or columns and apply the different colour schemes. + + +Important notes +--------------- + +Table names must be unique within a workbook and table headers and filter +ranges must always contain strings. If this is not the case then Excel may +consider the file invalid and remove the table. diff -Nru openpyxl-2.3.0/.hg_archival.txt openpyxl-2.4.9/.hg_archival.txt --- openpyxl-2.3.0/.hg_archival.txt 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/.hg_archival.txt 2017-10-17 07:04:42.000000000 +0000 @@ -1,4 +1,4 @@ repo: 9d8a29ccadafeae1d60e7ac0c6932e4915e3aad6 -node: 17ebc853f5304e9f63531758eff85613cf419e48 -branch: 2.3 -tag: 2.3.0 +node: 2b77055eecb3999de3e28fa623838c2db9a25b2d +branch: 2.4 +tag: 2.4.9 diff -Nru openpyxl-2.3.0/.hgignore openpyxl-2.4.9/.hgignore --- openpyxl-2.3.0/.hgignore 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/.hgignore 2017-10-17 07:04:42.000000000 +0000 @@ -1,26 +1,29 @@ -\.tox -\.ve -syntax: regexp -\.pyc$ -.coverage -org.eclipse -\.pytest -(build|dist|openpyxl.egg-info) -\.(dot|svg|pf) -\.noseids -\.*\.swp -\.*\.DS_Store -\.*\.~.* -syntax: glob -*~ -*.orig -.idea -*.pstats -*.sh -.git -travis.yml -cover -Include/ -Lib/ -Scripts/ -downloads/ +\.tox +\.ve +syntax: regexp +\.pyc$ +.coverage +org.eclipse +\.pytest +(build|dist|openpyxl.egg-info) +\.(dot|svg|pf) +\.noseids +\.*\.swp +\.*\.DS_Store +\.*\.~.* +syntax: glob +*~ +*.orig +.idea +*.pstats +*.sh +.git +travis.yml +cover +Include/ +Lib/ +Scripts/ +downloads/ +Compliance +Spec +doc/api \ No newline at end of file diff -Nru openpyxl-2.3.0/.hgtags openpyxl-2.4.9/.hgtags --- openpyxl-2.3.0/.hgtags 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/.hgtags 2017-10-17 07:04:42.000000000 +0000 @@ -66,3 +66,19 @@ 97bf07a09a6f3c431735d621a209264689b3fb8d 2.3.0-b2 0000000000000000000000000000000000000000 2.3.0-b2 a87c01850d8c262af4b701d74a249dbfe013c78b 2.3.0-b2 +17ebc853f5304e9f63531758eff85613cf419e48 2.3.0 +b6ae470715f14381e7629a3266fb88156b0f266b 2.3.1 +d3971b7f90e3ff24ed300f7faf3b67c6f05c3912 2.3.2 +93e017b03d2a11057d7935e193f3080b3036ee57 2.3.3 +e0820e3fa62ccde44733e058770477b0b3a897e7 2.3.4 +12ee1b8fa3a56cc3c317bb460e49595bdab0c2f6 2.4.0-a1 +335afecd9a610d07de0b8a2eb939170659715c3c 2.4.0-b1 +802efb7800d827c21b33be52f7c96409253d8a87 2.3.5 +571d0a60d8742ba911ac2d16329306b1dc5b6890 2.4.0 +d786a9744c7172c7460e88d7c642448bd4392a77 2.4.1 +f8bb58ea697d7f57e0f0dd0db13debf4e5be62b6 2.4.2 +ca503da36b72ecd8dcc85ce33b7451cec69e871b 2.4.4 +84f1f24f8fac1d86c455bafb62f4ced0a9ad0da2 2.4.5 +24e08ce56e3c968031b9a2c3492eedcd3cc072d7 2.4.6 +a8e07fa3006422850ff7d591c5fdf4ab25d54f43 2.4.7 +d26bb79d9448fa348f59243600fee5c27695ec06 2.4.8 diff -Nru openpyxl-2.3.0/MANIFEST.in openpyxl-2.4.9/MANIFEST.in --- openpyxl-2.3.0/MANIFEST.in 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/MANIFEST.in 2017-10-17 07:04:42.000000000 +0000 @@ -2,6 +2,7 @@ prune openpyxl/sample prune openpyxl/benchmarks prune openpyxl/develop +prune scratchpad recursive-exclude openpyxl test_*.py tests/*.py diff -Nru openpyxl-2.3.0/openpyxl/benchmarks/bufzip.py openpyxl-2.4.9/openpyxl/benchmarks/bufzip.py --- openpyxl-2.3.0/openpyxl/benchmarks/bufzip.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/benchmarks/bufzip.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,182 +0,0 @@ -# src http://stackoverflow.com/questions/297345/create-a-zip-file-from-a-generator-in-python - -import os -import threading -from zipfile import * -import zlib, binascii, struct - - -class ZipEntryWriter(threading.Thread): - def __init__(self, zf, zinfo, fileobj): - self.zf = zf - self.zinfo = zinfo - self.fileobj = fileobj - - zinfo.file_size = 0 - zinfo.flag_bits = 0x00 - zinfo.header_offset = zf.fp.tell() - - zf._writecheck(zinfo) - zf._didModify = True - - zinfo.CRC = 0 - zinfo.compress_size = compress_size = 0 - zf.fp.write(zinfo.FileHeader()) - - super(ZipEntryWriter, self).__init__() - - def run(self): - zinfo = self.zinfo - zf = self.zf - file_size = 0 - CRC = 0 - - if zinfo.compress_type == ZIP_DEFLATED: - cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, zlib.DEFLATED, -15) - else: - cmpr = None - while True: - buf = self.fileobj.read(1024 * 8) - if not buf: - self.fileobj.close() - break - - file_size = file_size + len(buf) - #CRC = binascii.crc32(buf, CRC) - CRC = binascii.crc32(buf, CRC) & 0xffffffff - if cmpr: - buf = cmpr.compress(buf) - compress_size = compress_size + len(buf) - - zf.fp.write(buf) - - if cmpr: - buf = cmpr.flush() - compress_size = compress_size + len(buf) - zf.fp.write(buf) - zinfo.compress_size = compress_size - else: - zinfo.compress_size = file_size - - zinfo.CRC = CRC - zinfo.file_size = file_size - - position = zf.fp.tell() - zf.fp.seek(zinfo.header_offset + 14, 0) - zf.fp.write(struct.pack("[0-9]*\.?[0-9]*\s?)\%$') +PERCENT_REGEX = re.compile(r'^(?P\-?[0-9]*\.?[0-9]*\s?)\%$') TIME_REGEX = re.compile(r""" ^(?: # HH:MM and HH:MM:SS (?P[0-1]{0,1}[0-9]{2}): @@ -135,10 +136,10 @@ @property def guess_types(self): - return getattr(self.parent.parent, '_guess_types', False) + return getattr(self.parent.parent, 'guess_types', False) def __repr__(self): - return unicode("") % (self.parent.title, self.coordinate) + return "".format(self.parent.title, self.coordinate) def check_string(self, value): """Check string coding, length, and line break character""" @@ -159,8 +160,8 @@ """Tries to convert Error" else N/A""" try: return unicode(value) - except: - return unicode('#N/A') + except UnicodeDecodeError: + return u'#N/A' def set_explicit_value(self, value=None, data_type=TYPE_STRING): """Coerce values according to their explicit type""" @@ -172,11 +173,6 @@ self.data_type = data_type - @deprecated("Method is private") - def bind_value(self, value): - self._bind_value(value) - - def _bind_value(self, value): """Given a value, infer the correct data type""" @@ -188,11 +184,7 @@ elif isinstance(value, NUMERIC_TYPES): pass - elif isinstance(value, NUMERIC_TYPES): - self.data_type = self.TYPE_NUMERIC - elif isinstance(value, TIME_TYPES): - self.data_type = self.TYPE_NUMERIC value = self._cast_datetime(value) elif isinstance(value, STRING_TYPES): @@ -206,16 +198,11 @@ value = self._infer_value(value) elif value is not None: - raise ValueError("Cannot convert {0} to Excel".format(value)) + raise ValueError("Cannot convert {0!r} to Excel".format(value)) self._value = value - @deprecated("Method is private") - def infer_value(self, value): - return self._infer_value(value) - - def _infer_value(self, value): """Given a string, infer type and formatting options.""" if not isinstance(value, unicode): @@ -292,8 +279,10 @@ @property def value(self): """Get or set the value held in the cell. - ':rtype: depends on the value (string, float, int or ' - ':class:`datetime.datetime`)'""" + + :rtype: depends on the value (string, float, int or + :class:`datetime.datetime`) + """ value = self._value if value is not None and self.is_date: value = from_excel(value, self.base_date) @@ -314,16 +303,24 @@ """Return the hyperlink target or an empty string""" return self._hyperlink + @hyperlink.setter def hyperlink(self, val): """Set value and display for hyperlinks in a cell. Automatically sets the `value` of the cell with link text, but you can modify it afterwards by setting the `value` - property, and the hyperlink will remain.""" - self._hyperlink = Hyperlink(ref=self.coordinate, target=val) - self.parent.hyperlinks.add(self) - if self._value is None: - self.value = val + property, and the hyperlink will remain. + Hyperlink is removed if set to ``None``.""" + if val is None: + self._hyperlink = None + else: + if not isinstance(val, Hyperlink): + val = Hyperlink(ref="", target=val) + val.ref = self.coordinate + self._hyperlink = val + if self._value is None: + self.value = val.target or val.location + @property def is_date(self): @@ -351,6 +348,7 @@ return self.parent.cell(column=offset_column, row=offset_row) @property + @deprecated("Use anchor objects for positioning") def anchor(self): """ returns the expected position of a cell in pixels from the top-left of the sheet. For example, A1 anchor should be (0,0). @@ -393,17 +391,21 @@ """ return self._comment + @comment.setter def comment(self, value): - - # Ensure the number of comments for the parent worksheet is up-to-date - if value is None and self._comment is not None: - self.parent._comment_count -= 1 - if value is not None and self._comment is None: - self.parent._comment_count += 1 + """ + Assign a comment to a cell + """ if value is not None: - value.parent = self + if value.parent: + value = copy(value) + value.bind(self) elif value is None and self._comment: - self._comment.parent = None + self._comment.unbind() self._comment = value + + +def WriteOnlyCell(ws=None, value=None): + return Cell(worksheet=ws, column='A', row=1, value=value) diff -Nru openpyxl-2.3.0/openpyxl/cell/__init__.py openpyxl-2.4.9/openpyxl/cell/__init__.py --- openpyxl-2.3.0/openpyxl/cell/__init__.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/__init__.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,4 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl -from .cell import * +from .cell import Cell, WriteOnlyCell +from .read_only import ReadOnlyCell diff -Nru openpyxl-2.3.0/openpyxl/cell/interface.py openpyxl-2.4.9/openpyxl/cell/interface.py --- openpyxl-2.3.0/openpyxl/cell/interface.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/interface.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.compat.abc import ABC from abc import abstractmethod, abstractproperty diff -Nru openpyxl-2.3.0/openpyxl/cell/read_only.py openpyxl-2.4.9/openpyxl/cell/read_only.py --- openpyxl-2.3.0/openpyxl/cell/read_only.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/read_only.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import re @@ -8,7 +8,7 @@ from openpyxl.cell import Cell from openpyxl.utils import get_column_letter from openpyxl.utils.datetime import from_excel -from openpyxl.styles import is_date_format, Style +from openpyxl.styles import is_date_format from openpyxl.styles.numbers import BUILTIN_FORMATS @@ -45,6 +45,10 @@ def __ne__(self, other): return not self.__eq__(other) + + def __repr__(self): + return "".format(self.parent.title, self.coordinate) + @property def shared_strings(self): return self.parent.shared_strings @@ -55,8 +59,6 @@ @property def coordinate(self): - if self.row is None or self.column is None: - raise AttributeError("Empty cells have no coordinates") column = get_column_letter(self.column) return "{1}{0}".format(self.row, column) @@ -132,11 +134,22 @@ value = _cast_number(value) self._value = value - @property - def style(self): - return Style(font=self.font, alignment=self.alignment, - fill=self.fill, number_format=self.number_format, border=self.border, - protection=self.protection) +class EmptyCell(object): + + __slots__ = () + + value = None + is_date = False + font = None + border = None + fill = None + number_format = None + alignment = None + data_type = 'n' + + + def __repr__(self): + return "" -EMPTY_CELL = ReadOnlyCell(None, None, None, None) +EMPTY_CELL = EmptyCell() diff -Nru openpyxl-2.3.0/openpyxl/cell/tests/test_cell.py openpyxl-2.4.9/openpyxl/cell/tests/test_cell.py --- openpyxl-2.3.0/openpyxl/cell/tests/test_cell.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/tests/test_cell.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl # Python stdlib imports @@ -27,7 +27,6 @@ class Wb(object): excel_base_date = CALENDAR_WINDOWS_1900 - _number_formats = IndexedList() _fonts = IndexedList() _fills = IndexedList() _borders = IndexedList() @@ -72,26 +71,28 @@ [ ('4.2', 4.2), ('-42.000', -42), - ( '0', 0), + ('0', 0), ('0.9999', 0.9999), ('99E-02', 0.99), ('4', 4), ('-1E3', -1000), ('2e+2', 200), ('3.1%', 0.031), + ('-3.1%', -0.031), ('03:40:16', time(3, 40, 16)), ('03:40', time(3, 40)), - ('30:33.865633336', time(0, 30, 33, 865633)) + ('30:33.865633336', time(0, 30, 33, 865633)), ] ) def test_infer_numeric(dummy_cell, guess_types, value, expected): cell = dummy_cell - cell.parent.parent._guess_types = guess_types + cell.parent.parent.guess_types = guess_types cell.value = value + assert cell.guess_types == guess_types if cell.guess_types: assert cell.value == expected else: - cell.value == value + assert cell.value == value def test_ctor(dummy_cell): @@ -196,7 +197,7 @@ cell.set_explicit_value(1, 'q') -def test_illegal_chacters(dummy_cell): +def test_illegal_characters(dummy_cell): from openpyxl.utils.exceptions import IllegalCharacterError from openpyxl.compat import range from itertools import chain @@ -244,7 +245,21 @@ def test_repr(dummy_cell): cell = dummy_cell - assert repr(cell), '' == 'Got bad repr: %s' % repr(cell) + assert repr(cell) == "" + + +def test_repr_object(dummy_cell): + + class Dummy: + + def __str__(self): + return "something" + + cell = dummy_cell + try: + cell._bind_value(Dummy()) + except ValueError as err: + assert "something" not in str(err) def test_comment_assignment(dummy_cell): @@ -254,28 +269,14 @@ assert dummy_cell.comment == comm -def test_comment_count(dummy_cell): - cell = dummy_cell - ws = cell.parent - assert ws._comment_count == 0 - cell.comment = Comment("text", "author") - assert ws._comment_count == 1 - cell.comment = Comment("text", "author") - assert ws._comment_count == 1 - cell.comment = None - assert ws._comment_count == 0 - cell.comment = None - assert ws._comment_count == 0 - - def test_only_one_cell_per_comment(dummy_cell): ws = dummy_cell.parent comm = Comment('text', 'author') dummy_cell.comment = comm c2 = ws.cell(column=1, row=2) - with pytest.raises(AttributeError): - c2.comment = comm + c2.comment = comm + assert c2.comment.parent is c2 def test_remove_comment(dummy_cell): @@ -314,7 +315,8 @@ def test_good_encoding(self): from openpyxl import Workbook - wb = Workbook(encoding='latin1') + wb = Workbook() + wb.encoding = 'latin1' ws = wb.active cell = ws['A1'] cell.value = self.test_string @@ -395,3 +397,11 @@ cell.style_id cell._style.quotePrefix = 1 assert cell.quotePrefix is True + + +def test_remove_hyperlink(dummy_cell): + """Remove a cell hyperlink""" + cell = dummy_cell + cell.hyperlink = "http://test.com" + cell.hyperlink = None + assert cell.hyperlink is None diff -Nru openpyxl-2.3.0/openpyxl/cell/tests/test_read_only.py openpyxl-2.4.9/openpyxl/cell/tests/test_read_only.py --- openpyxl-2.3.0/openpyxl/cell/tests/test_read_only.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/tests/test_read_only.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import datetime import pytest @@ -55,9 +55,6 @@ def test_coordinate(dummy_sheet): cell = ReadOnlyCell(dummy_sheet, 1, 1, 10, None) assert cell.coordinate == "A1" - cell = ReadOnlyCell(dummy_sheet, None, None, 1, None) - with pytest.raises(AttributeError): - cell.coordinate @pytest.mark.parametrize("value, expected", diff -Nru openpyxl-2.3.0/openpyxl/cell/tests/test_text.py openpyxl-2.4.9/openpyxl/cell/tests/test_text.py --- openpyxl-2.3.0/openpyxl/cell/tests/test_text.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/tests/test_text.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,184 @@ +from __future__ import absolute_import +# coding=utf8 +# Copyright (c) 2010-2017 openpyxl +import pytest + +from openpyxl.xml.functions import fromstring, tostring +from openpyxl.tests.helper import compare_xml + + +@pytest.fixture +def InlineFont(): + from ..text import InlineFont + return InlineFont + + +class TestInlineFont: + + def test_ctor(self, InlineFont): + font = InlineFont() + xml = tostring(font.to_tree()) + expected = """ + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + def test_from_xml(self, InlineFont): + src = """ + + """ + node = fromstring(src) + font = InlineFont.from_tree(node) + assert font == InlineFont() + + +@pytest.fixture +def RichText(): + from ..text import RichText + return RichText + + +class TestRichText: + + def test_ctor(self, RichText): + text = RichText() + xml = tostring(text.to_tree()) + expected = """ + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + def test_from_xml(self, RichText): + src = """ + + """ + node = fromstring(src) + text = RichText.from_tree(node) + assert text == RichText() + + +@pytest.fixture +def Text(): + from ..text import Text + return Text + + +class TestText: + + def test_ctor(self, Text): + text = Text() + text.plain = "comment" + xml = tostring(text.to_tree()) + expected = """ + + comment + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + @pytest.mark.parametrize("src, expected", + [ + ("""ID""", "ID"), + (""" + + + + 11 de September de 2014 + + + """, + "11 de September de 2014" + ), + ] + ) + def test_from_xml(self, Text, src, expected): + node = fromstring(src) + text = Text.from_tree(node) + assert text.content == expected + + + def test_empty_element(self, Text): + src = """ + + + Replaced Data + + + + + + + + + + + + + """ + node = fromstring(src) + text = Text.from_tree(node) + assert text.content == "Replaced Data" + + +@pytest.fixture +def PhoneticText(): + from ..text import PhoneticText + return PhoneticText + + +class TestPhoneticText: + + def test_ctor(self, PhoneticText): + text = PhoneticText(sb=9, eb=10, t=u'\u3088') + xml = tostring(text.to_tree()) + expected = b""" + + + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + def test_from_xml(self, PhoneticText): + src = b""" + + + + """ + node = fromstring(src) + text = PhoneticText.from_tree(node) + assert text == PhoneticText(sb=9, eb=10, t=u'\u3088') + + +@pytest.fixture +def PhoneticProperties(): + from ..text import PhoneticProperties + return PhoneticProperties + + +class TestPhoneticProperties: + + def test_ctor(self, PhoneticProperties): + props = PhoneticProperties(fontId=0, type="Hiragana") + xml = tostring(props.to_tree()) + expected = """ + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + def test_from_xml(self, PhoneticProperties): + src = """ + + """ + node = fromstring(src) + props = PhoneticProperties.from_tree(node) + assert props == PhoneticProperties(fontId=0, type="noConversion") diff -Nru openpyxl-2.3.0/openpyxl/cell/text.py openpyxl-2.4.9/openpyxl/cell/text.py --- openpyxl-2.3.0/openpyxl/cell/text.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/cell/text.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,186 @@ +from __future__ import absolute_import +# Copyright (c) 2010-2017 openpyxl + +""" +Richtext definition +""" +from openpyxl.compat import unicode + +from openpyxl.descriptors.serialisable import Serialisable +from openpyxl.descriptors import ( + Alias, + Typed, + Integer, + Set, + NoneSet, + Bool, + String, + Sequence, +) +from openpyxl.descriptors.nested import ( + NestedBool, + NestedInteger, + NestedString, + NestedText, +) +from openpyxl.styles.fonts import Font + + +class PhoneticProperties(Serialisable): + + tagname = "phoneticPr" + + fontId = Integer() + type = NoneSet(values=(['halfwidthKatakana', 'fullwidthKatakana', + 'Hiragana', 'noConversion'])) + alignment = NoneSet(values=(['noControl', 'left', 'center', 'distributed'])) + + def __init__(self, + fontId=None, + type=None, + alignment=None, + ): + self.fontId = fontId + self.type = type + self.alignment = alignment + + +class PhoneticText(Serialisable): + + tagname = "rPh" + + sb = Integer() + eb = Integer() + t = NestedText(expected_type=unicode) + text = Alias('t') + + def __init__(self, + sb=None, + eb=None, + t=None, + ): + self.sb = sb + self.eb = eb + self.t = t + + +class InlineFont(Font): + + """ + Font for inline text because, yes what you need are different objects with the same elements but different constraints. + """ + + tagname = "RPrElt" + + rFont = NestedString(allow_none=True) + charset = Font.charset + family = Font.family + b =Font.b + i = Font.i + strike = Font.strike + outline = Font.outline + shadow = Font.shadow + condense = Font.condense + extend = Font.extend + color = Font.color + sz = Font.sz + u = Font.u + vertAlign = Font.vertAlign + scheme = Font.scheme + + __elements__ = ('rFont', 'charset', 'family', 'b', 'i', 'strike', + 'outline', 'shadow', 'condense', 'extend', 'color', 'sz', 'u', + 'vertAlign', 'scheme') + + def __init__(self, + rFont=None, + charset=None, + family=None, + b=None, + i=None, + strike=None, + outline=None, + shadow=None, + condense=None, + extend=None, + color=None, + sz=None, + u=None, + vertAlign=None, + scheme=None, + ): + self.rFont = rFont + self.charset = charset + self.family = family + self.b = b + self.i = i + self.strike = strike + self.outline = outline + self.shadow = shadow + self.condense = condense + self.extend = extend + self.color = color + self.sz = sz + self.u = u + self.vertAlign = vertAlign + self.scheme = scheme + + +class RichText(Serialisable): + + tagname = "RElt" + + rPr = Typed(expected_type=InlineFont, allow_none=True) + font = Alias("rPr") + t = NestedText(expected_type=unicode, allow_none=True) + text = Alias("t") + + __elements__ = ('rPr', 't') + + def __init__(self, + rPr=None, + t=None, + ): + self.rPr = rPr + self.t = t + + +class Text(Serialisable): + + tagname = "text" + + t = NestedText(allow_none=True, expected_type=unicode) + plain = Alias("t") + r = Sequence(expected_type=RichText, allow_none=True) + formatted = Alias("r") + rPh = Sequence(expected_type=PhoneticText, allow_none=True) + phonetic = Alias("rPh") + phoneticPr = Typed(expected_type=PhoneticProperties, allow_none=True) + PhoneticProperties = Alias("phoneticPr") + + __elements__ = ('t', 'r', 'rPh', 'phoneticPr') + + def __init__(self, + t=None, + r=(), + rPh=(), + phoneticPr=None, + ): + self.t = t + self.r = r + self.rPh = rPh + self.phoneticPr = phoneticPr + + + @property + def content(self): + """ + Text stripped of all formatting + """ + snippets = [] + if self.plain is not None: + snippets.append(self.plain) + for block in self.formatted: + if block.t is not None: + snippets.append(block.t) + return u"".join(snippets) diff -Nru openpyxl-2.3.0/openpyxl/chart/_3d.py openpyxl-2.4.9/openpyxl/chart/_3d.py --- openpyxl-2.3.0/openpyxl/chart/_3d.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/_3d.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors import Typed, Alias from openpyxl.descriptors.serialisable import Serialisable diff -Nru openpyxl-2.3.0/openpyxl/chart/area_chart.py openpyxl-2.4.9/openpyxl/chart/area_chart.py --- openpyxl-2.3.0/openpyxl/chart/area_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/area_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/axis.py openpyxl-2.4.9/openpyxl/chart/axis.py --- openpyxl-2.3.0/openpyxl/chart/axis.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/axis.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/bar_chart.py openpyxl-2.4.9/openpyxl/chart/bar_chart.py --- openpyxl-2.3.0/openpyxl/chart/bar_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/bar_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( @@ -50,7 +50,7 @@ barDir="col", grouping="clustered", varyColors=None, - ser=[], + ser=(), dLbls=None, ): self.barDir = barDir diff -Nru openpyxl-2.3.0/openpyxl/chart/_chart.py openpyxl-2.4.9/openpyxl/chart/_chart.py --- openpyxl-2.3.0/openpyxl/chart/_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,12 +1,14 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.compat import basestring from openpyxl.descriptors import ( Typed, Integer, - Alias + Alias, + MinMax, + Bool, ) from openpyxl.descriptors.nested import Nested from openpyxl.descriptors.serialisable import Serialisable @@ -43,6 +45,7 @@ legend = Typed(expected_type=Legend, allow_none=True) layout = Typed(expected_type=Layout, allow_none=True) + roundedCorners = Bool(allow_none=True) _series_type = "" ser = () @@ -52,7 +55,9 @@ width = 15 # in cm, approx 5 rows height = 7.5 # in cm, approx 14 rows _id = 1 - style = Integer(allow_none=True) + _path = "/xl/charts/chart{0}.xml" + style = MinMax(allow_none=True, min=1, max=48) + mime_type = "application/vnd.openxmlformats-officedocument.drawingml.chart+xml" graphical_properties = Typed(expected_type=GraphicalProperties, allow_none=True) __elements__ = () @@ -61,6 +66,7 @@ self._charts = [self] self.title = None self.layout = None + self.roundedCorners = None self.legend = Legend() self.graphical_properties = None self.style = None @@ -92,22 +98,25 @@ def _write(self): from .chartspace import ChartSpace, ChartContainer - self.plot_area = PlotArea() self.plot_area.layout = self.layout - self.plot_area.graphical_properties = self.graphical_properties idx_base = 0 for chart in self._charts: - chart.idx_base = idx_base - self.plot_area._charts.append(chart) - idx_base += len(chart.series) - - for axis in ("x_axis", "y_axis", 'z_axis'): - axis = getattr(self, axis, None) - if axis is None: - continue - ax = getattr(self.plot_area, axis.tagname) - ax.append(axis) + if chart not in self.plot_area._charts: + chart.idx_base = idx_base + self.plot_area._charts.append(chart) + idx_base += len(chart.series) + + axIds = [] + for axId in ("x_axis", "y_axis", 'z_axis'): + for chart in self._charts: + axis = getattr(chart, axId, None) + if axis is None: + continue + if axis.axId not in axIds: + ax = getattr(self.plot_area, axis.tagname) + ax.append(axis) + axIds.append(axis.axId) container = ChartContainer(plotArea=self.plot_area, legend=self.legend, title=self.title) if isinstance(chart, _3DBase): @@ -117,6 +126,7 @@ container.backWall = chart.backWall cs = ChartSpace(chart=container) cs.style = self.style + cs.roundedCorners = self.roundedCorners tree = cs.to_tree() tree.set("xmlns", CHART_NS) return tree @@ -157,7 +167,7 @@ values = data.cols for v in values: - range_string = "{0}!{1}:{2}".format(data.sheetname, v[0], v[-1]) + range_string = u"{0}!{1}:{2}".format(data.sheetname, v[0], v[-1]) series = SeriesFactory(range_string, title_from_data=titles_from_data) self.ser.append(series) @@ -170,5 +180,5 @@ @property - def _path(self): - return PACKAGE_CHARTS + '/chart{0}.xml'.format(self._id) + def path(self): + return self._path.format(self._id) diff -Nru openpyxl-2.3.0/openpyxl/chart/chartspace.py openpyxl-2.4.9/openpyxl/chart/chartspace.py --- openpyxl-2.3.0/openpyxl/chart/chartspace.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/chartspace.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl """ Enclosing chart object. The various chart types are actually child objects. @@ -22,8 +22,9 @@ ) from openpyxl.descriptors.excel import ( Percentage, - ExtensionList - ) + ExtensionList, + Relation +) from openpyxl.descriptors.nested import ( NestedBool, @@ -55,10 +56,9 @@ from .axis import NumericAxis, TextAxis, SeriesAxis, DateAxis from .title import Title +from .print_settings import PrintSettings from openpyxl.xml.functions import Element -from openpyxl.worksheet.page import PageMargins, PrintPageSetup -from openpyxl.worksheet.header_footer import HeaderFooter class PivotFormat(Serialisable): @@ -364,31 +364,6 @@ self.id = id -class RelId(Serialisable): - - pass # todo - - -class PrintSettings(Serialisable): - - tagname = "printSettings" - - headerFooter = Typed(expected_type=HeaderFooter, allow_none=True) - pageMargins = Typed(expected_type=PageMargins, allow_none=True) - pageSetup = Typed(expected_type=PrintPageSetup, allow_none=True) - - __elements__ = ("headerFooter", "pageMargins", "pageMargins") - - def __init__(self, - headerFooter=None, - pageMargins=None, - pageSetup=None, - ): - self.headerFooter = headerFooter - self.pageMargins = pageMargins - self.pageSetup = pageSetup - - class ChartSpace(Serialisable): tagname = "chartSpace" @@ -396,7 +371,7 @@ date1904 = NestedBool(allow_none=True) lang = NestedString(allow_none=True) roundedCorners = NestedBool(allow_none=True) - style = NestedInteger(allow_none=True) + style = NestedMinMax(allow_none=True, min=1, max=48) clrMapOvr = Typed(expected_type=ColorMapping, allow_none=True) pivotSource = Typed(expected_type=PivotSource, allow_none=True) protection = Typed(expected_type=Protection, allow_none=True) @@ -407,7 +382,7 @@ textProperties = Alias("txPr") externalData = Typed(expected_type=ExternalData, allow_none=True) printSettings = Typed(expected_type=PrintSettings, allow_none=True) - userShapes = Typed(expected_type=RelId, allow_none=True) + userShapes = Relation() extLst = Typed(expected_type=ExtensionList, allow_none=True) __elements__ = ('date1904', 'lang', 'roundedCorners', 'style', diff -Nru openpyxl-2.3.0/openpyxl/chart/data_source.py openpyxl-2.4.9/openpyxl/chart/data_source.py --- openpyxl-2.3.0/openpyxl/chart/data_source.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/data_source.py 2017-10-17 07:04:42.000000000 +0000 @@ -92,7 +92,7 @@ tagname = "strVal" idx = Integer() - v = NestedString() + v = NestedText(expected_type=unicode) def __init__(self, idx=0, diff -Nru openpyxl-2.3.0/openpyxl/chart/descriptors.py openpyxl-2.4.9/openpyxl/chart/descriptors.py --- openpyxl-2.3.0/openpyxl/chart/descriptors.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/descriptors.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.compat import basestring diff -Nru openpyxl-2.3.0/openpyxl/chart/__init__.py openpyxl-2.4.9/openpyxl/chart/__init__.py --- openpyxl-2.3.0/openpyxl/chart/__init__.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/__init__.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from .area_chart import AreaChart, AreaChart3D from .bar_chart import BarChart, BarChart3D diff -Nru openpyxl-2.3.0/openpyxl/chart/label.py openpyxl-2.4.9/openpyxl/chart/label.py --- openpyxl-2.3.0/openpyxl/chart/label.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/label.py 2017-10-17 07:04:42.000000000 +0000 @@ -23,7 +23,7 @@ class _DataLabelBase(Serialisable): - numFmt = NestedString(allow_none=True) + numFmt = NestedString(allow_none=True, attribute="formatCode") spPr = Typed(expected_type=GraphicalProperties, allow_none=True) graphicalProperties = Alias('spPr') txPr = Typed(expected_type=RichText, allow_none=True) @@ -41,12 +41,11 @@ separator = NestedString(allow_none=True) extLst = Typed(expected_type=ExtensionList, allow_none=True) - __elements__ = ("delete", "numFmt", "spPr", "txPr", "dLblPos", - "showLegendKey", "showVal", "showCatName", "showSerName", "showPercent", - "showBubbleSize", "showLeaderLines", "separator") + __elements__ = ("numFmt", "spPr", "txPr", "dLblPos", "showLegendKey", + "showVal", "showCatName", "showSerName", "showPercent", "showBubbleSize", + "showLeaderLines", "separator") def __init__(self, - delete=None, numFmt=None, spPr=None, txPr=None, @@ -61,7 +60,6 @@ separator=None, extLst=None, ): - self.delete = delete self.numFmt = numFmt self.spPr = spPr self.txPr = txPr @@ -109,6 +107,7 @@ dLbl = Sequence(expected_type=DataLabel, allow_none=True) + delete = NestedBool(allow_none=True) numFmt = _DataLabelBase.numFmt spPr = _DataLabelBase.spPr txPr = _DataLabelBase.txPr @@ -123,8 +122,9 @@ separator = _DataLabelBase.separator extLst = _DataLabelBase.extLst - __elements__ = ("dLbl",) + _DataLabelBase.__elements__ + __elements__ = ("delete", "dLbl",) + _DataLabelBase.__elements__ - def __init__(self, dLbl=(), **kw ): + def __init__(self, dLbl=(), delete=None, **kw): self.dLbl = dLbl + self.delete = delete super(DataLabelList, self).__init__(**kw) diff -Nru openpyxl-2.3.0/openpyxl/chart/layout.py openpyxl-2.4.9/openpyxl/chart/layout.py --- openpyxl-2.3.0/openpyxl/chart/layout.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/layout.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/legend.py openpyxl-2.4.9/openpyxl/chart/legend.py --- openpyxl-2.3.0/openpyxl/chart/legend.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/legend.py 2017-10-17 07:04:42.000000000 +0000 @@ -3,6 +3,7 @@ Typed, Integer, Alias, + Sequence, ) from openpyxl.descriptors.excel import ExtensionList from openpyxl.descriptors.nested import ( @@ -44,7 +45,7 @@ legendPos = NestedSet(values=(['b', 'tr', 'l', 'r', 't'])) position = Alias('legendPos') - legendEntry = Typed(expected_type=LegendEntry, allow_none=True) + legendEntry = Sequence(expected_type=LegendEntry) layout = Typed(expected_type=Layout, allow_none=True) overlay = NestedBool(allow_none=True) spPr = Typed(expected_type=GraphicalProperties, allow_none=True) @@ -57,7 +58,7 @@ def __init__(self, legendPos="r", - legendEntry=None, + legendEntry=(), layout=None, overlay=None, spPr=None, diff -Nru openpyxl-2.3.0/openpyxl/chart/line_chart.py openpyxl-2.4.9/openpyxl/chart/line_chart.py --- openpyxl-2.3.0/openpyxl/chart/line_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/line_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -37,7 +37,7 @@ def __init__(self, grouping="standard", varyColors=None, - ser=[], + ser=(), dLbls=None, dropLines=None, ): diff -Nru openpyxl-2.3.0/openpyxl/chart/marker.py openpyxl-2.4.9/openpyxl/chart/marker.py --- openpyxl-2.3.0/openpyxl/chart/marker.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/marker.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.compat import safe_string from openpyxl.xml.functions import Element diff -Nru openpyxl-2.3.0/openpyxl/chart/picture.py openpyxl-2.4.9/openpyxl/chart/picture.py --- openpyxl-2.3.0/openpyxl/chart/picture.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/picture.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable diff -Nru openpyxl-2.3.0/openpyxl/chart/print_settings.py openpyxl-2.4.9/openpyxl/chart/print_settings.py --- openpyxl-2.3.0/openpyxl/chart/print_settings.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/print_settings.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,58 @@ +from __future__ import absolute_import +# Copyright (c) 2010-2017 openpyxl + +from openpyxl.descriptors.serialisable import Serialisable +from openpyxl.descriptors import ( + Float, + Typed, + Alias, +) + +from openpyxl.worksheet.page import PrintPageSetup +from openpyxl.worksheet.header_footer import HeaderFooter + + +class PageMargins(Serialisable): + """ + Identical to openpyxl.worksheet.page.Pagemargins but element names are different :-/ + """ + tagname = "pageMargins" + + l = Float() + left = Alias('l') + r = Float() + right = Alias('r') + t = Float() + top = Alias('t') + b = Float() + bottom = Alias('b') + header = Float() + footer = Float() + + def __init__(self, l=0.75, r=0.75, t=1, b=1, header=0.5, footer=0.5): + self.l = l + self.r = r + self.t = t + self.b = b + self.header = header + self.footer = footer + + +class PrintSettings(Serialisable): + + tagname = "printSettings" + + headerFooter = Typed(expected_type=HeaderFooter, allow_none=True) + pageMargins = Typed(expected_type=PageMargins, allow_none=True) + pageSetup = Typed(expected_type=PrintPageSetup, allow_none=True) + + __elements__ = ("headerFooter", "pageMargins", "pageMargins") + + def __init__(self, + headerFooter=None, + pageMargins=None, + pageSetup=None, + ): + self.headerFooter = headerFooter + self.pageMargins = pageMargins + self.pageSetup = pageSetup diff -Nru openpyxl-2.3.0/openpyxl/chart/reader.py openpyxl-2.4.9/openpyxl/chart/reader.py --- openpyxl-2.3.0/openpyxl/chart/reader.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/reader.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,41 @@ +from __future__ import absolute_import +# Copyright (c) 2010-2017 openpyxl + +""" +Read a chart +""" + +from .chartspace import ChartSpace, PlotArea +from openpyxl.xml.functions import fromstring + +_types = ('areaChart', 'area3DChart', 'lineChart', 'line3DChart', + 'stockChart', 'radarChart', 'scatterChart', 'pieChart', 'pie3DChart', + 'doughnutChart', 'barChart', 'bar3DChart', 'ofPieChart', 'surfaceChart', + 'surface3DChart', 'bubbleChart',) + +_axes = ('valAx', 'catAx', 'dateAx', 'serAx',) + + +def reader(src): + node = fromstring(src) + cs = ChartSpace.from_tree(node) + plot = cs.chart.plotArea + for t in _types: + chart = getattr(plot, t, None) + if chart is not None: + break # this ignores multiple charts + + chart.title = cs.chart.title + chart.layout = plot.layout + chart.legend = cs.chart.legend + + for x in _axes: + ax = getattr(plot, x) + if ax: + if x == 'valAx': + chart.y_axis = ax[0] + elif x == 'serAx': + chart.z_axis = ax[0] + else: + chart.x_axis = ax[0] + return chart diff -Nru openpyxl-2.3.0/openpyxl/chart/reference.py openpyxl-2.4.9/openpyxl/chart/reference.py --- openpyxl-2.3.0/openpyxl/chart/reference.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/reference.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,8 +1,9 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from itertools import chain +from openpyxl.compat import unicode from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( MinMax, @@ -62,18 +63,22 @@ def __repr__(self): - fmt = "{0}!${1}${2}:${3}${4}" + return unicode(self) + + + def __str__(self): + fmt = u"{0}!${1}${2}:${3}${4}" if (self.min_col == self.max_col and self.min_row == self.max_row): - fmt = "{0}!${1}${2}" + fmt = u"{0}!${1}${2}" return fmt.format(self.sheetname, get_column_letter(self.min_col), self.min_row, get_column_letter(self.max_col), self.max_row ) - def __str__(self): - return repr(self) + __unicode__ = __str__ + def __len__(self): diff -Nru openpyxl-2.3.0/openpyxl/chart/scatter_chart.py openpyxl-2.4.9/openpyxl/chart/scatter_chart.py --- openpyxl-2.3.0/openpyxl/chart/scatter_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/scatter_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/series_factory.py openpyxl-2.4.9/openpyxl/chart/series_factory.py --- openpyxl-2.3.0/openpyxl/chart/series_factory.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/series_factory.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,10 +1,10 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from .data_source import NumDataSource, NumRef, AxDataSource from .reference import Reference from .series import Series, XYSeries, SeriesLabel, StrRef -from ..utils import SHEETRANGE_RE, rows_from_range, quote_sheetname +from openpyxl.utils import rows_from_range, quote_sheetname def SeriesFactory(values, xvalues=None, zvalues=None, title=None, title_from_data=False): @@ -17,7 +17,7 @@ if title_from_data: cell = values.pop() - title = "{0}!{1}".format(values.sheetname, cell) + title = u"{0}!{1}".format(values.sheetname, cell) title = SeriesLabel(strRef=StrRef(title)) elif title is not None: title = SeriesLabel(v=title) diff -Nru openpyxl-2.3.0/openpyxl/chart/series.py openpyxl-2.4.9/openpyxl/chart/series.py --- openpyxl-2.3.0/openpyxl/chart/series.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/series.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.compat import unicode diff -Nru openpyxl-2.3.0/openpyxl/chart/shapes.py openpyxl-2.4.9/openpyxl/chart/shapes.py --- openpyxl-2.3.0/openpyxl/chart/shapes.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/shapes.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/stock_chart.py openpyxl-2.4.9/openpyxl/chart/stock_chart.py --- openpyxl-2.3.0/openpyxl/chart/stock_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/stock_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/surface_chart.py openpyxl-2.4.9/openpyxl/chart/surface_chart.py --- openpyxl-2.3.0/openpyxl/chart/surface_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/surface_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/conftest.py openpyxl-2.4.9/openpyxl/chart/tests/conftest.py --- openpyxl-2.3.0/openpyxl/chart/tests/conftest.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/conftest.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,12 @@ +# Fixtures (pre-configured objects) for tests +import pytest + + +@pytest.fixture +def datadir(): + """DATADIR as a LocalPath""" + import os + from py._path.local import LocalPath + here = os.path.split(__file__)[0] + DATADIR = os.path.join(here, "data") + return LocalPath(DATADIR) diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/data/BarChart.xml openpyxl-2.4.9/openpyxl/chart/tests/data/BarChart.xml --- openpyxl-2.3.0/openpyxl/chart/tests/data/BarChart.xml 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/data/BarChart.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - 'Numbers'!$A$1:$A$10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/data/chart1.xml openpyxl-2.4.9/openpyxl/chart/tests/data/chart1.xml --- openpyxl-2.3.0/openpyxl/chart/tests/data/chart1.xml 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/data/chart1.xml 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,1198 @@ + + + + + + + + + + + + + + + + + + + + + + + Website Performance + + + + + + + + + + + + + + + + + + + onLoad!$A$2 + + + + Bob + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$2:$L$2 + + General + + + 9436.0 + + + 14389.0 + + + 12502.0 + + + 13691.0 + + + 9337.0 + + + 12471.0 + + + 13671.0 + + + 14200.0 + + + 12755.0 + + + 20353.0 + + + 12489.0 + + + + + + + + + + + + onLoad!$A$3 + + + + Alice + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$3:$L$3 + + General + + + 4382.0 + + + 4628.0 + + + 5439.0 + + + 6077.0 + + + 6849.0 + + + 5164.0 + + + 5611.0 + + + 10239.0 + + + 5391.0 + + + 4200.0 + + + 6908.0 + + + + + + + + + + + + onLoad!$A$4 + + + + Eve + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$4:$L$4 + + General + + + 9404.0 + + + 9277.0 + + + 8842.0 + + + 9193.0 + + + 12849.0 + + + 9408.0 + + + 6985.0 + + + 8376.0 + + + 6589.0 + + + 5326.0 + + + 9380.0 + + + + + + + + + + + + onLoad!$A$5 + + + + Charles + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$5:$L$5 + + General + + + 8669.0 + + + 12775.0 + + + 18881.0 + + + 13008.0 + + + 11672.0 + + + 9092.0 + + + 9427.0 + + + 11328.0 + + + 8308.0 + + + 11606.0 + + + 8685.0 + + + + + + + + + + + + onLoad!$A$6 + + + + Sam + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$6:$L$6 + + General + + + 3126.0 + + + 3451.0 + + + 2007.0 + + + 6498.0 + + + 4327.0 + + + 3840.0 + + + 3420.0 + + + 4437.0 + + + 3700.0 + + + 4167.0 + + + 4065.0 + + + + + + + + + + + + onLoad!$A$7 + + + + June + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$7:$L$7 + + General + + + 12337.0 + + + 13909.0 + + + 12156.0 + + + 11869.0 + + + 11810.0 + + + 14288.0 + + + 12644.0 + + + 12912.0 + + + 12048.0 + + + 13620.0 + + + 14090.0 + + + + + + + + + + + + onLoad!$A$8 + + + + Roger + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$8:$L$8 + + General + + + 10492.0 + + + 7541.0 + + + 6503.0 + + + 57700.0 + + + 9235.0 + + + 10934.0 + + + 12223.0 + + + 9639.0 + + + 42414.0 + + + 11192.0 + + + + + + + + + + + + onLoad!$A$9 + + + + Helen + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$9:$L$9 + + General + + + 19456.0 + + + 16247.0 + + + 18118.0 + + + 17689.0 + + + 15583.0 + + + 16092.0 + + + 16477.0 + + + 18264.0 + + + 16444.0 + + + 16336.0 + + + 15730.0 + + + + + + + + + + + + onLoad!$A$10 + + + + Dave + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$10:$L$10 + + General + + + 8456.0 + + + 9263.0 + + + 9469.0 + + + 7756.0 + + + 8322.0 + + + 10372.0 + + + 8305.0 + + + 10749.0 + + + 10780.0 + + + 16264.0 + + + 11250.0 + + + + + + + + + + + + onLoad!$A$11 + + + + Charlotte + + + + + + + + + + + + + + + onLoad!$B$1:$M$1 + + d\-mmm\-yy + + + 42186.0 + + + 42200.0 + + + 42217.0 + + + 42231.0 + + + 42248.0 + + + 42262.0 + + + 42292.0 + + + 42309.0 + + + 42323.0 + + + 42339.0 + + + 42353.0 + + + + + + + onLoad!$B$11:$L$11 + + General + + + 10411.0 + + + 9473.0 + + + 9610.0 + + + 12045.0 + + + 7571.0 + + + 9756.0 + + + 9004.0 + + + 9871.0 + + + 15782.0 + + + 20767.0 + + + 8120.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Time in seconds + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/data/LineChart.xml openpyxl-2.4.9/openpyxl/chart/tests/data/LineChart.xml --- openpyxl-2.3.0/openpyxl/chart/tests/data/LineChart.xml 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/data/LineChart.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - 'Line'!$A$1:$A$5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/data/PieChart.xml openpyxl-2.4.9/openpyxl/chart/tests/data/PieChart.xml --- openpyxl-2.3.0/openpyxl/chart/tests/data/PieChart.xml 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/data/PieChart.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - 'Pie'!$A$1:$A$10 - - - - - 'Pie'!$A$1:$A$10 - - - - - - - - - - - - - - - - - diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/data/ScatterChart.xml openpyxl-2.4.9/openpyxl/chart/tests/data/ScatterChart.xml --- openpyxl-2.3.0/openpyxl/chart/tests/data/ScatterChart.xml 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/data/ScatterChart.xml 1970-01-01 00:00:00.000000000 +0000 @@ -1,76 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - 'Scatter'!$B$1:$B$11 - - - - - 'Scatter'!$A$1:$A$11 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_area_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_area_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_area_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_area_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_axis.py openpyxl-2.4.9/openpyxl/chart/tests/test_axis.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_axis.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_axis.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_bar_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_bar_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_bar_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_bar_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_bubble_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_bubble_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_bubble_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_bubble_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest @@ -83,7 +83,7 @@ def test_path(self, ChartBase): chart = ChartBase() - assert chart._path == "xl/charts/chart1.xml" + assert chart.path == "/xl/charts/chart1.xml" def test_plot_area(self, ChartBase): diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_chartspace.py openpyxl-2.4.9/openpyxl/chart/tests/test_chartspace.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_chartspace.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_chartspace.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest @@ -277,33 +277,6 @@ @pytest.fixture -def PrintSettings(): - from ..chartspace import PrintSettings - return PrintSettings - - -class TestPrintSettings: - - def test_ctor(self, PrintSettings): - chartspace = PrintSettings() - xml = tostring(chartspace.to_tree()) - expected = """ - - """ - diff = compare_xml(xml, expected) - assert diff is None, diff - - - def test_from_xml(self, PrintSettings): - src = """ - - """ - node = fromstring(src) - chartspace = PrintSettings.from_tree(node) - assert chartspace == PrintSettings() - - -@pytest.fixture def ExternalData(): from ..chartspace import ExternalData return ExternalData diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_data_source.py openpyxl-2.4.9/openpyxl/chart/tests/test_data_source.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_data_source.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_data_source.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest @@ -83,7 +83,7 @@ xml = tostring(val.to_tree()) expected = """ - + something """ diff = compare_xml(xml, expected) @@ -92,9 +92,9 @@ def test_from_xml(self, StrVal): src = """ - - - + + else + """ node = fromstring(src) val = StrVal.from_tree(node) diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_error_bar.py openpyxl-2.4.9/openpyxl/chart/tests/test_error_bar.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_error_bar.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_error_bar.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_label.py openpyxl-2.4.9/openpyxl/chart/tests/test_label.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_label.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_label.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest @@ -16,10 +16,12 @@ class TestDataLabeList: def test_ctor(self, DataLabelList): - labels = DataLabelList() + labels = DataLabelList(numFmt="0.0%") xml = tostring(labels.to_tree()) expected = """ - + + + """ diff = compare_xml(xml, expected) assert diff is None, diff diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_layout.py openpyxl-2.4.9/openpyxl/chart/tests/test_layout.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_layout.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_layout.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_legend.py openpyxl-2.4.9/openpyxl/chart/tests/test_legend.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_legend.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_legend.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,6 +1,6 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest from openpyxl.xml.functions import fromstring, tostring diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_line_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_line_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_line_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_line_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_marker.py openpyxl-2.4.9/openpyxl/chart/tests/test_marker.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_marker.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_marker.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_picture.py openpyxl-2.4.9/openpyxl/chart/tests/test_picture.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_picture.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_picture.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_pie_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_pie_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_pie_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_pie_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,6 +1,6 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest from openpyxl.xml.functions import fromstring, tostring diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_print.py openpyxl-2.4.9/openpyxl/chart/tests/test_print.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_print.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_print.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,61 @@ +from __future__ import absolute_import +# Copyright (c) 2010-2017 openpyxl + +import pytest + +from openpyxl.xml.functions import fromstring, tostring +from openpyxl.tests.helper import compare_xml + + +@pytest.fixture +def PrintSettings(): + from ..print_settings import PrintSettings + return PrintSettings + + +class TestPrintSettings: + + def test_ctor(self, PrintSettings): + chartspace = PrintSettings() + xml = tostring(chartspace.to_tree()) + expected = """ + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + def test_from_xml(self, PrintSettings): + src = """ + + """ + node = fromstring(src) + chartspace = PrintSettings.from_tree(node) + assert chartspace == PrintSettings() + + +@pytest.fixture +def PageMargins(): + from ..print_settings import PageMargins + return PageMargins + + +class TestPageMargins: + + def test_ctor(self, PageMargins): + pm = PageMargins() + xml = tostring(pm.to_tree()) + expected = """ + + """ + diff = compare_xml(xml, expected) + assert diff is None, diff + + + def test_from_xml(self, PageMargins): + src = """ + + """ + node = fromstring(src) + pm = PageMargins.from_tree(node) + assert pm == PageMargins() diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_radar_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_radar_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_radar_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_radar_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_reader.py openpyxl-2.4.9/openpyxl/chart/tests/test_reader.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_reader.py 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_reader.py 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,25 @@ +from __future__ import absolute_import +# Copyright (c) 2010-2017 openpyxl + +from .. line_chart import LineChart +from .. axis import NumericAxis, DateAxis + + +def test_read(datadir): + datadir.chdir() + from .. reader import reader + + with open("chart1.xml") as src: + xml = src.read() + + chart = reader(xml) + assert isinstance(chart, LineChart) + assert chart.title.tx.rich.p[0].r.t == "Website Performance" + + assert isinstance(chart.y_axis, NumericAxis) + assert chart.y_axis.title.tx.rich.p[0].r.t == "Time in seconds" + + assert isinstance(chart.x_axis, DateAxis) + assert chart.x_axis.title is None + + assert len(chart.series) == 10 diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_reference.py openpyxl-2.4.9/openpyxl/chart/tests/test_reference.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_reference.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_reference.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,8 +1,9 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest +from openpyxl.compat import unicode from openpyxl.xml.functions import fromstring, tostring from openpyxl.tests.helper import compare_xml @@ -95,3 +96,8 @@ def test_length(self, Reference, range_string, length): ref = Reference(range_string=range_string) assert len(ref) == length + + + def test_repr(self, Reference): + ref = Reference(range_string=b'D\xc3\xbcsseldorf!A1:A10'.decode("utf8")) + assert unicode(ref) == b'D\xc3\xbcsseldorf!$A$1:$A$10'.decode("utf8") diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_scatter_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_scatter_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_scatter_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_scatter_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_series_factory.py openpyxl-2.4.9/openpyxl/chart/tests/test_series_factory.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_series_factory.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_series_factory.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_series.py openpyxl-2.4.9/openpyxl/chart/tests/test_series.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_series.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_series.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_shapes.py openpyxl-2.4.9/openpyxl/chart/tests/test_shapes.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_shapes.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_shapes.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_stock_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_stock_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_stock_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_stock_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_surface_chart.py openpyxl-2.4.9/openpyxl/chart/tests/test_surface_chart.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_surface_chart.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_surface_chart.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,6 +1,6 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest from openpyxl.xml.functions import fromstring, tostring diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_text.py openpyxl-2.4.9/openpyxl/chart/tests/test_text.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_text.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_text.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_title.py openpyxl-2.4.9/openpyxl/chart/tests/test_title.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_title.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_title.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_trendline.py openpyxl-2.4.9/openpyxl/chart/tests/test_trendline.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_trendline.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_trendline.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest diff -Nru openpyxl-2.3.0/openpyxl/chart/tests/test_updown_bars.py openpyxl-2.4.9/openpyxl/chart/tests/test_updown_bars.py --- openpyxl-2.3.0/openpyxl/chart/tests/test_updown_bars.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/tests/test_updown_bars.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,6 +1,6 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest from openpyxl.xml.functions import fromstring, tostring diff -Nru openpyxl-2.3.0/openpyxl/chart/text.py openpyxl-2.4.9/openpyxl/chart/text.py --- openpyxl-2.3.0/openpyxl/chart/text.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/text.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import ( Typed, diff -Nru openpyxl-2.3.0/openpyxl/chart/title.py openpyxl-2.4.9/openpyxl/chart/title.py --- openpyxl-2.3.0/openpyxl/chart/title.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/title.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.compat import basestring diff -Nru openpyxl-2.3.0/openpyxl/chart/updown_bars.py openpyxl-2.4.9/openpyxl/chart/updown_bars.py --- openpyxl-2.3.0/openpyxl/chart/updown_bars.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chart/updown_bars.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors.serialisable import Serialisable from openpyxl.descriptors import Typed diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/chartsheet.py openpyxl-2.4.9/openpyxl/chartsheet/chartsheet.py --- openpyxl-2.3.0/openpyxl/chartsheet/chartsheet.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/chartsheet.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,12 +1,15 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from weakref import ref from openpyxl.descriptors import Typed, Set from openpyxl.descriptors.excel import ExtensionList from openpyxl.descriptors.serialisable import Serialisable -from openpyxl.drawing.spreadsheet_drawing import AbsoluteAnchor +from openpyxl.drawing.spreadsheet_drawing import ( + AbsoluteAnchor, + SpreadsheetDrawing, +) from openpyxl.worksheet.page import ( PageMargins, PrintPageSetup @@ -15,7 +18,7 @@ from openpyxl.worksheet.drawing import Drawing from openpyxl.worksheet.header_footer import HeaderFooter from openpyxl.workbook.child import _WorkbookChild -from openpyxl.xml.constants import SHEET_MAIN_NS +from openpyxl.xml.constants import SHEET_MAIN_NS, REL_NS from .relation import DrawingHF, SheetBackgroundPicture from .properties import ChartsheetProperties @@ -29,6 +32,9 @@ tagname = "chartsheet" _default_title = "Chart" + _rel_type = "chartsheet" + _path = "/xl/chartsheets/sheet{0}.xml" + mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml" sheetPr = Typed(expected_type=ChartsheetProperties, allow_none=True) sheetViews = Typed(expected_type=ChartsheetViewList) @@ -36,7 +42,6 @@ customSheetViews = Typed(expected_type=CustomChartsheetViews, allow_none=True) pageMargins = Typed(expected_type=PageMargins, allow_none=True) pageSetup = Typed(expected_type=PrintPageSetup, allow_none=True) - headerFooter = Typed(expected_type=HeaderFooter, allow_none=True) drawing = Typed(expected_type=Drawing, allow_none=True) drawingHF = Typed(expected_type=DrawingHF, allow_none=True) picture = Typed(expected_type=SheetBackgroundPicture, allow_none=True) @@ -91,10 +96,11 @@ def add_chart(self, chart): chart.anchor = AbsoluteAnchor() self._charts.append(chart) - self.parent._charts.append(ref(chart)) def to_tree(self): + self._drawing = SpreadsheetDrawing() + self._drawing.charts = self._charts tree = super(Chartsheet, self).to_tree() tree.set("xmlns", SHEET_MAIN_NS) return tree diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/custom.py openpyxl-2.4.9/openpyxl/chartsheet/custom.py --- openpyxl-2.3.0/openpyxl/chartsheet/custom.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/custom.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.worksheet.header_footer import HeaderFooter diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/__init__.py openpyxl-2.4.9/openpyxl/chartsheet/__init__.py --- openpyxl-2.3.0/openpyxl/chartsheet/__init__.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/__init__.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,4 +1,4 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl -from .chartsheet import * \ No newline at end of file +from .chartsheet import Chartsheet diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/properties.py openpyxl-2.4.9/openpyxl/chartsheet/properties.py --- openpyxl-2.3.0/openpyxl/chartsheet/properties.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/properties.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors import ( Bool, diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/protection.py openpyxl-2.4.9/openpyxl/chartsheet/protection.py --- openpyxl-2.3.0/openpyxl/chartsheet/protection.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/protection.py 2017-10-17 07:04:42.000000000 +0000 @@ -40,6 +40,3 @@ self.algorithmName = algorithmName if password is not None: self.password = password - - def hash_password(self, password): - self.hashValue = hashlib.sha256((self.saltValue + password).encode("utf-8")).hexdigest() diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/publish.py openpyxl-2.4.9/openpyxl/chartsheet/publish.py --- openpyxl-2.3.0/openpyxl/chartsheet/publish.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/publish.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors import ( Bool, diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/relation.py openpyxl-2.4.9/openpyxl/chartsheet/relation.py --- openpyxl-2.3.0/openpyxl/chartsheet/relation.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/relation.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl from openpyxl.descriptors import ( Integer, @@ -54,7 +54,7 @@ rfe = Integer(allow_none=True) rightFooterEvenPages = Alias('rfe') rff = Integer(allow_none=True) - rightFooterFirstPage = Alias('eff') + rightFooterFirstPage = Alias('rff') def __init__(self, id=None, diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/tests/test_chartsheet.py openpyxl-2.4.9/openpyxl/chartsheet/tests/test_chartsheet.py --- openpyxl-2.3.0/openpyxl/chartsheet/tests/test_chartsheet.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/tests/test_chartsheet.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,14 +1,13 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl -import pytest -from openpyxl.chartsheet import Drawing +from openpyxl.worksheet.drawing import Drawing +from openpyxl.worksheet.page import PageMargins from ..views import ChartsheetView, ChartsheetViewList -from openpyxl.worksheet import PageMargins from openpyxl.xml.functions import fromstring, tostring from openpyxl.tests.helper import compare_xml - +import pytest class DummyWorkbook: diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/tests/test_custom.py openpyxl-2.4.9/openpyxl/chartsheet/tests/test_custom.py --- openpyxl-2.3.0/openpyxl/chartsheet/tests/test_custom.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/tests/test_custom.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,9 +1,9 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest -from openpyxl.worksheet import PageMargins +from openpyxl.worksheet.page import PageMargins from openpyxl.xml.functions import fromstring, tostring from openpyxl.tests.helper import compare_xml diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/tests/test_properties.py openpyxl-2.4.9/openpyxl/chartsheet/tests/test_properties.py --- openpyxl-2.3.0/openpyxl/chartsheet/tests/test_properties.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/tests/test_properties.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest from openpyxl.xml.functions import fromstring, tostring diff -Nru openpyxl-2.3.0/openpyxl/chartsheet/tests/test_protection.py openpyxl-2.4.9/openpyxl/chartsheet/tests/test_protection.py --- openpyxl-2.3.0/openpyxl/chartsheet/tests/test_protection.py 2015-10-20 20:01:40.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/chartsheet/tests/test_protection.py 2017-10-17 07:04:42.000000000 +0000 @@ -1,5 +1,5 @@ from __future__ import absolute_import -# Copyright (c) 2010-2015 openpyxl +# Copyright (c) 2010-2017 openpyxl import pytest @@ -30,6 +30,7 @@ assert chartsheetProtection.algorithmName == "SHA-512" assert chartsheetProtection.saltValue == "Bo89+SCcqbFEcOS/6LcjBw==" + def test_write(self, ChartsheetProtection): chartsheetProtection = ChartsheetProtection() chartsheetProtection.saltValue = "Bo89+SCcqbFEcOS/6LcjBw==" @@ -37,11 +38,9 @@ chartsheetProtection.objects = "1" chartsheetProtection.algorithmName = "SHA-512" chartsheetProtection.spinCount = "100000" - chartsheetProtection.hash_password('Openpyxl_password') expected = """ + + + Cuke + Not Cuke + + + + + + + + + + + + + Cuke: + + + + + + + + + + First Comment + + + + + + + + + + + + + + Cuke: + + + + + + + + + + Second Comment + + + + + + + + + + + + + + Not Cuke: + + + + + + + + + + Third Comment + + + + + diff -Nru openpyxl-2.3.0/openpyxl/comments/tests/data/comments_out.xml openpyxl-2.4.9/openpyxl/comments/tests/data/comments_out.xml --- openpyxl-2.3.0/openpyxl/comments/tests/data/comments_out.xml 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/comments/tests/data/comments_out.xml 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,25 @@ + + + + author + author2 + author3 + + + + + text + + + + + text2 + + + + + text3 + + + + diff -Nru openpyxl-2.3.0/openpyxl/comments/tests/data/control+comments.vml openpyxl-2.4.9/openpyxl/comments/tests/data/control+comments.vml --- openpyxl-2.3.0/openpyxl/comments/tests/data/control+comments.vml 1970-01-01 00:00:00.000000000 +0000 +++ openpyxl-2.4.9/openpyxl/comments/tests/data/control+comments.vml 2017-10-17 07:04:42.000000000 +0000 @@ -0,0 +1,86 @@ + + + + + + + + + + + + + +
+ Sheet2 button +
+
+ + + 4, 22, 4, 2, 6, 29, 5, 14 + False + False + [0]!Button1_Click + Center + Center + +
+ + + + +
+ Sheet2 + option +
+
+ + + + 6, 45, 11, 5, 8, 57, 13, 15 + False + False + Center + 1 + + + +
+ + + + + + + +