pyexcel-ods is a tiny wrapper library to read, manipulate and write data in ods fromat using python 2.6 and python 2.7. You are likely to use it with pyexcel. pyexcel-ods3 is a sister library that does the same thing but supports Python 3.3 and 3.4 and depends on lxml.
Fonts, colors and charts are not supported.
You can install it via pip:
$ pip install pyexcel-ods
or clone it and install it:
$ git clone http://github.com/chfw/pyexcel-ods.git
$ cd pyexcel-ods
$ python setup.py install
Here’s the sample code to write a dictionary to an ods file:
>>> from pyexcel_ods import save_data
>>> data = OrderedDict()
>>> data.update({"Sheet 1": [[1, 2, 3], [4, 5, 6]]})
>>> data.update({"Sheet 2": [["row 1", "row 2", "row 3"]]})
>>> save_data("your_file.ods", data)
Here’s the sample code:
>>> from pyexcel_ods import get_data
>>> data = get_data("your_file.ods")
>>> import json
>>> print(json.dumps(data))
{"Sheet 1": [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], "Sheet 2": [["row 1", "row 2", "row 3"]]}
Here’s the sample code to write a dictionary to an ods file:
>>> from pyexcel_ods import save_data
>>> data = OrderedDict()
>>> data.update({"Sheet 1": [[1, 2, 3], [4, 5, 6]]})
>>> data.update({"Sheet 2": [[7, 8, 9], [10, 11, 12]]})
>>> io = StringIO()
>>> save_data(io, data)
>>> # do something with the io
>>> # In reality, you might give it to your http response
>>> # object for downloading
Here’s the sample code:
>>> # This is just an illustration
>>> # In reality, you might deal with ods file upload
>>> # where you will read from requests.FILES['YOUR_ODS_FILE']
>>> data = get_data(io)
>>> print(json.dumps(data))
{"Sheet 1": [[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], "Sheet 2": [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]}
Import it in your file to enable this plugin:
from pyexcel.ext import ods
Please note only pyexcel version 0.0.4+ support this.
Here is the sample code:
>>> import pyexcel as pe
>>> from pyexcel.ext import ods
>>> sheet = pe.get_book(file_name="your_file.ods")
>>> sheet
Sheet Name: Sheet 1
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
Sheet Name: Sheet 2
+-------+-------+-------+
| row 1 | row 2 | row 3 |
+-------+-------+-------+
You got to wrap the binary content with StringIO to get odf working:
>>> # This is just an illustration
>>> # In reality, you might deal with ods file upload
>>> # where you will read from requests.FILES['YOUR_ODS_FILE']
>>> odsfile = "another_file.ods"
>>> with open(odsfile, "rb") as f:
... content = f.read()
... r = pe.get_book(file_type="ods", file_content=content)
... print(r)
...
Sheet Name: Sheet 1
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
| 4 | 5 | 6 |
+---+---+---+
Sheet Name: Sheet 2
+-------+-------+-------+
| row 1 | row 2 | row 3 |
+-------+-------+-------+
You need to pass a StringIO instance to Writer:
>>> data = [
... [1, 2, 3],
... [4, 5, 6]
... ]
>>> io = StringIO()
>>> sheet = pe.Sheet(data)
>>> sheet.save_to_memory("ods", io)
>>> # then do something with io
>>> # In reality, you might give it to your http response
>>> # object for downloading
New BSD License
ODSReader is originally written by Marco Conti