我可以使用段落对象在表格单元格中选择字体大小、颜色、粗体等。但是,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 = None
,para.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()
时,我们正在已经(秘密(存在的段落中添加一个额外的段落,从而产生了这个领先的换行符问题。