Skip to content
Advertisement

Specify border appearance in tables using python-docx

I am going through the tutorial and documentation of python-docx.

However, I can’t find any reference to how I can specify and manipulate the border appearance of a table created in a Microsoft Word document.

When i use the following code:

from docx import Document
from docx.shared import Inches

document = Document()

################################
################################
################################

table = document.add_table(rows=1, cols=3)
hdr_cells = table.rows[0].cells
hdr_cells[0].text = 'Qty'
hdr_cells[1].text = 'Id'
hdr_cells[2].text = 'Desc'

row_cells = table.add_row().cells
row_cells[0].text = 'Str0'
row_cells[1].text = 'Str1'
row_cells[2].text = 'Str2'

row2_cells = table.add_row().cells
row2_cells[0].text = 'Str00'
row2_cells[1].text = 'Str11'
row2_cells[2].text = 'Str22'

################################
################################
################################

document.save('demo.docx')

The resulting docx file shows the 3x3 table with header. Currently there is no black border (inner or outer) on this table.

How can I specify an upper and lower border around the header, a lower border to wrap around the table, as well as an inner vertical border?

For example:

enter image descpiption here

Advertisement

Answer

Unfortunately, there is no way to directly manipulate table borders from within python-docx. You basically need to use a style, which specifies these. The style must already exist in Word.

In order to generate a table style to your liking, you need to manually create a new empty document in Word, customize one of the existing table styles there (e.g. Colorful Shading), and add a table using this modified style. Next, you delete this table and save the file (say example.docx) on your disk. This is necessary for the modified style to be saved in the document.

All you have to do then is load the file using python-docx and add a new table, which will reference the (modified) table style:

document = Document('example.docx')
table = document.add_table(rows=1, cols=3)
table.style = 'ColorfulShading'

See also Understanding styles in the documentation for details on how styles in Word work.

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement