在批量生成模板、统一版式,或者清理历史文档里的杂乱元素时,Word 文本框往往是最容易被忽略、却最影响结果的一类对象。本文按实际使用顺序整理了 Spire.Doc for Python 处理文本框的常见方法,从创建、定位到删除和提取内容,方便你判断它适合解决哪些文档自动化问题,以及编码时要避开哪些细节坑。
环境准备:先安装 Spire.Doc
本文示例使用的库是 Spire.Doc for Python。它对 Word 文档对象模型封装较完整,尤其提供了对文本框这类不直接属于正文流元素的操作接口。
安装命令如下:
pip install Spire.Doc
在脚本中引入库:
from spire.doc import * from spire.doc.common import *
后文所有代码都基于这两个导入展开。
如何在 Word 文档中添加文本框
添加文本框的基本流程很直接:先创建 Document,再添加 Section 和段落,最后在段落上调用 AppendTextBox()。这个方法接收宽度和高度两个参数,单位是磅,并返回一个 TextBox 对象。

要注意的是,文本框本身只是容器。真正的文字内容,需要通过 textBox.Body 再添加段落后写入。
from spire.doc import *
from spire.doc.common import *
outputFile = "AddTextbox.docx"
# 创建文档并添加节
document = Document()
section = document.AddSection()
paragraph = section.AddParagraph()
# 插入一个宽240磅、高35磅的文本框
textBox = paragraph.AppendTextBox(240, 35)
textBox.Format.HorizontalAlignment = ShapeHorizontalAlignment.Left
textBox.Format.LineColor = Color.get_Gray()
textBox.Format.LineStyle = TextBoxLineStyle.Simple
textBox.Format.FillColor = Color.get_DarkSeaGreen()
# 在文本框中写入内容
para = textBox.Body.AddParagraph()
textRange = para.AppendText("这是一个示例文本框")
textRange.CharacterFormat.FontName = "宋体"
textRange.CharacterFormat.FontSize = 14
textRange.CharacterFormat.TextColor = Color.get_White()
para.Format.HorizontalAlignment = HorizontalAlignment.Center
document.Sa veToFile(outputFile, FileFormat.Docx)
document.Close()
文本框的尺寸、边框和填充怎么设置
AppendTextBox(240, 35) 中的两个参数直接决定文本框尺寸。创建完成后,可以通过 Format 属性继续控制外观:
LineColor:边框颜色LineStyle:边框样式,例如单线、双线、三线FillColor:文本框背景填充色
而文本框内部文字的字体、字号和颜色,仍然沿用普通文本段落的处理方式,通过 TextRange 和 CharacterFormat 设置即可。这意味着文本框虽然是独立对象,但内部文本处理逻辑和普通正文基本一致,上手成本不高。
如何精确设置文本框位置与内边距
默认情况下,文本框会跟随所在段落布局。如果你要做模板化排版,通常还需要把它精确放到页面指定位置,这时要重点关注 Format 里的定位和内边距属性。

from spire.doc import *
from spire.doc.common import *
outputFile = "TextBoxFormat.docx"
# 创建文档
doc = Document()
sec = doc.AddSection()
# 添加文本框并写入内容
tb = sec.AddParagraph().AppendTextBox(310, 90)
para = tb.Body.AddParagraph()
textRange = para.AppendText("通过编程方式设置文本框的位置和样式,可以实现精确的文档排版控制。")
textRange.CharacterFormat.FontName = "Cambria"
textRange.CharacterFormat.FontSize = 13
# 设置精确位置(以页面为基准)
tb.Format.HorizontalOrigin = HorizontalOrigin.Page
tb.Format.HorizontalPosition = 120
tb.Format.VerticalOrigin = VerticalOrigin.Page
tb.Format.VerticalPosition = 100
# 设置边框样式为双线
tb.Format.LineStyle = TextBoxLineStyle.Double
tb.Format.LineColor = Color.get_CornflowerBlue()
tb.Format.LineDashing = LineDashing.Solid
tb.Format.LineWidth = 5
# 设置内边距,让文字有呼吸感
tb.Format.InternalMargin.Top = 15
tb.Format.InternalMargin.Bottom = 10
tb.Format.InternalMargin.Left = 12
tb.Format.InternalMargin.Right = 10
doc.Sa veToFile(outputFile, FileFormat.Docx)
doc.Close()
定位时要看懂“基准点”和“偏移量”
精确定位主要由四个属性配合完成:
HorizontalOrigin:横向参考基准HorizontalPosition:横向偏移量VerticalOrigin:纵向参考基准VerticalPosition:纵向偏移量
例如示例中的 HorizontalOrigin.Page 和 VerticalOrigin.Page,表示以页面边缘为参考系;而 120、100 则是相对这个基准的偏移位置。只要基准点选对,后续调整坐标会更稳定,也更适合做固定版式模板。
内边距和线条样式分别解决什么问题
InternalMargin 控制的是文本框内部文字与边框之间的距离,分别可以设置上、下、左、右四个方向。这个属性在做紧凑排版时很关键,否则文字容易贴边,视觉上会显得拥挤。
另外,边框相关属性还包括:
LineWidth:边框粗细LineDashing:边框线型,如实线、虚线、点线
这些配置通常和定位一起使用,用来同时完成“放在哪”和“看起来像什么”的控制。
如何删除文档中的文本框
如果文档里已经存在文本框,可以通过 Document.TextBoxes 集合统一管理。常见删除方式有两种:按索引删除一个,或直接清空全部。

from spire.doc import * from spire.doc.common import * inputFile = "./Data/TextBoxTemplate.docx" outputFile = "RemoveTextBox.docx" # 加载文档 doc = Document() doc.LoadFromFile(inputFile) # 删除文档中的第一个文本框 doc.TextBoxes.RemoveAt(0) # 如果需要清空所有文本框,用下面这行 # doc.TextBoxes.Clear() doc.Sa veToFile(outputFile, FileFormat.Docx) doc.Close()
删除时要注意集合索引会变化
TextBoxes 是文档级集合,不区分文本框位于哪个节或段落中。调用 RemoveAt(0) 删除的是当前集合里索引为 0 的对象。
这里的关键问题在于:每删除一次,集合索引都会重新排序。因此如果要批量删除指定文本框,遍历时最好从后往前处理;如果目标就是全部移除,直接使用 Clear() 更省事。
如果只删除满足某些条件的文本框,例如内容为空、样式不合规,或者位置超出预期,也可以先遍历 TextBoxes,读取属性后再精确调用 RemoveAt()。
两个更实用的延伸场景
从文本框中提取文字内容
除了增删改,实际项目里也经常要读取文本框中的内容。Spire.Doc 允许遍历文档中的所有文本框,再访问每个文本框内部的段落对象。
document = Document()
document.LoadFromFile("./Data/ExtractTextFromTextBoxes.docx")
if document.TextBoxes.Count > 0:
for i in range(document.TextBoxes.Count):
textbox = document.TextBoxes.get_Item(i)
for j in range(textbox.Body.Paragraphs.Count):
para = textbox.Body.Paragraphs.get_Item(j)
print(para.Text)
这段代码会逐个输出文本框内的段落文字。如果文本框内部还嵌套了表格,就需要进一步遍历对应的子对象,按行、单元格继续提取。
批量生成统一样式的文本框
当一个模板里需要插入几十个样式相同的文本框时,最稳妥的做法不是复制粘贴格式代码,而是把创建和样式设置封装成函数,在循环中反复调用。这样既能减少重复代码,也能保证字体、尺寸、边框和定位规则保持一致,后续维护时也更容易统一修改。
总结:哪些场景最适合用 Python 管理 Word 文本框
如果你的需求涉及批量生成文档、固定模板排版、清理历史文档中的多余元素,或者抽取文本框中的结构化内容,那么用 Python 配合 Spire.Doc 处理 Word 文本框会比较合适。
从 API 设计上看,这套能力主要分成四层:创建文本框、设置外观与位置、按集合删除、遍历读取内容。真正使用时,最值得留意的细节有两个:一是位置控制依赖“基准点 + 偏移量”的组合,二是批量删除时集合索引会动态变化。把这两个点理解清楚,文本框自动化处理基本就能覆盖大多数常见需求。







