Skip to content

Tablesยค

Example python code for adding tables.

#pylint: disable=C0103
"""Example of using odt.py to create tables."""
try:
    from msl.odt import Document
except ImportError as error:
    raise ImportError("msl-odt module is not installed. "
                      "Please install it first.") from error

doc = Document("example_msl-odt_tables.odt")

# Table data
header_row = ['Name', 'Age', 'Town']
name = ['Alice', 'Bobby', 'Charlise']
age = [30.123, 0.123456, 123]
town = ['Hell', 'Belmont', 'Longyearbyen']

# Note: IDE will give error as doc undefined until runtime
table_data = [header_row] + doc.maketabledata(name, age, town)
# Or alternatively
table_data = doc.maketabledata(name, age, town, header_row=header_row)

doc.addheading1('Adding tables with odt.py')
doc.addtext('This document shows how to add tables using the addtable() '
            'function in odt.py\n'
            'First, open a document. E.g. doc=Document("example_msl-odt_tables.odt")\n'
            'Tables are added with doc.addtable()\n'
            '\nOpen Document tables are written row-by-row. '
            'The helper function maketabledata() can be used to combine '
            'column variables, and an optional header row, into a suitable '
            'format for use with addtable().\n'
            'E.g.: doc.addtable(maketabledata(col1data, col2data, '
            'header_row=["col1label", "col2label"]))\n'
            )

doc.addheading2('Example 1')
doc.addtext('Individual column widths with decimal tab stop on second column')
doc.addtext('doc.addtable(table_data, column_width=[3.5, 4.0, 5],\n'
            '\tdecimal_tab=[None, 0.4, None],\n'
            '\tborder_style="Header row")')
doc.addtable(table_data, column_width=[3.5, 4.0, 5],
             decimal_tab=[None, 0.4, None],
             border_style="Header row")

doc.addtext('Note: decimal tab stop too small, numbers not aligned.\n')

doc.addheading2('Example 2')
doc.addtext('Single column width with decimal tab stop on second column')
doc.addtext('doc.addtable(table_data, column_width=4.5,\n'
            '\tdecimal_tab=[None, 1.1, None],\n'
            '\tborder_style="All")')
doc.addtable(table_data, column_width=4.5,
             decimal_tab=[None, 1.1, None],
             border_style="All")
doc.addtext(f'Note: default cell text padding is {doc.tablecellpadding}.\n')

doc.addheading2('Example3')
doc.addtext('Total table width with no decimal tabs or borders')
doc.addtext('doc.addtable(table_data, table_width=3)')
doc.addtable(table_data, table_width=3)
doc.addtext('Note: column width too small, text wrapped.\n'
            'Further details can be found in odt.py')