使用Python创建带边框样式的Word表格的代码实现

Written by

in

文章目录
  • 在生成Word文档时,表格的边框样式是提升专业度的重要细节。本文将通过一个实例,展示如何使用python-docx库为表格添加上下边框加粗和内部边框隐藏的复杂样式。代码将实现以下效果: 表格位于页面底部 表格首行和末行的上下边框加粗 隐藏内部水平线
  • 边框逻辑: insideH控制行间水平线 通过设置color为白色可隐藏内部线 加粗效果通过增大sz值实现 版本兼容性: 推荐使用python-docx==0.8.10版本 高版本可能需要调整导入路径: from docx.oxml.shared import OxmlElement # 0.8.11+版本 表格定位技巧: 通过增大space_after段落间距实现 更精确的底部对齐需要使用分节符设置页边距(参考本文开头的代码)
  • # 完整代码见本文开头的代码示例 # 保存后运行:python your_script.py
  • 目录
    • 引言
    • 实现步骤
      • 1. 安装依赖库
      • 2. 核心代码解析
        • 2.1 定义边框设置函数
        • 2.2 创建表格并设置样式
        • 2.3 控制表格位置
    • 效果展示
      • 生成的表格样式
      • 注意事项
        • 完整代码
          • 扩展阅读

          在生成Word文档时,表格的边框样式是提升专业度的重要细节。本文将通过一个实例,展示如何使用python-docx库为表格添加上下边框加粗内部边框隐藏的复杂样式。代码将实现以下效果:

          • 表格位于页面底部
          • 表格首行和末行的上下边框加粗
          • 隐藏内部水平线

          确保已安装python-docx库:

          pip install python-docx==0.8.10  # 建议使用兼容版本
          

          from docx.oxml import OxmlElement
          from docx.oxml.ns import qn
          
          def set_cell_border(cell, **kwargs):
              tc = cell._tc
              tcPr = tc.get_or_add_tcPr()
              tcBorders = tcPr.first_child_found_in("w:tcBorders")
              
              if tcBorders is None:
                  tcBorders = OxmlElement('w:tcBorders')
                  tcPr.append(tcBorders)
          
              for edge in ('start', 'top', 'end', 'bottom', 'insideH', 'insideV'):
                  edge_data = kwargs.get(edge)
                  if edge_data:
                      tag = f'w:{edge}'
                      element = tcBorders.find(qn(tag))
                      if element is None:
                          element = OxmlElement(tag)
                          tcBorders.append(element)
                      
                      for key in ["sz", "val", "color", "space", "shadow"]:
                          if key in edge_data:
                              element.set(qn(f'w:{key}'), str(edge_data[key]))
          

          功能说明

          • 通过OxmlElement操作Word底层XML
          • 支持设置top/bottom等6个方向的边框
          • 参数含义:
            • sz:线宽(单位:磅)
            • val:边框类型(single实线/none无边框)
            • color:十六进制颜色值

          doc = Document()
          
          # 创建3行1列的表格
          table = doc.add_table(rows=3, cols=1)
          table_rows = table.rows
          
          # 设置各单元格样式
          for row_id, row in enumerate(table.rows):
              if row_id == 0:  # 首行
                  for cell in row.cells:
                      set_cell_border(
                          cell,
                          top={"sz": 16, "val": "single", "color": "#000000"},  # 上边框加粗
                          bottom={"sz": 12, "val": "none"},  # 底边无边框
                          insideH={"sz": 12, "val": "single", "color": "#FFFFFF"}  # 隐藏内部线
                      )
              elif row_id == 1:  # 中间行
                  for cell in row.cells:
                      set_cell_border(
                          cell,
                          top={"sz": 12, "val": "none"}, 
                          bottom={"sz": 12, "val": "single"},
                          insideH={"sz": 12, "val": "single", "color": "#FFFFFF"}
                      )
              else:  # 末行
                  for cell in row.cells:
                      set_cell_border(
                          cell,
                          top={"sz": 12, "val": "none"}, 
                          bottom={"sz": 16, "val": "single", "color": "#000000"},  # 下边框加粗
                          insideH={"sz": 12, "val": "single", "color": "#FFFFFF"}
                      )
          

          # 通过段落间距将表格推至页面底部
          p = doc.add_paragraph()
          run = p.add_run('')
          p.paragraph_format.space_after = Pt(500)  # 调整间距值
          

          内容 样式说明
          第一行 上边框16磅加粗,下边框透明
          中间行 上下边框12磅实线,内部线隐藏
          最后一行 下边框16磅加粗

          1. 边框逻辑

            • insideH控制行间水平线
            • 通过设置color为白色可隐藏内部线
            • 加粗效果通过增大sz值实现
          2. 版本兼容性

            • 推荐使用python-docx==0.8.10版本
            • 高版本可能需要调整导入路径:
          from docx.oxml.shared import OxmlElement  # 0.8.11+版本
          
          • 表格定位技巧

            • 通过增大space_after段落间距实现
            • 更精确的底部对齐需要使用分节符设置页边距(参考本文开头的代码)

          # 完整代码见本文开头的代码示例
          # 保存后运行:python your_script.py
          

          • python-docx官方文档
          • Word XML格式参考

          通过本文的实现,您可以快速掌握:

          • Word表格的底层XML操作技巧
          • 复杂边框样式的程序化实现
          • 文档元素的布局控制方法

          这篇文章将代码功能、实现原理和注意事项结合,适合Python开发者快速上手表格样式设置。如需进一步优化,可以添加:

          • 文档分节符实现精确底部对齐
          • 图片印章的添加方法
          • 页眉页脚的完整实现

          希望本文能帮助您提升Python文档处理能力!

          from docx import Document
          from docx.shared import Pt
          from docx.oxml import OxmlElement
          from docx.oxml.ns import qn
          
          
          def set_cell_border(cell, **kwargs):
              tc = cell._tc
              tcPr = tc.get_or_add_tcPr()
          
              tcBorders = tcPr.first_child_found_in("w:tcBorders")
              if tcBorders is None:
                  tcBorders = OxmlElement('w:tcBorders')
                  tcPr.append(tcBorders)
          
              for edge in ('start', 'top', 'end', 'bottom', 'insideH', 'insideV'):
                  edge_data = kwargs.get(edge)
                  if edge_data:
                      tag = 'w:{}'.format(edge)
                      element = tcBorders.find(qn(tag))
                      if element is None:
                          element = OxmlElement(tag)
                          tcBorders.append(element)
          
                      for key in ["sz", "val", "color", "space", "shadow"]:
                          if key in edge_data:
                              element.set(qn('w:{}'.format(key)), str(edge_data[key]))
          
          
          doc = Document()
          
          # 添加一些文本作为占位符
          p = doc.add_paragraph()
          run = p.add_run('')
          run.font.size = Pt(12)
          
          # 增加段落后间距,以尝试将接下来的表格推向页面底部
          p.paragraph_format.space_after = Pt(500)  # 调整此值以适应不同的页面大小和内容量
          
          # 创建并添加表格
          table = doc.add_table(rows=3, cols=1)
          hdr_cells = table.rows[0].cells
          hdr_cells[0].text = '送:区。'
          hdr_cells = table.rows[1].cells
          hdr_cells[0].text = '发:。'
          hdr_cells = table.rows[2].cells
          hdr_cells[0].text = '发'
          
          # 设置每个单元格的边框
          for row_id, row in enumerate(table.rows):
              if row_id == 0:
          
                  for cell in row.cells:
                      set_cell_border(
                          cell,
                          top={"sz": 16, "val": "single", "color": "#000000"},  # 黑色实线上边框
                          bottom={"sz": 12, "val": "none", },  # 黑色实线下边框
                          start={"sz": 0, "val": "none"},  # 左边框无边框
                          end={"sz": 0, "val": "none"},  # 右边框无边框
                          insideH={"sz": 12, "val": "single", "color": "#FFFFFF"},  # 内部水平线颜色设为白色(或选择其他颜色以匹配背景)
                      )
              elif row_id == 1:
                  for cell in row.cells:
                      set_cell_border(
                          cell,
                          top={"sz": 12, "val": "none", },  # 黑色实线上边框
                          bottom={"sz": 12, "val": "single", "color": "#000000"},  # 黑色实线下边框
                          start={"sz": 0, "val": "none"},  # 左边框无边框
                          end={"sz": 0, "val": "none"},  # 右边框无边框
                          insideH={"sz": 12, "val": "single", "color": "#FFFFFF"},  # 内部水平线颜色设为白色(或选择其他颜色以匹配背景)
                      )
              else:
                  for cell in row.cells:
                      set_cell_border(
                          cell,
                          top={"sz": 12, "val": "none"},  # 黑色实线上边框
                          bottom={"sz": 16, "val": "single", "color": "#000000"},  # 黑色实线下边框
                          start={"sz": 0, "val": "none"},  # 左边框无边框
                          end={"sz": 0, "val": "none"},  # 右边框无边框
                          insideH={"sz": 12, "val": "single", "color": "#FFFFFF"},  # 内部水平线颜色设为白色(或选择其他颜色以匹配背景)
                      )
          
          doc.save('11.docx')
          
          

          以上就是使用Python创建带边框样式的Word表格的代码实现的详细内容,更多关于Python创建带边框Word表格的资料请关注风君子博客其它相关文章!

          您可能感兴趣的文章:

          • Python实现快速提取Word表格并转Markdown
          • Python实现快速提取Word表格并写入Excel
          • 使用Python删除Word中表格的方法
          • python docx如何修改word表格内容
          • 使用python将CSV和Excel表格数据导入到Word表格

          站内搜索