Python docx add_paragraph() 插入前导换行符



我可以使用段落对象在表格单元格中选择字体大小、颜色、粗体等。但是,add_paragraph()似乎总是在单元格中插入前导,这会弄乱某些表格的格式。

如果我只使用 cell.text('') 方法,它不会插入这个换行符,但我无法控制文本属性。

有没有办法消除这个前导换行符?

这是我的函数:

def add_table_cell(table, row, col, text, fontSize=8, r=0, g=0, b=0, width=-1):
    cell = table.cell(row,col)
    if (width!=-1):
    cell.width = Inches(width)
    para = cell.add_paragraph(style=None)
    para.alignment = WD_ALIGN_PARAGRAPH.LEFT
    run = para.add_run(text)
    run.bold = False
    run.font.size = Pt(fontSize)
    run.font.color.type == MSO_COLOR_TYPE.RGB
    run.font.color.rgb = RGBColor(r, g, b)

我尝试了以下内容,它对我有用。不确定是否是最佳方法:

cells[0].text = 'Some text' #Write the text to the cell

#Modify the paragraph alignment, first paragraph cells[0].paragraphs[0].paragraph_format.alignment=WD_ALIGN_PARAGRAPH.CENTER

我找到的解决方案是使用 text 属性而不是 add_paragraph((,而不是使用 add_run((:

row_cells[0].text = ''
row_cells[0].paragraphs[0].add_run('Total').bold = True
row_cells[0].paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.RIGHT

我已经浏览了单元格的文档,这不是 add_paragraph(( 的问题。问题是当你有一个单元格时,默认情况下,它里面会有一个段落。

类docx.table._Cell:

段落:。。。默认情况下,新单元格包含单个段落。只读

因此,如果要在单元格的第一行中添加段落,则应首先删除默认段落。由于 python-docx 没有 paragraph.delete((,你可以使用这个 github 问题中提到的函数:feature: Paragraph.delete((

def delete_paragraph(paragraph):
    p = paragraph._element
    p.getparent().remove(p)
    p._p = p._element = None

因此,您应该执行以下操作:

cell = table.cell(0,0)
paragraph = cell.paragraphs[0]
delete_paragraph(paragraph)
paragraph = cell.add_paragraph('text you want to add', style='style you want')
<小时 />

更新 10/8/2022
抱歉,上述方法有点没有必要。编辑默认段落而不是先删除它并重新添加它非常直观。对于函数add_table_cell,只需替换para = cell.paragraphs[0]para.style = Nonepara.style = None不是必需的,因为它应该是新段落的默认值。

这是对我有用的东西。我不叫add_paragraph((。我只是用这个调用引用第一段 -> para = cell.paragraphs[0]。 之后的其他一切都是通常的 api 调用。

table = doc.add_table( rows=1, cols=3 )   #   bar codes
for tableRow in table.rows:
    for cell in tableRow.cells:
        para = cell.paragraphs[0]
        run = para.add_run( "*" + specIDStr + "*" )
        font = run.font
        font.name = 'Free 3 of 9'
        font.size = Pt( 20 )
        run = para.add_run( "n" + specIDStr 
            + "n" + firstName + " " + lastName
            + "tDOB: " + dob )
        font = run.font
        font.name = 'Arial'
        font.size = Pt( 8 )
下面是

从创建text_frame开始的示例解决方案:

cell_tf = cell_box.text_frame
cell_paragraph = cell_tf.paragraphs[0] # instead of cell_tf.add_paragraph()

add_paragraph()插入一个新段落(换行符(。但不直观的是,新的text_frame对象预先构建了一个段落(paragraph[0](。当我们调用 add_paragraph() 时,我们正在已经(秘密(存在的段落中添加一个额外的段落,从而产生了这个领先的换行符问题。

相关内容

  • 没有找到相关文章

最新更新