docx center text in table cells

Well, it seems that adding a paragraph works, but (oh, really?) it addes a new paragraph -- so in my case it wasn't an option. You could change the value of the existing cell and then change paragraph's alignment:

row[0].text = "hey, beauty"
p = row[0].paragraphs[0]
p.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER

Actually, in the top answer this first "docx.enum.text" was missing :)


There is a code to do this by setting the alignment as you create cells.

doc=Document()
table = doc.add_table(rows=0, columns=2)
row=table.add_row().cells
p=row[0].add_paragraph('left justified text')
p.alignment=WD_ALIGN_PARAGRAPH.LEFT
p=row[1].add_paragraph('right justified text')
p.alignment=WD_ALIGN_PARAGRAPH.RIGHT

code by: bnlawrence

and to align text to the center just change:

p.alignment=WD_ALIGN_PARAGRAPH.CENTER

solution found here: Modify the alignment of cells in a table


The most reliable way that I have found for setting he alignment of a table cell (or really any text property) is through styles. Define a style for center-aligned text in your document stub, either programatically or through the Word UI. Then it just becomes a matter of applying the style to your text.

If you create the cell by setting its text property, you can just do

for col in table.columns:
    for cell in col.cells:
        cell.paragraphs[0].style = 'My Center Aligned Style'

If you have more advanced contents, you will have to add another loop to your function:

for col in table.columns:
    for cell in col.cells:
        for par in cell.paragraphs:
            par.style = 'My Center Aligned Style'

You can easily stick this code into a function that will accept a table object and a style name, and format the whole thing.