From c219972ccdf70c7ba0d4762e222b5404f3794b2e Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 18 Feb 2011 04:28:50 -0500 Subject: [PATCH 01/48] added pypy location to tox config --- tox.ini | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index 9cef9b3..ba10930 100644 --- a/tox.ini +++ b/tox.ini @@ -4,6 +4,8 @@ envlist = py24,py25,py26,py27 [testenv] commands=py.test --junitxml=junit-{envname}.xml deps = - nose simplejson - pytest \ No newline at end of file + pytest + +[testenv:pypy] +basepython=/usr/bin/pypy-c From bccf0d1ba1adac259e0ffe5687455f6aadade7fd Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Fri, 18 Feb 2011 04:37:00 -0500 Subject: [PATCH 02/48] no more test suite. --- test_suite.sh | 5 ----- 1 file changed, 5 deletions(-) delete mode 100755 test_suite.sh diff --git a/test_suite.sh b/test_suite.sh deleted file mode 100755 index 5a1e7be..0000000 --- a/test_suite.sh +++ /dev/null @@ -1,5 +0,0 @@ -rm -fr nosetests.xml -tox -# coverage xml -rm -fr pylint.txt -# pylint -d W0312 -d W0212 -d E1101 -d E0202 -d W0102 -d E0102 -f parseable ./tablib > pylint.txt || true \ No newline at end of file From c2331f7a23ff0531d96baeb79e8769e5531c986c Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:11:59 -0500 Subject: [PATCH 03/48] Updated pythons list. --- docs/intro.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/intro.rst b/docs/intro.rst index c2d75b2..9a00a8e 100644 --- a/docs/intro.rst +++ b/docs/intro.rst @@ -44,8 +44,10 @@ Pythons Supported At this time, the following Python platforms are officially supported: -* Python 2.6 -* Python 2.7 +* cPython 2.5 +* cPython 2.6 +* cPython 2.7 +* PyPy-c 1.4 Support for other Pythons will be rolled out soon. From 1cf9bd14b451fd56c06416fde71ee5f8bc0beef2 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:12:41 -0500 Subject: [PATCH 04/48] ci.kennethreitz.com now --- docs/development.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/development.rst b/docs/development.rst index 77af330..6255d5e 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -87,7 +87,7 @@ Adding New Formats Tablib welcomes new format additions! Format suggestions include: -* Tab Seperated Values +* Tab Separated Values * MySQL Dump * HTML Table @@ -178,7 +178,7 @@ Every commit made to the **develop** branch is automatically tested and inspecte Anyone may view the build status and history at any time. - http://git.kennethreitz.com/ci/ + http://ci.kennethreitz.com/ If you are trustworthy and plan to contribute to tablib on a regular basis, please contact `Kenneth Reitz`_ to get an account on the Hudson Server. From 23c183114433f69415431c498d799b78b7f688f0 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:15:00 -0500 Subject: [PATCH 05/48] Added HACKING file. --- HACKING | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 HACKING diff --git a/HACKING b/HACKING new file mode 100644 index 0000000..018f9b7 --- /dev/null +++ b/HACKING @@ -0,0 +1,14 @@ +Where possible, please follow PEP8 with regard to coding style. Sometimes the line +length restriction is too hard to follow, so don't bend over backwards there. + +Triple-quotes should always be """, single quotes are ' unless using " +would result in less escaping within the string. + +All modules, functions, and methods should be well documented reStructuredText for +Sphinx AutoDoc. + +All functionality should be available in pure Python. Optional C (via Cython) +implementations may be written for performance reasons, but should never +replace the Python implementation. + +Lastly, don't take yourself too seriously :) \ No newline at end of file From 9ab277a4682546b64363ba308ef551fde3c4051d Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:32:20 -0500 Subject: [PATCH 06/48] docs: Python 2.5 is supported now. --- docs/install.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/install.rst b/docs/install.rst index 9b9a519..b6c3f31 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -55,7 +55,7 @@ However, if performance is important to you (and it should be), you can install $ pip install PyYAML -If you're using Python 2.5 (currently unsupported), you should also install the **simplejson** module. If you're using Python 2.6+, the built-in **json** module is already optimized and in use. :: +If you're using Python 2.5, you should also install the **simplejson** module (pip will do this for you). If you're using Python 2.6+, the built-in **json** module is already optimized and in use. :: $ pip install simplejson From d11c09febefbe6150f4e5b168d46970b232ee452 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:37:29 -0500 Subject: [PATCH 07/48] Added License text. --- docs/intro.rst | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/intro.rst b/docs/intro.rst index 9a00a8e..bc4256a 100644 --- a/docs/intro.rst +++ b/docs/intro.rst @@ -36,6 +36,31 @@ Tablib is released under terms of `The MIT License`_. .. _`The MIT License`: http://www.opensource.org/licenses/mit-license.php +.. _license: + +Tablib License +-------------- + +Copyright (c) 2011 Kenneth Reitz. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + .. _pythonsupport: From 76f09cd3b35f8cda1a8f081d81fd0f83d19fd2e0 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:37:53 -0500 Subject: [PATCH 08/48] Added release number to documentation. --- docs/index.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/index.rst b/docs/index.rst index 4726d7b..77ce7cf 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -3,8 +3,10 @@ You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. -Tablib: Pythonic Tabular Data -============================= +Tablib: Pythonic Tabular Datasets +================================= + +Release |version|. .. Contents: .. From 22cddbcd6354dc87af9b2797849329a20500966b Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 02:55:24 -0500 Subject: [PATCH 09/48] well then --- hi | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 hi diff --git a/hi b/hi new file mode 100644 index 0000000..e69de29 From e1734f2315bdb87f894911b1e031de39e7297bb6 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Mon, 21 Feb 2011 14:07:42 -0500 Subject: [PATCH 10/48] added __docformat__ --- hi | 0 tablib/core.py | 1 + 2 files changed, 1 insertion(+) delete mode 100644 hi diff --git a/hi b/hi deleted file mode 100644 index e69de29..0000000 diff --git a/tablib/core.py b/tablib/core.py index dfbcb6a..548de55 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -26,6 +26,7 @@ __build__ = 0x000904 __author__ = 'Kenneth Reitz' __license__ = 'MIT' __copyright__ = 'Copyright 2011 Kenneth Reitz' +__docformat__ = 'restructuredtext' class Row(object): From 2f331cee8ece577b54644efb7e2219ed61d75380 Mon Sep 17 00:00:00 2001 From: Igor Davydenko Date: Tue, 1 Mar 2011 19:36:19 +0200 Subject: [PATCH 11/48] Fix #24, add support of spaces in CSV files. --- tablib/formats/_csv.py | 2 +- test_tablib.py | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/tablib/formats/_csv.py b/tablib/formats/_csv.py index 2c74a1c..b71755b 100644 --- a/tablib/formats/_csv.py +++ b/tablib/formats/_csv.py @@ -31,7 +31,7 @@ def import_set(dset, in_stream, headers=True): dset.wipe() - rows = csv.reader(in_stream.split()) + rows = csv.reader(in_stream.splitlines()) for i, row in enumerate(rows): if (i == 0) and (headers): diff --git a/test_tablib.py b/test_tablib.py index e4a4d11..4079809 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -295,6 +295,19 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(_csv, data.csv) + def test_csv_import_set_with_spaces(self): + """Generate and import CSV set serialization when row values have + spaces.""" + data.append(('Bill Gates', 'Microsoft')) + data.append(('Steve Jobs', 'Apple')) + data.headers = ('Name', 'Company') + + _csv = data.csv + + data.csv = _csv + + self.assertEqual(_csv, data.csv) + def test_tsv_import_set(self): """Generate and import TSV set serialization.""" data.append(self.john) From c8493ff047ddfbfa9d0231cd395d3645faedce80 Mon Sep 17 00:00:00 2001 From: Matthew Hooker Date: Tue, 22 Mar 2011 17:12:02 -0400 Subject: [PATCH 12/48] fixes issue #38: python 2.5 support --- tablib/helpers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tablib/helpers.py b/tablib/helpers.py index 718d159..f8a5351 100644 --- a/tablib/helpers.py +++ b/tablib/helpers.py @@ -2,6 +2,7 @@ """ Tablib - General Helpers. """ +from __future__ import with_statement import sys From e8ba7654263c1f3cddfe63dea3d282a739c9778f Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:03:33 -0400 Subject: [PATCH 13/48] tablib.helpers is not longer needed :cake: --- tablib/helpers.py | 38 -------------------------------------- 1 file changed, 38 deletions(-) delete mode 100644 tablib/helpers.py diff --git a/tablib/helpers.py b/tablib/helpers.py deleted file mode 100644 index f8a5351..0000000 --- a/tablib/helpers.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- - -""" Tablib - General Helpers. -""" -from __future__ import with_statement - -import sys - - -class Struct(object): - """Your attributes are belong to us.""" - - def __init__(self, **entries): - self.__dict__.update(entries) - - def __getitem__(self, key): - return getattr(self, key, None) - - def dictionary(self): - """Returns dictionary representation of object.""" - return self.__dict__ - - def items(self): - """Returns items within object.""" - return self.__dict__.items() - - def keys(self): - """Returns keys within object.""" - return self.__dict__.keys() - - - -def piped(): - """Returns piped input via stdin, else False.""" - with sys.stdin as stdin: - # TTY is only way to detect if stdin contains data - return stdin.read() if not stdin.isatty() else None - From 8b5b29fc90ca4e222b2f2e9c0ceb6038b53fb0d6 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:20:39 -0400 Subject: [PATCH 14/48] added Dataset.add_formatter --- tablib/core.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tablib/core.py b/tablib/core.py index 548de55..0915ee3 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -137,6 +137,9 @@ class Dataset(object): # ('title', index) tuples self._separators = [] + + # (column, callback) tuples + self._formatters = [] try: self.headers = kwargs['headers'] @@ -386,6 +389,7 @@ class Dataset(object): """ pass + @property def tsv(): """A TSV representation of the :class:`Dataset` object. The top row will contain @@ -470,6 +474,26 @@ class Dataset(object): self.insert_separator(index, text) + def add_formatter(col, handler): + """Adds a :ref:`formatter` to the :class:`Dataset`. + + .. versionadded:: 0.9.5 + :param col: column to. Accepts index int or header str. + :param handler: reference to callback function to execute + against each cell value. + """ + + if isinstance(col, basestring): + if col in self.headers: + col = self.headers.index(key) # get 'key' index from each data + else: + raise KeyError + + self._formatters.append((col, handler)) + + return True + + def insert(self, index, row=None, col=None, header=None, tags=list()): """Inserts a row or column to the :class:`Dataset` at the given index. @@ -659,12 +683,14 @@ class Dataset(object): return _dset + def wipe(self): """Removes all content and headers from the :class:`Dataset` object.""" self._data = list() self.__headers = None + class Databook(object): """A book of :class:`Dataset` objects. """ From 3803a7a21b68633b0e54c6c01824647973ffa95d Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:32:56 -0400 Subject: [PATCH 15/48] formatter execution in place upon export --- tablib/core.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/tablib/core.py b/tablib/core.py index 0915ee3..6c17bc3 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -240,13 +240,26 @@ class Dataset(object): def _package(self, dicts=True): """Packages Dataset into lists of dictionaries for transmission.""" + _data = list(self._data) + + # Execute formatters + if self._formatters: + for row_i, row in enumerate(_data): + for col, callback in self._formatters: + if col is None: + for j, c in enumerate(row): + _data[row_i][j] = callback(c) + else: + _data[row_i][col] = callback(row[col]) + + if self.headers: if dicts: - data = [OrderedDict(zip(self.headers, data_row)) for data_row in self ._data] + data = [OrderedDict(zip(self.headers, data_row)) for data_row in _data] else: - data = [list(self.headers)] + list(self._data) + data = [list(self.headers)] + list(_data) else: - data = [list(row) for row in self._data] + data = [list(row) for row in _data] return data @@ -474,7 +487,7 @@ class Dataset(object): self.insert_separator(index, text) - def add_formatter(col, handler): + def add_formatter(self, col, handler): """Adds a :ref:`formatter` to the :class:`Dataset`. .. versionadded:: 0.9.5 From 65c73dfc42ec2012dcc5c91dff43de25936095b1 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:38:45 -0400 Subject: [PATCH 16/48] do some internal validation for adding formatters --- tablib/core.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/tablib/core.py b/tablib/core.py index 6c17bc3..c4efce3 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -246,12 +246,15 @@ class Dataset(object): if self._formatters: for row_i, row in enumerate(_data): for col, callback in self._formatters: - if col is None: - for j, c in enumerate(row): - _data[row_i][j] = callback(c) - else: - _data[row_i][col] = callback(row[col]) - + try: + if col is None: + for j, c in enumerate(row): + _data[row_i][j] = callback(c) + else: + _data[row_i][col] = callback(row[col]) + except IndexError: + raise InvalidDatasetIndex + if self.headers: if dicts: @@ -501,8 +504,11 @@ class Dataset(object): col = self.headers.index(key) # get 'key' index from each data else: raise KeyError - - self._formatters.append((col, handler)) + + if not col > self.width: + self._formatters.append((col, handler)) + else: + raise InvalidDatasetIndex return True @@ -798,6 +804,9 @@ class InvalidDatasetType(Exception): class InvalidDimensions(Exception): "Invalid size" + +class InvalidDatasetIndex(Exception): + "Outside of Dataset size" class HeadersNeeded(Exception): "Header parameter must be given when appending a column in this Dataset." From 2d2ac9b708a44bd7d6e22752c2afa71d1d848e3b Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:49:25 -0400 Subject: [PATCH 17/48] col not key --- tablib/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tablib/core.py b/tablib/core.py index c4efce3..69a684b 100644 --- a/tablib/core.py +++ b/tablib/core.py @@ -501,7 +501,7 @@ class Dataset(object): if isinstance(col, basestring): if col in self.headers: - col = self.headers.index(key) # get 'key' index from each data + col = self.headers.index(col) # get 'key' index from each data else: raise KeyError From dc14a16e04a526b8c2f5a978d8b094760aca05ed Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:49:32 -0400 Subject: [PATCH 18/48] added formatter tests --- test_tablib.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test_tablib.py b/test_tablib.py index 4079809..4e49c50 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -470,6 +470,17 @@ class TablibTestCase(unittest.TestCase): data.append(new_row) self.assertTrue(data.width == len(new_row)) self.assertTrue(data[0] == new_row) + + def test_formatters(self): + """Confirm formatters are being triggered.""" + + def _formatter(cell_value): + return str(cell_value).upper() + + self.founders.add_formatter('last_name', _formatter) + + for name in [r['last_name'] for r in self.founders.dict]: + self.assertTrue(name.isupper()) if __name__ == '__main__': From b9002361577e5b64c74d3e5734cc6b10e5682aeb Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 00:50:27 -0400 Subject: [PATCH 19/48] testing whitespace cleanup --- test_tablib.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test_tablib.py b/test_tablib.py index 4e49c50..568d3d8 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -295,6 +295,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(_csv, data.csv) + def test_csv_import_set_with_spaces(self): """Generate and import CSV set serialization when row values have spaces.""" @@ -308,6 +309,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(_csv, data.csv) + def test_tsv_import_set(self): """Generate and import TSV set serialization.""" data.append(self.john) @@ -320,6 +322,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(_tsv, data.tsv) + def test_csv_format_detect(self): """Test CSV format detection.""" @@ -335,6 +338,7 @@ class TablibTestCase(unittest.TestCase): self.assertTrue(tablib.formats.csv.detect(_csv)) self.assertFalse(tablib.formats.csv.detect(_bunk)) + def test_tsv_format_detect(self): """Test TSV format detection.""" @@ -350,6 +354,7 @@ class TablibTestCase(unittest.TestCase): self.assertTrue(tablib.formats.tsv.detect(_tsv)) self.assertFalse(tablib.formats.tsv.detect(_bunk)) + def test_json_format_detect(self): """Test JSON format detection.""" @@ -387,6 +392,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(tablib.detect(_json)[0], tablib.formats.json) self.assertEqual(tablib.detect(_bunk)[0], None) + def test_transpose(self): """Transpose a dataset.""" @@ -401,6 +407,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(second_row, ("gpa",90, 67, 50)) + def test_row_stacking(self): """Row stacking.""" @@ -418,6 +425,7 @@ class TablibTestCase(unittest.TestCase): expected_data = original_data + original_data self.assertEqual(row_stacked[column], expected_data) + def test_column_stacking(self): """Column stacking""" @@ -438,6 +446,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(column_stacked[0], ("John", "Adams", 90, "John", "Adams", 90)) + def test_sorting(self): """Sort columns.""" @@ -455,6 +464,7 @@ class TablibTestCase(unittest.TestCase): self.assertEqual(second_row, expected_second) self.assertEqual(third_row, expected_third) + def test_wipe(self): """Purge a dataset.""" @@ -470,7 +480,8 @@ class TablibTestCase(unittest.TestCase): data.append(new_row) self.assertTrue(data.width == len(new_row)) self.assertTrue(data[0] == new_row) - + + def test_formatters(self): """Confirm formatters are being triggered.""" From 4c8b5e72e33a44b7df39529d22225deed05407b1 Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Wed, 23 Mar 2011 01:12:48 -0400 Subject: [PATCH 20/48] remove 2.x xlwt --- tablib/packages/xlwt/doc/xlwt.html | 199 ---------- tablib/packages/xlwt/examples/big-16Mb.py | 35 -- tablib/packages/xlwt/examples/big-35Mb.py | 34 -- tablib/packages/xlwt/examples/blanks.py | 36 -- tablib/packages/xlwt/examples/col_width.py | 19 - tablib/packages/xlwt/examples/country.py | 10 - tablib/packages/xlwt/examples/dates.py | 37 -- tablib/packages/xlwt/examples/format.py | 38 -- .../packages/xlwt/examples/formula_names.py | 34 -- tablib/packages/xlwt/examples/formulas.py | 47 --- tablib/packages/xlwt/examples/hyperlinks.py | 28 -- tablib/packages/xlwt/examples/image.py | 12 - tablib/packages/xlwt/examples/merged.py | 39 -- tablib/packages/xlwt/examples/merged0.py | 30 -- tablib/packages/xlwt/examples/merged1.py | 102 ----- tablib/packages/xlwt/examples/mini.py | 9 - tablib/packages/xlwt/examples/num_formats.py | 60 --- tablib/packages/xlwt/examples/numbers.py | 25 -- tablib/packages/xlwt/examples/outline.py | 113 ------ tablib/packages/xlwt/examples/panes.py | 58 --- tablib/packages/xlwt/examples/parse-fmla.py | 12 - tablib/packages/xlwt/examples/protection.py | 122 ------ tablib/packages/xlwt/examples/python.bmp | Bin 37446 -> 0 bytes tablib/packages/xlwt/examples/row_styles.py | 17 - .../xlwt/examples/row_styles_empty.py | 18 - tablib/packages/xlwt/examples/simple.py | 24 -- tablib/packages/xlwt/examples/sst.py | 52 --- tablib/packages/xlwt/examples/unicode0.py | 12 - tablib/packages/xlwt/examples/unicode1.py | 28 -- tablib/packages/xlwt/examples/unicode2.py | 19 - tablib/packages/xlwt/examples/wsprops.py | 155 -------- .../xlwt/examples/xlwt_easyxf_simple_demo.py | 46 --- tablib/packages/xlwt/excel-formula.g | 374 ------------------ 33 files changed, 1844 deletions(-) delete mode 100644 tablib/packages/xlwt/doc/xlwt.html delete mode 100644 tablib/packages/xlwt/examples/big-16Mb.py delete mode 100644 tablib/packages/xlwt/examples/big-35Mb.py delete mode 100644 tablib/packages/xlwt/examples/blanks.py delete mode 100644 tablib/packages/xlwt/examples/col_width.py delete mode 100644 tablib/packages/xlwt/examples/country.py delete mode 100644 tablib/packages/xlwt/examples/dates.py delete mode 100644 tablib/packages/xlwt/examples/format.py delete mode 100644 tablib/packages/xlwt/examples/formula_names.py delete mode 100644 tablib/packages/xlwt/examples/formulas.py delete mode 100644 tablib/packages/xlwt/examples/hyperlinks.py delete mode 100644 tablib/packages/xlwt/examples/image.py delete mode 100644 tablib/packages/xlwt/examples/merged.py delete mode 100644 tablib/packages/xlwt/examples/merged0.py delete mode 100644 tablib/packages/xlwt/examples/merged1.py delete mode 100644 tablib/packages/xlwt/examples/mini.py delete mode 100644 tablib/packages/xlwt/examples/num_formats.py delete mode 100644 tablib/packages/xlwt/examples/numbers.py delete mode 100644 tablib/packages/xlwt/examples/outline.py delete mode 100644 tablib/packages/xlwt/examples/panes.py delete mode 100644 tablib/packages/xlwt/examples/parse-fmla.py delete mode 100644 tablib/packages/xlwt/examples/protection.py delete mode 100644 tablib/packages/xlwt/examples/python.bmp delete mode 100644 tablib/packages/xlwt/examples/row_styles.py delete mode 100644 tablib/packages/xlwt/examples/row_styles_empty.py delete mode 100644 tablib/packages/xlwt/examples/simple.py delete mode 100644 tablib/packages/xlwt/examples/sst.py delete mode 100644 tablib/packages/xlwt/examples/unicode0.py delete mode 100644 tablib/packages/xlwt/examples/unicode1.py delete mode 100644 tablib/packages/xlwt/examples/unicode2.py delete mode 100644 tablib/packages/xlwt/examples/wsprops.py delete mode 100644 tablib/packages/xlwt/examples/xlwt_easyxf_simple_demo.py delete mode 100644 tablib/packages/xlwt/excel-formula.g diff --git a/tablib/packages/xlwt/doc/xlwt.html b/tablib/packages/xlwt/doc/xlwt.html deleted file mode 100644 index 6efb698..0000000 --- a/tablib/packages/xlwt/doc/xlwt.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - -The xlwt Module - - -

The xlwt Module

-

A Python package for generating Microsoft Excel ™ spreadsheet files. -

- -

General information

- -

State of Documentation

- -

-This documentation is currently incomplete. There may be methods and -classes not included and any item marked with a [NC] is not complete and may have further -parameters, methods, attributes and functionality that are not -documented. In these cases, you'll have to refer to the source if the -documentation provided is insufficient. -

- -

- -

Module Contents [NC]

-
-
easyxf (function)
-
-

- This function is used to create and configure XFStyle objects - for use with (for example) the Worksheet.write method. -

-
-
strg_to_parse
-
-

- A string to be parsed to obtain attribute values for Alignment, Borders, Font, - Pattern and Protection objects. Refer to the examples - in the file .../examples/xlwt_easyxf_simple_demo.py and to the xf_dict - dictionary in Style.py. Various synonyms including color/colour, center/centre and gray/grey - are allowed. Case is irrelevant (except maybe in font names). '-' may be used instead - of '_'.
- Example: "font: bold on; align: wrap on, vert centre, horiz center" -

-
-
num_format_str
-
-

- To get the "number format string" of an existing cell whose format you want to reproduce, - select the cell and click on Format/Cells/Number/Custom. Otherwise, refer to Excel help.
- Examples: "#,##0.00", "dd/mm/yyyy" -

-
-
Returns:
-
- An object of the XFstyle class -
-
-
- -
- -
Workbook (class) [#]
-
-

The class to instantiate to create a workbook

-

For more information about this class, see The Workbook Class.

-
-
Worksheet (class) [#]
-
-

A class to represent the contents of a sheet in a workbook.

-

For more information about this class, see The Worksheet Class.

-
-
- -

The Workbook Class[NC]

-
-
Workbook(encoding='ascii',style_compression=0) (class) [#]
-
-

- This is a class representing a workbook and all its contents. - When creating Excel files with xlwt, you will normally start by - instantiating an object of this class. -

-
-
encoding
-
- [NC] -
-
style_compression
-
- [NC] -
-
Returns:
-
- An object of the Workbook class -
-
-
-
-
add_sheet(sheetname) [#]
-
-

- This method is used to create Worksheets in a Workbook. -

-
-
sheetname
-
- The name to use for this sheet, as it will appear in the tabs at - the bottom of the Excel application. -
-
Returns:
-
- An object of the Worksheet class -
-
-
-
-
save(filename_or_stream) [#]
-
-

- This method is used to save Workbook to a file in native Excel format. -

-
-
filename_or_stream
-
-

- This can be a string containing a filename of the file, in which case - the excel file is saved to disk using the name provided. -

-

- It can also be a stream object with a write method, such as a - StringIO, in which case the data for the excel file is written - to the stream. -

-
-
-
-
-
- -

The Worksheet Class[NC]

-
-
Worksheet(sheetname, parent_book) (class) [#]
-
-

- This is a class representing the contents of a sheet in a workbook. -

-

- WARNING: You don't normally create instances of this class - yourself. They are returned from calls to Workbook.add_sheet -

-
-
write(r, c, label="", style=Style.default_style) [#]
-
-

- This method is used to write a cell to a Worksheet.. -

-
-
r
-
- The zero-relative number of the row in the worksheet to which the cell should be written. -
-
c
-
- The zero-relative number of the column in the worksheet to which the cell should be written. -
-
label
-
- The data value to be written. - An int, long, or decimal.Decimal instance is converted to float. - A unicode instance is written as is. - A str instance is converted to unicode using the encoding (default: 'ascii') specified - when the Workbook instance was created. - A datetime.datetime, datetime.date, or datetime.time instance is converted into Excel date format - (a float representing the number of days since (typically) 1899-12-31T00:00:00, - under the pretence that 1900 was a leap year). - A bool instance will show up as TRUE or FALSE in Excel. - None causes the cell to be blank -- no data, only formatting. - An xlwt.Formula instance causes an Excel formula to be written. - [NC] -
-
style
-
- A style -- also known as an XF (extended format) -- is an XFStyle object, which encapsulates - the formatting applied to the cell and its contents. XFStyle objects are best set up using the - easyxf function. They may also be set up by setting attributes in - Alignment, Borders, Pattern, Font and Protection objects - then setting those objects and a format string as attributes of an XFStyle object. - [NC] -
-
-
-
-
- - diff --git a/tablib/packages/xlwt/examples/big-16Mb.py b/tablib/packages/xlwt/examples/big-16Mb.py deleted file mode 100644 index 91db123..0000000 --- a/tablib/packages/xlwt/examples/big-16Mb.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python -# tries stress SST, SAT and MSAT - -from time import * -from xlwt.Workbook import * -from xlwt.Style import * - -style = XFStyle() - -wb = Workbook() -ws0 = wb.add_sheet('0') - -colcount = 200 + 1 -rowcount = 6000 + 1 - -t0 = time() -print "\nstart: %s" % ctime(t0) - -print "Filling..." -for col in xrange(colcount): - print "[%d]" % col, - for row in xrange(rowcount): - #ws0.write(row, col, "BIG(%d, %d)" % (row, col)) - ws0.write(row, col, "BIG") - -t1 = time() - t0 -print "\nsince starting elapsed %.2f s" % (t1) - -print "Storing..." -wb.save('big-16Mb.xls') - -t2 = time() - t0 -print "since starting elapsed %.2f s" % (t2) - - diff --git a/tablib/packages/xlwt/examples/big-35Mb.py b/tablib/packages/xlwt/examples/big-35Mb.py deleted file mode 100644 index 74be5a7..0000000 --- a/tablib/packages/xlwt/examples/big-35Mb.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# tries stress SST, SAT and MSAT - -from time import * -from xlwt import * - -style = XFStyle() - -wb = Workbook() -ws0 = wb.add_sheet('0') - -colcount = 200 + 1 -rowcount = 6000 + 1 - -t0 = time() -print "\nstart: %s" % ctime(t0) - -print "Filling..." -for col in xrange(colcount): - print "[%d]" % col, - for row in xrange(rowcount): - ws0.write(row, col, "BIG(%d, %d)" % (row, col)) - #ws0.write(row, col, "BIG") - -t1 = time() - t0 -print "\nsince starting elapsed %.2f s" % (t1) - -print "Storing..." -wb.save('big-35Mb.xls') - -t2 = time() - t0 -print "since starting elapsed %.2f s" % (t2) - - diff --git a/tablib/packages/xlwt/examples/blanks.py b/tablib/packages/xlwt/examples/blanks.py deleted file mode 100644 index 056a3ec..0000000 --- a/tablib/packages/xlwt/examples/blanks.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -font0 = Font() -font0.name = 'Times New Roman' -font0.struck_out = True -font0.bold = True - -style0 = XFStyle() -style0.font = font0 - - -wb = Workbook() -ws0 = wb.add_sheet('0') - -ws0.write(1, 1, 'Test', style0) - -for i in range(0, 0x53): - borders = Borders() - borders.left = i - borders.right = i - borders.top = i - borders.bottom = i - - style = XFStyle() - style.borders = borders - - ws0.write(i, 2, '', style) - ws0.write(i, 3, hex(i), style0) - -ws0.write_merge(5, 8, 6, 10, "") - -wb.save('blanks.xls') diff --git a/tablib/packages/xlwt/examples/col_width.py b/tablib/packages/xlwt/examples/col_width.py deleted file mode 100644 index 6e6cb33..0000000 --- a/tablib/packages/xlwt/examples/col_width.py +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman -__rev_id__ = """$Id: col_width.py 3315 2008-03-14 14:44:52Z chris $""" - - -from xlwt import * - -w = Workbook() -ws = w.add_sheet('Hey, Dude') - -for i in range(6, 80): - fnt = Font() - fnt.height = i*20 - style = XFStyle() - style.font = fnt - ws.write(1, i, 'Test') - ws.col(i).width = 0x0d00 + i -w.save('col_width.xls') diff --git a/tablib/packages/xlwt/examples/country.py b/tablib/packages/xlwt/examples/country.py deleted file mode 100644 index cb26e29..0000000 --- a/tablib/packages/xlwt/examples/country.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1252 -*- -# Copyright (C) 2007 John Machin - -from xlwt import * - -w = Workbook() -w.country_code = 61 -ws = w.add_sheet('AU') -w.save('country.xls') diff --git a/tablib/packages/xlwt/examples/dates.py b/tablib/packages/xlwt/examples/dates.py deleted file mode 100644 index 389b93b..0000000 --- a/tablib/packages/xlwt/examples/dates.py +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * -from datetime import datetime - -w = Workbook() -ws = w.add_sheet('Hey, Dude') - -fmts = [ - 'M/D/YY', - 'D-MMM-YY', - 'D-MMM', - 'MMM-YY', - 'h:mm AM/PM', - 'h:mm:ss AM/PM', - 'h:mm', - 'h:mm:ss', - 'M/D/YY h:mm', - 'mm:ss', - '[h]:mm:ss', - 'mm:ss.0', -] - -i = 0 -for fmt in fmts: - ws.write(i, 0, fmt) - - style = XFStyle() - style.num_format_str = fmt - - ws.write(i, 4, datetime.now(), style) - - i += 1 - -w.save('dates.xls') diff --git a/tablib/packages/xlwt/examples/format.py b/tablib/packages/xlwt/examples/format.py deleted file mode 100644 index fd49e0a..0000000 --- a/tablib/packages/xlwt/examples/format.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -font0 = Font() -font0.name = 'Times New Roman' -font0.struck_out = True -font0.bold = True - -style0 = XFStyle() -style0.font = font0 - - -wb = Workbook() -ws0 = wb.add_sheet('0') - -ws0.write(1, 1, 'Test', style0) - -for i in range(0, 0x53): - fnt = Font() - fnt.name = 'Arial' - fnt.colour_index = i - fnt.outline = True - - borders = Borders() - borders.left = i - - style = XFStyle() - style.font = fnt - style.borders = borders - - ws0.write(i, 2, 'colour', style) - ws0.write(i, 3, hex(i), style0) - - -wb.save('format.xls') diff --git a/tablib/packages/xlwt/examples/formula_names.py b/tablib/packages/xlwt/examples/formula_names.py deleted file mode 100644 index f0354bc..0000000 --- a/tablib/packages/xlwt/examples/formula_names.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * -from xlwt.ExcelFormulaParser import FormulaParseException - -w = Workbook() -ws = w.add_sheet('F') - -## This example is a little silly since the formula building is -## so simplistic that it often fails because the generated text -## has the wrong number of parameters for the function being -## tested. - -i = 0 -succeed_count = 0 -fail_count = 0 -for n in sorted(ExcelMagic.std_func_by_name): - ws.write(i, 0, n) - text = n + "($A$1)" - try: - formula = Formula(text) - except FormulaParseException,e: - print "Could not parse %r: %s" % (text,e.args[0]) - fail_count += 1 - else: - ws.write(i, 3, formula) - succeed_count += 1 - i += 1 - -w.save('formula_names.xls') - -print "succeeded with %i functions, failed with %i" % (succeed_count,fail_count) diff --git a/tablib/packages/xlwt/examples/formulas.py b/tablib/packages/xlwt/examples/formulas.py deleted file mode 100644 index b89f5f5..0000000 --- a/tablib/packages/xlwt/examples/formulas.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -w = Workbook() -ws = w.add_sheet('F') - -ws.write(0, 0, Formula("-(1+1)")) -ws.write(1, 0, Formula("-(1+1)/(-2-2)")) -ws.write(2, 0, Formula("-(134.8780789+1)")) -ws.write(3, 0, Formula("-(134.8780789e-10+1)")) -ws.write(4, 0, Formula("-1/(1+1)+9344")) - -ws.write(0, 1, Formula("-(1+1)")) -ws.write(1, 1, Formula("-(1+1)/(-2-2)")) -ws.write(2, 1, Formula("-(134.8780789+1)")) -ws.write(3, 1, Formula("-(134.8780789e-10+1)")) -ws.write(4, 1, Formula("-1/(1+1)+9344")) - -ws.write(0, 2, Formula("A1*B1")) -ws.write(1, 2, Formula("A2*B2")) -ws.write(2, 2, Formula("A3*B3")) -ws.write(3, 2, Formula("A4*B4*sin(pi()/4)")) -ws.write(4, 2, Formula("A5%*B5*pi()/1000")) - -############## -## NOTE: parameters are separated by semicolon!!! -############## - - -ws.write(5, 2, Formula("C1+C2+C3+C4+C5/(C1+C2+C3+C4/(C1+C2+C3+C4/(C1+C2+C3+C4)+C5)+C5)-20.3e-2")) -ws.write(5, 3, Formula("C1^2")) -ws.write(6, 2, Formula("SUM(C1;C2;;;;;C3;;;C4)")) -ws.write(6, 3, Formula("SUM($A$1:$C$5)")) - -ws.write(7, 0, Formula('"lkjljllkllkl"')) -ws.write(7, 1, Formula('"yuyiyiyiyi"')) -ws.write(7, 2, Formula('A8 & B8 & A8')) -ws.write(8, 2, Formula('now()')) - -ws.write(10, 2, Formula('TRUE')) -ws.write(11, 2, Formula('FALSE')) -ws.write(12, 3, Formula('IF(A1>A2;3;"hkjhjkhk")')) - -w.save('formulas.xls') diff --git a/tablib/packages/xlwt/examples/hyperlinks.py b/tablib/packages/xlwt/examples/hyperlinks.py deleted file mode 100644 index 8de611b..0000000 --- a/tablib/packages/xlwt/examples/hyperlinks.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -f = Font() -f.height = 20*72 -f.name = 'Verdana' -f.bold = True -f.underline = Font.UNDERLINE_DOUBLE -f.colour_index = 4 - -h_style = XFStyle() -h_style.font = f - -w = Workbook() -ws = w.add_sheet('F') - -############## -## NOTE: parameters are separated by semicolon!!! -############## - -n = "HYPERLINK" -ws.write_merge(1, 1, 1, 10, Formula(n + '("http://www.irs.gov/pub/irs-pdf/f1000.pdf";"f1000.pdf")'), h_style) -ws.write_merge(2, 2, 2, 25, Formula(n + '("mailto:roman.kiseliov@gmail.com?subject=pyExcelerator-feedback&Body=Hello,%20Roman!";"pyExcelerator-feedback")'), h_style) - -w.save("hyperlinks.xls") diff --git a/tablib/packages/xlwt/examples/image.py b/tablib/packages/xlwt/examples/image.py deleted file mode 100644 index f926b8d..0000000 --- a/tablib/packages/xlwt/examples/image.py +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -w = Workbook() -ws = w.add_sheet('Image') -ws.insert_bitmap('python.bmp', 2, 2) -ws.insert_bitmap('python.bmp', 10, 2) - -w.save('image.xls') diff --git a/tablib/packages/xlwt/examples/merged.py b/tablib/packages/xlwt/examples/merged.py deleted file mode 100644 index f7f9c57..0000000 --- a/tablib/packages/xlwt/examples/merged.py +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -fnt = Font() -fnt.name = 'Arial' -fnt.colour_index = 4 -fnt.bold = True - -borders = Borders() -borders.left = 6 -borders.right = 6 -borders.top = 6 -borders.bottom = 6 - -al = Alignment() -al.horz = Alignment.HORZ_CENTER -al.vert = Alignment.VERT_CENTER - -style = XFStyle() -style.font = fnt -style.borders = borders -style.alignment = al - - -wb = Workbook() -ws0 = wb.add_sheet('sheet0') -ws1 = wb.add_sheet('sheet1') -ws2 = wb.add_sheet('sheet2') - -for i in range(0, 0x200, 2): - ws0.write_merge(i, i+1, 1, 5, 'test %d' % i, style) - ws1.write_merge(i, i, 1, 7, 'test %d' % i, style) - ws2.write_merge(i, i+1, 1, 7 + (i%10), 'test %d' % i, style) - - -wb.save('merged.xls') diff --git a/tablib/packages/xlwt/examples/merged0.py b/tablib/packages/xlwt/examples/merged0.py deleted file mode 100644 index 93496c6..0000000 --- a/tablib/packages/xlwt/examples/merged0.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -wb = Workbook() -ws0 = wb.add_sheet('sheet0') - - -fnt = Font() -fnt.name = 'Arial' -fnt.colour_index = 4 -fnt.bold = True - -borders = Borders() -borders.left = 6 -borders.right = 6 -borders.top = 6 -borders.bottom = 6 - -style = XFStyle() -style.font = fnt -style.borders = borders - -ws0.write_merge(3, 3, 1, 5, 'test1', style) -ws0.write_merge(4, 10, 1, 5, 'test2', style) -ws0.col(1).width = 0x0d00 - -wb.save('merged0.xls') diff --git a/tablib/packages/xlwt/examples/merged1.py b/tablib/packages/xlwt/examples/merged1.py deleted file mode 100644 index 813530b..0000000 --- a/tablib/packages/xlwt/examples/merged1.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -wb = Workbook() -ws0 = wb.add_sheet('sheet0') - -fnt1 = Font() -fnt1.name = 'Verdana' -fnt1.bold = True -fnt1.height = 18*0x14 - -pat1 = Pattern() -pat1.pattern = Pattern.SOLID_PATTERN -pat1.pattern_fore_colour = 0x16 - -brd1 = Borders() -brd1.left = 0x06 -brd1.right = 0x06 -brd1.top = 0x06 -brd1.bottom = 0x06 - -fnt2 = Font() -fnt2.name = 'Verdana' -fnt2.bold = True -fnt2.height = 14*0x14 - -brd2 = Borders() -brd2.left = 0x01 -brd2.right = 0x01 -brd2.top = 0x01 -brd2.bottom = 0x01 - -pat2 = Pattern() -pat2.pattern = Pattern.SOLID_PATTERN -pat2.pattern_fore_colour = 0x01F - -fnt3 = Font() -fnt3.name = 'Verdana' -fnt3.bold = True -fnt3.italic = True -fnt3.height = 12*0x14 - -brd3 = Borders() -brd3.left = 0x07 -brd3.right = 0x07 -brd3.top = 0x07 -brd3.bottom = 0x07 - -fnt4 = Font() - -al1 = Alignment() -al1.horz = Alignment.HORZ_CENTER -al1.vert = Alignment.VERT_CENTER - -al2 = Alignment() -al2.horz = Alignment.HORZ_RIGHT -al2.vert = Alignment.VERT_CENTER - -al3 = Alignment() -al3.horz = Alignment.HORZ_LEFT -al3.vert = Alignment.VERT_CENTER - -style1 = XFStyle() -style1.font = fnt1 -style1.alignment = al1 -style1.pattern = pat1 -style1.borders = brd1 - -style2 = XFStyle() -style2.font = fnt2 -style2.alignment = al1 -style2.pattern = pat2 -style2.borders = brd2 - -style3 = XFStyle() -style3.font = fnt3 -style3.alignment = al1 -style3.pattern = pat2 -style3.borders = brd3 - -price_style = XFStyle() -price_style.font = fnt4 -price_style.alignment = al2 -price_style.borders = brd3 -price_style.num_format_str = '_(#,##0.00_) "money"' - -ware_style = XFStyle() -ware_style.font = fnt4 -ware_style.alignment = al3 -ware_style.borders = brd3 - - -ws0.merge(3, 3, 1, 5, style1) -ws0.merge(4, 10, 1, 6, style2) -ws0.merge(14, 16, 1, 7, style3) -ws0.col(1).width = 0x0d00 - - -wb.save('merged1.xls') diff --git a/tablib/packages/xlwt/examples/mini.py b/tablib/packages/xlwt/examples/mini.py deleted file mode 100644 index 61bb30c..0000000 --- a/tablib/packages/xlwt/examples/mini.py +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -w = Workbook() -ws = w.add_sheet('xlwt was here') -w.save('mini.xls') diff --git a/tablib/packages/xlwt/examples/num_formats.py b/tablib/packages/xlwt/examples/num_formats.py deleted file mode 100644 index 3a56f6c..0000000 --- a/tablib/packages/xlwt/examples/num_formats.py +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -w = Workbook() -ws = w.add_sheet('Hey, Dude') - -fmts = [ - 'general', - '0', - '0.00', - '#,##0', - '#,##0.00', - '"$"#,##0_);("$"#,##', - '"$"#,##0_);[Red]("$"#,##', - '"$"#,##0.00_);("$"#,##', - '"$"#,##0.00_);[Red]("$"#,##', - '0%', - '0.00%', - '0.00E+00', - '# ?/?', - '# ??/??', - 'M/D/YY', - 'D-MMM-YY', - 'D-MMM', - 'MMM-YY', - 'h:mm AM/PM', - 'h:mm:ss AM/PM', - 'h:mm', - 'h:mm:ss', - 'M/D/YY h:mm', - '_(#,##0_);(#,##0)', - '_(#,##0_);[Red](#,##0)', - '_(#,##0.00_);(#,##0.00)', - '_(#,##0.00_);[Red](#,##0.00)', - '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)', - '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)', - '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)', - '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)', - 'mm:ss', - '[h]:mm:ss', - 'mm:ss.0', - '##0.0E+0', - '@' -] - -i = 0 -for fmt in fmts: - ws.write(i, 0, fmt) - - style = XFStyle() - style.num_format_str = fmt - - ws.write(i, 4, -1278.9078, style) - - i += 1 - -w.save('num_formats.xls') diff --git a/tablib/packages/xlwt/examples/numbers.py b/tablib/packages/xlwt/examples/numbers.py deleted file mode 100644 index 524d9fc..0000000 --- a/tablib/packages/xlwt/examples/numbers.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -w = Workbook() -ws = w.add_sheet('Hey, Dude') - -ws.write(0, 0, 1) -ws.write(1, 0, 1.23) -ws.write(2, 0, 12345678) -ws.write(3, 0, 123456.78) - -ws.write(0, 1, -1) -ws.write(1, 1, -1.23) -ws.write(2, 1, -12345678) -ws.write(3, 1, -123456.78) - -ws.write(0, 2, -17867868678687.0) -ws.write(1, 2, -1.23e-5) -ws.write(2, 2, -12345678.90780980) -ws.write(3, 2, -123456.78) - -w.save('numbers.xls') diff --git a/tablib/packages/xlwt/examples/outline.py b/tablib/packages/xlwt/examples/outline.py deleted file mode 100644 index 45b8df9..0000000 --- a/tablib/packages/xlwt/examples/outline.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -fnt = Font() -fnt.name = 'Arial' -fnt.colour_index = 4 -fnt.bold = True - -borders = Borders() -borders.left = 6 -borders.right = 6 -borders.top = 6 -borders.bottom = 6 - -style = XFStyle() -style.font = fnt -style.borders = borders - -wb = Workbook() - -ws0 = wb.add_sheet('Rows Outline') - -ws0.write_merge(1, 1, 1, 5, 'test 1', style) -ws0.write_merge(2, 2, 1, 4, 'test 1', style) -ws0.write_merge(3, 3, 1, 3, 'test 2', style) -ws0.write_merge(4, 4, 1, 4, 'test 1', style) -ws0.write_merge(5, 5, 1, 4, 'test 3', style) -ws0.write_merge(6, 6, 1, 5, 'test 1', style) -ws0.write_merge(7, 7, 1, 5, 'test 4', style) -ws0.write_merge(8, 8, 1, 4, 'test 1', style) -ws0.write_merge(9, 9, 1, 3, 'test 5', style) - -ws0.row(1).level = 1 -ws0.row(2).level = 1 -ws0.row(3).level = 2 -ws0.row(4).level = 2 -ws0.row(5).level = 2 -ws0.row(6).level = 2 -ws0.row(7).level = 2 -ws0.row(8).level = 1 -ws0.row(9).level = 1 - - -ws1 = wb.add_sheet('Columns Outline') - -ws1.write_merge(1, 1, 1, 5, 'test 1', style) -ws1.write_merge(2, 2, 1, 4, 'test 1', style) -ws1.write_merge(3, 3, 1, 3, 'test 2', style) -ws1.write_merge(4, 4, 1, 4, 'test 1', style) -ws1.write_merge(5, 5, 1, 4, 'test 3', style) -ws1.write_merge(6, 6, 1, 5, 'test 1', style) -ws1.write_merge(7, 7, 1, 5, 'test 4', style) -ws1.write_merge(8, 8, 1, 4, 'test 1', style) -ws1.write_merge(9, 9, 1, 3, 'test 5', style) - -ws1.col(1).level = 1 -ws1.col(2).level = 1 -ws1.col(3).level = 2 -ws1.col(4).level = 2 -ws1.col(5).level = 2 -ws1.col(6).level = 2 -ws1.col(7).level = 2 -ws1.col(8).level = 1 -ws1.col(9).level = 1 - - -ws2 = wb.add_sheet('Rows and Columns Outline') - -ws2.write_merge(1, 1, 1, 5, 'test 1', style) -ws2.write_merge(2, 2, 1, 4, 'test 1', style) -ws2.write_merge(3, 3, 1, 3, 'test 2', style) -ws2.write_merge(4, 4, 1, 4, 'test 1', style) -ws2.write_merge(5, 5, 1, 4, 'test 3', style) -ws2.write_merge(6, 6, 1, 5, 'test 1', style) -ws2.write_merge(7, 7, 1, 5, 'test 4', style) -ws2.write_merge(8, 8, 1, 4, 'test 1', style) -ws2.write_merge(9, 9, 1, 3, 'test 5', style) - -ws2.row(1).level = 1 -ws2.row(2).level = 1 -ws2.row(3).level = 2 -ws2.row(4).level = 2 -ws2.row(5).level = 2 -ws2.row(6).level = 2 -ws2.row(7).level = 2 -ws2.row(8).level = 1 -ws2.row(9).level = 1 - -ws2.write_merge(1, 1, 1, 5, 'test 1', style) -ws2.write_merge(2, 2, 1, 4, 'test 1', style) -ws2.write_merge(3, 3, 1, 3, 'test 2', style) -ws2.write_merge(4, 4, 1, 4, 'test 1', style) -ws2.write_merge(5, 5, 1, 4, 'test 3', style) -ws2.write_merge(6, 6, 1, 5, 'test 1', style) -ws2.write_merge(7, 7, 1, 5, 'test 4', style) -ws2.write_merge(8, 8, 1, 4, 'test 1', style) -ws2.write_merge(9, 9, 1, 3, 'test 5', style) - -ws2.col(1).level = 1 -ws2.col(2).level = 1 -ws2.col(3).level = 2 -ws2.col(4).level = 2 -ws2.col(5).level = 2 -ws2.col(6).level = 2 -ws2.col(7).level = 2 -ws2.col(8).level = 1 -ws2.col(9).level = 1 - - -wb.save('outline.xls') diff --git a/tablib/packages/xlwt/examples/panes.py b/tablib/packages/xlwt/examples/panes.py deleted file mode 100644 index 9fd83b0..0000000 --- a/tablib/packages/xlwt/examples/panes.py +++ /dev/null @@ -1,58 +0,0 @@ -#!/usr/bin/env python -# -*- coding: windows-1251 -*- -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -w = Workbook() -ws1 = w.add_sheet('sheet 1') -ws2 = w.add_sheet('sheet 2') -ws3 = w.add_sheet('sheet 3') -ws4 = w.add_sheet('sheet 4') -ws5 = w.add_sheet('sheet 5') -ws6 = w.add_sheet('sheet 6') - -for i in range(0x100): - ws1.write(i/0x10, i%0x10, i) - -for i in range(0x100): - ws2.write(i/0x10, i%0x10, i) - -for i in range(0x100): - ws3.write(i/0x10, i%0x10, i) - -for i in range(0x100): - ws4.write(i/0x10, i%0x10, i) - -for i in range(0x100): - ws5.write(i/0x10, i%0x10, i) - -for i in range(0x100): - ws6.write(i/0x10, i%0x10, i) - -ws1.panes_frozen = True -ws1.horz_split_pos = 2 - -ws2.panes_frozen = True -ws2.vert_split_pos = 2 - -ws3.panes_frozen = True -ws3.horz_split_pos = 1 -ws3.vert_split_pos = 1 - -ws4.panes_frozen = False -ws4.horz_split_pos = 12 -ws4.horz_split_first_visible = 2 - -ws5.panes_frozen = False -ws5.vert_split_pos = 40 -ws4.vert_split_first_visible = 2 - -ws6.panes_frozen = False -ws6.horz_split_pos = 12 -ws4.horz_split_first_visible = 2 -ws6.vert_split_pos = 40 -ws4.vert_split_first_visible = 2 - -w.save('panes.xls') - diff --git a/tablib/packages/xlwt/examples/parse-fmla.py b/tablib/packages/xlwt/examples/parse-fmla.py deleted file mode 100644 index 06f68eb..0000000 --- a/tablib/packages/xlwt/examples/parse-fmla.py +++ /dev/null @@ -1,12 +0,0 @@ -from xlwt import ExcelFormulaParser, ExcelFormula -import sys - -f = ExcelFormula.Formula( -""" -((1.80 + 2.898 * 1)/(1.80 + 2.898))* -AVERAGE((1.80 + 2.898 * 1)/(1.80 + 2.898); - (1.80 + 2.898 * 1)/(1.80 + 2.898); - (1.80 + 2.898 * 1)/(1.80 + 2.898)) + -SIN(PI()/4)""") - -#for t in f.rpn(): -# print "%15s %15s" % (ExcelFormulaParser.PtgNames[t[0]], t[1]) diff --git a/tablib/packages/xlwt/examples/protection.py b/tablib/packages/xlwt/examples/protection.py deleted file mode 100644 index db54cb0..0000000 --- a/tablib/packages/xlwt/examples/protection.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (C) 2005 Kiseliov Roman - -from xlwt import * - -fnt = Font() -fnt.name = 'Arial' -fnt.colour_index = 4 -fnt.bold = True - -borders = Borders() -borders.left = 6 -borders.right = 6 -borders.top = 6 -borders.bottom = 6 - -style = XFStyle() -style.font = fnt -style.borders = borders - -wb = Workbook() - -ws0 = wb.add_sheet('Rows Outline') - -ws0.write_merge(1, 1, 1, 5, 'test 1', style) -ws0.write_merge(2, 2, 1, 4, 'test 1', style) -ws0.write_merge(3, 3, 1, 3, 'test 2', style) -ws0.write_merge(4, 4, 1, 4, 'test 1', style) -ws0.write_merge(5, 5, 1, 4, 'test 3', style) -ws0.write_merge(6, 6, 1, 5, 'test 1', style) -ws0.write_merge(7, 7, 1, 5, 'test 4', style) -ws0.write_merge(8, 8, 1, 4, 'test 1', style) -ws0.write_merge(9, 9, 1, 3, 'test 5', style) - -ws0.row(1).level = 1 -ws0.row(2).level = 1 -ws0.row(3).level = 2 -ws0.row(4).level = 2 -ws0.row(5).level = 2 -ws0.row(6).level = 2 -ws0.row(7).level = 2 -ws0.row(8).level = 1 -ws0.row(9).level = 1 - - -ws1 = wb.add_sheet('Columns Outline') - -ws1.write_merge(1, 1, 1, 5, 'test 1', style) -ws1.write_merge(2, 2, 1, 4, 'test 1', style) -ws1.write_merge(3, 3, 1, 3, 'test 2', style) -ws1.write_merge(4, 4, 1, 4, 'test 1', style) -ws1.write_merge(5, 5, 1, 4, 'test 3', style) -ws1.write_merge(6, 6, 1, 5, 'test 1', style) -ws1.write_merge(7, 7, 1, 5, 'test 4', style) -ws1.write_merge(8, 8, 1, 4, 'test 1', style) -ws1.write_merge(9, 9, 1, 3, 'test 5', style) - -ws1.col(1).level = 1 -ws1.col(2).level = 1 -ws1.col(3).level = 2 -ws1.col(4).level = 2 -ws1.col(5).level = 2 -ws1.col(6).level = 2 -ws1.col(7).level = 2 -ws1.col(8).level = 1 -ws1.col(9).level = 1 - - -ws2 = wb.add_sheet('Rows and Columns Outline') - -ws2.write_merge(1, 1, 1, 5, 'test 1', style) -ws2.write_merge(2, 2, 1, 4, 'test 1', style) -ws2.write_merge(3, 3, 1, 3, 'test 2', style) -ws2.write_merge(4, 4, 1, 4, 'test 1', style) -ws2.write_merge(5, 5, 1, 4, 'test 3', style) -ws2.write_merge(6, 6, 1, 5, 'test 1', style) -ws2.write_merge(7, 7, 1, 5, 'test 4', style) -ws2.write_merge(8, 8, 1, 4, 'test 1', style) -ws2.write_merge(9, 9, 1, 3, 'test 5', style) - -ws2.row(1).level = 1 -ws2.row(2).level = 1 -ws2.row(3).level = 2 -ws2.row(4).level = 2 -ws2.row(5).level = 2 -ws2.row(6).level = 2 -ws2.row(7).level = 2 -ws2.row(8).level = 1 -ws2.row(9).level = 1 - -ws2.col(1).level = 1 -ws2.col(2).level = 1 -ws2.col(3).level = 2 -ws2.col(4).level = 2 -ws2.col(5).level = 2 -ws2.col(6).level = 2 -ws2.col(7).level = 2 -ws2.col(8).level = 1 -ws2.col(9).level = 1 - - -ws0.protect = True -ws0.wnd_protect = True -ws0.obj_protect = True -ws0.scen_protect = True -ws0.password = "123456" - -ws1.protect = True -ws1.wnd_protect = True -ws1.obj_protect = True -ws1.scen_protect = True -ws1.password = "abcdefghij" - -ws2.protect = True -ws2.wnd_protect = True -ws2.obj_protect = True -ws2.scen_protect = True -ws2.password = "ok" - -wb.protect = True -wb.wnd_protect = True -wb.obj_protect = True -wb.save('protection.xls') diff --git a/tablib/packages/xlwt/examples/python.bmp b/tablib/packages/xlwt/examples/python.bmp deleted file mode 100644 index bd1ba3fb1c111d68657b8a8a62190ef5b1cfef91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37446 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