Here are the Release Notes for each version:
Cross-platform: xlwings is now additionally supporting Microsoft Excel for Mac. The only functionality that is not yet available is the possibility to call the Python code from within Excel via a VBA macro.
The clear and clear_contents methods of the Workbook object now default to the active sheet (GH5):
wb = Workbook()
wb.clear_contents() # Clears contents of the entire active sheet
xlwings is now officially suppported on Python 2.6-2.7 and 3.1-3.4
Support for Pandas Series has been added (GH24):
>>> import numpy as np
>>> import pandas as pd
>>> from xlwings import Workbook, Range
>>> wb = Workbook()
>>> s = pd.Series([1.1, 3.3, 5., np.nan, 6., 8.])
>>> s
0 1.1
1 3.3
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
>>> Range('A1').value = s
>>> Range('D1', index=False).value = s
Excel constants have been added under their original Excel name, but categorized under their enum (GH18), e.g.:
# Extra long version
import xlwings as xl
xl.constants.ChartType.xlArea
# Long version
from xlwings import constants
constants.ChartType.xlArea
# Short version
from xlwings import ChartType
ChartType.xlArea
Slightly enhanced Chart support to control the ChartType (GH1):
>>> from xlwings import Workbook, Range, Chart, ChartType
>>> wb = Workbook()
>>> Range('A1').value = [['one', 'two'],[10, 20]]
>>> my_chart = Chart().add(chart_type=ChartType.xlLine,
name='My Chart',
source_data=Range('A1').table)
alternatively, the properties can also be set like this:
>>> my_chart = Chart().add() # To work with an existing Chart: my_chart = Chart('My Chart')
>>> my_chart.name = 'My Chart'
>>> my_chart.chart_type = ChartType.xlLine
>>> my_chart.set_source_data(Range('A1').table)
pytz is no longer a dependency as datetime object are now being read in from Excel as time-zone naive (Excel doesn’t know timezones). Before, datetime objects got the UTC timezone attached.
The Workbook object has the following additional methods: close()
The Range object has the following additional methods: is_cell(), is_column(), is_row(), is_table()
If asarray=True, NumPy arrays are now always at least 1d arrays, even in the case of a single cell (GH14):
>>> Range('A1', asarray=True).value
array([34.])
Similar to NumPy’s logic, 1d Ranges in Excel, i.e. rows or columns, are now being read in as flat lists or 1d arrays. If you want the same behavior as before, you can use the atleast_2d keyword (GH13).
Note
The table property is also delivering a 1d array/list, if the table Range is really a column or row.
>>> Range('A1').vertical.value
[1.0, 2.0, 3.0, 4.0]
>>> Range('A1', atleast_2d=True).vertical.value
[[1.0], [2.0], [3.0], [4.0]]
>>> Range('C1').horizontal.value
[1.0, 2.0, 3.0, 4.0]
>>> Range('C1', atleast_2d=True).horizontal.value
[[1.0, 2.0, 3.0, 4.0]]
>>> Range('A1', asarray=True).table.value
array([ 1., 2., 3., 4.])
>>> Range('A1', asarray=True, atleast_2d=True).table.value
array([[ 1.],
[ 2.],
[ 3.],
[ 4.]])
The single file approach has been dropped. xlwings is now a traditional Python package.
Initial release of xlwings.