pyexcel-xls is a tiny wrapper library to read, manipulate and write data in xls format and it can read xlsx and xlsm fromat. You are likely to use it with pyexcel.
Fonts, colors and charts are not supported.
You can install it via pip:
$ pip install pyexcel-xls
or clone it and install it:
$ git clone http://github.com/chfw/pyexcel-xls.git
$ cd pyexcel-xls
$ python setup.py install
Here’s the sample code to write a dictionary to an xls file:
>>> from pyexcel_xls import save_data
>>> data = OrderedDict() # from collections import 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.xls", data)
Here’s the sample code:
>>> from pyexcel_xls import get_data
>>> data = get_data("your_file.xls")
>>> 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 xls file:
>>> from pyexcel_xls 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
Continue from previous example:
>>> # This is just an illustration
>>> # In reality, you might deal with xls file upload
>>> # where you will read from requests.FILES['YOUR_XL_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 xls
Please note only pyexcel version 0.0.4+ support this.
Here is the sample code:
>>> import pyexcel as pe
>>> from pyexcel.ext import xls
>>> sheet = pe.get_book(file_name="your_file.xls")
>>> 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 stream to get xls working:
>>> # This is just an illustration
>>> # In reality, you might deal with xls file upload
>>> # where you will read from requests.FILES['YOUR_XLS_FILE']
>>> xlsfile = "another_file.xls"
>>> with open(xlsfile, "rb") as f:
... content = f.read()
... r = pe.get_book(file_type="xls", 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("xls", io)
>>> # then do something with io
>>> # In reality, you might give it to your http response
>>> # object for downloading
New BSD License