You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用python-docx如何单独修改指定表格单元格的左边框格式

python-docx 指定表格单元格左边框修改实现方案

核心逻辑

python-docx 未提供公开的单元格边框操作接口,你可以直接操作单元格底层XML属性节点完成配置,无需额外依赖。

具体实现步骤

  1. 构造左边框的XML配置节点,可自定义边框线型、宽度、颜色参数
  2. 若单元格原有边框配置,先清除旧配置避免冲突
  3. 将新的边框配置追加到目标单元格的属性节点中

代码示例

你可以在原有设置单元格底纹的代码后追加以下内容,即可修改htab_cells[2]的左边框:

# 获取目标单元格的属性节点
tc_pr = htab_cells[2]._tc.get_or_add_tcPr()
# 清除原有边框配置,避免冲突
for existing_border in tc_pr.xpath('./w:tcBorders'):
    tc_pr.remove(existing_border)
# 构造左边框配置:线型为实线、宽度1磅(sz=8,单位1/8磅)、颜色为黑色
border_xml = r'<w:tcBorders {}><w:left w:val="single" w:sz="8" w:color="000000"/></w:tcBorders>'.format(nsdecls('w'))
border_elm = parse_xml(border_xml)
# 追加边框配置到单元格属性
tc_pr.append(border_elm)

参数说明

  • w:val:边框线型,可选值包括single(实线)、dashed(虚线)、dotted(点线)、none(无边框)
  • w:sz:边框宽度,单位为1/8磅,例如设置为16即代表2磅宽
  • w:color:边框颜色,填写十六进制颜色值,无需加#前缀

整合后完整业务代码

def index(request, pk):
    detailmodel100 = DocModelWord.objects.filter(code_docmodel=100)
    company=Company.objects.get(pk=pk)

    document = Document()

    header = document.sections[0].header
    htable=header.add_table(1, 3, Inches(10))
    htab_cells=htable.rows[0].cells
    ht0=htab_cells[0].add_paragraph()
    kh=ht0.add_run()
    kh.add_picture('media/'+str(company.file), width=Inches(2))
    htab_cells[2].add_paragraph(str(company.name)).alignment=WD_ALIGN_PARAGRAPH.LEFT
    htab_cells[2].add_paragraph(str(company.adresse)).alignment=WD_ALIGN_PARAGRAPH.LEFT
    htab_cells[2].add_paragraph(str(company.city)).alignment=WD_ALIGN_PARAGRAPH.LEFT
    # 设置单元格底纹
    shading_elm = parse_xml(r'<w:shd {} w:fill="D9D9D9"/>'.format(nsdecls('w')))
    tc_pr = htab_cells[2]._tc.get_or_add_tcPr()
    tc_pr.append(shading_elm)
    # 设置单元格左边框
    for existing_border in tc_pr.xpath('./w:tcBorders'):
        tc_pr.remove(existing_border)
    border_xml = r'<w:tcBorders {}><w:left w:val="single" w:sz="8" w:color="000000"/></w:tcBorders>'.format(nsdecls('w'))
    border_elm = parse_xml(border_xml)
    tc_pr.append(border_elm)

    response = HttpResponse(content_type='application/vnd.openxmlformats-officedocument.wordprocessingml.document')
    response['Content-Disposition'] = 'attachment; filename='+str(company.name)+'_Lettre.docx'
    document.save(response)

    return response

内容的提问来源于stack exchange,提问作者AZOUARDI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:48:02