Выделение ячеек в таблице жирным шрифтом с помощью python-docx

Фрагмент кода ниже в основном создает таблицу с необходимым количеством строк и столбцов в новом текстовом документе, то есть 2 столбца и 14 строк. Затем он добавляет содержимое в строки и столбцы соответственно.

from docx import Document
newDoc=Document()
newDoc.add_heading ('GIS Request Form')
newDoc.add_paragraph()

#inserting a table and the header and value objects to the table
 table=newDoc.add_table(rows=14,cols=2)
 table.style='Table Grid'
 table.autofit=False
 table.columns[0].width=2500000
 table.columns[1].width=3500000

 #inserting contents into table cells
 for i in range(0,14):
   row=table.rows[i]
   row.cells[0].text=reqdheaderList[i]
   row.cells[1].text=reqdvalueList[i]

Я пытался выделить содержимое всего в столбце 1 жирным шрифтом, но это не работает.

  #inserting contents into table cells
   for i in range(0,14):
     row=table.rows[i]
     row.cells[0].text=reqdheaderList[i]
     row.cells[0].paragraphs[0].add_run(line[0]).bold=True
     row.cells[1].text=reqdvalueList[i]

Помощь?


person tg110    schedule 10.06.2016    source источник


Ответы (3)


Вы можете добиться этого, используя следующий цикл:

bolding_columns = [0]
for row in list(range(14)):
    for column in bolding_columns:
        table.rows[row].cells[column].paragraphs[0].runs[0].font.bold = True
person Nikos Tavoularis    schedule 18.04.2017

Расширение ответа @Nikos Tavoularis; вы также можете добавить вспомогательную функцию. Например.:

from docx import Document

def make_rows_bold(*rows):
    for row in rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                for run in paragraph.runs:
                    run.font.bold = True

doc = Document()

table = doc.add_table(rows=4, cols=2)
table.cell(0, 0).text = "Some text"
table.cell(1, 0).text = "Some bold text"
table.cell(1, 1).text = "Some more bold text"
table.cell(2, 0).text = "Some text"
table.cell(3, 1).text = "And more bold text"

make_rows_bold(table.rows[1], table.rows[3])

doc.save('test.docx')

Написание дополнительных функций, таких как make_rows_bold, может сделать работу с docx более приятной.

person pmav99    schedule 28.05.2019

Вы можете переписать эти две строки

     row.cells[0].text=reqdheaderList[i]
     row.cells[0].paragraphs[0].add_run(line[0]).bold=True

to

     row.cells[0].paragraphs[0].add_run(reqdheaderList[i]).bold=True
person George    schedule 19.05.2020
comment
Можем ли мы также добавить гиперссылку к тексту, выделенному жирным шрифтом? Гиперссылка должна указывать на абзац в документе. - person rain; 01.04.2021