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

如何使用Python在自动生成的Word文档中添加下拉列表?

自动化生成Word文档并添加下拉列表的解决方法

下面分几种常用技术栈给出可行的实现方案:

使用python-docx实现

python-docx本身没有直接封装下拉列表的API,但可以通过操作底层OpenXML结构来添加内容控件式下拉列表。

步骤与代码

  1. 先安装依赖:
pip install python-docx
  1. 实现代码:
from docx import Document
from docx.oxml.ns import qn
from docx.oxml import OxmlElement

def add_dropdown(doc, label_text, options):
    # 创建带标签的段落
    para = doc.add_paragraph()
    para.add_run(label_text)
    
    # 构建下拉列表内容控件
    sdt = OxmlElement('w:sdt')
    sdt_pr = OxmlElement('w:sdtPr')
    
    # 添加下拉选项
    dropdown = OxmlElement('w:dropDownList')
    for opt in options:
        list_item = OxmlElement('w:listItem')
        list_item.set(qn('w:value'), opt)
        list_item.set(qn('w:displayText'), opt)
        dropdown.append(list_item)
    
    sdt_pr.append(dropdown)
    sdt_content = OxmlElement('w:sdtContent')
    
    # 设置默认显示文本
    p = OxmlElement('w:p')
    r = OxmlElement('w:r')
    t = OxmlElement('w:t')
    t.text = options[0]
    r.append(t)
    p.append(r)
    sdt_content.append(p)
    
    sdt.append(sdt_pr)
    sdt.append(sdt_content)
    
    # 把控件插入段落
    para._p.append(sdt)

# 测试生成文档
doc = Document()
add_dropdown(doc, "请选择性别:", ["男", "女", "其他"])
doc.save("带下拉列表的Word文档.docx")

使用VBA实现

如果是在Word环境内做自动化,直接用内置的ContentControls对象就能快速添加下拉列表。

示例宏代码

Sub GenerateDocWithDropdown()
    Dim newDoc As Document
    Set newDoc = Documents.Add
    
    ' 添加标签文本
    Dim labelPara As Paragraph
    Set labelPara = newDoc.Paragraphs.Add
    labelPara.Range.Text = "请选择所属部门:"
    
    ' 添加下拉列表控件
    Dim ddControl As ContentControl
    Set ddControl = newDoc.ContentControls.Add(wdContentControlDropdownList, labelPara.Range.Next)
    
    ' 填充下拉选项
    With ddControl
        .DropdownListEntries.Add "技术部"
        .DropdownListEntries.Add "市场部"
        .DropdownListEntries.Add "人事部"
        .PlaceholderText = "请选择一个部门"
        .Title = "部门选择"
    End With
    
    newDoc.SaveAs "VBA生成的下拉文档.docx"
End Sub

使用OpenXML SDK(C#)

针对.NET开发场景,直接操作OpenXML结构实现下拉列表,适合服务器端或桌面程序自动化。

示例代码

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace WordDropdownGenerator
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var doc = WordprocessingDocument.Create("OpenXML下拉文档.docx", WordprocessingDocumentType.Document))
            {
                var mainPart = doc.AddMainDocumentPart();
                mainPart.Document = new Document();
                var body = mainPart.Document.AppendChild(new Body());
                
                // 添加标签段落
                var labelPara = body.AppendChild(new Paragraph());
                var labelRun = labelPara.AppendChild(new Run());
                labelRun.AppendChild(new Text("请选择职级:"));
                
                // 创建下拉列表控件
                var sdt = new SdtElement();
                var sdtPr = new SdtProperties();
                
                var dropdown = new DropdownList();
                dropdown.Append(new ListItem { Value = "实习生", DisplayText = "实习生" });
                dropdown.Append(new ListItem { Value = "初级工程师", DisplayText = "初级工程师" });
                dropdown.Append(new ListItem { Value = "高级工程师", DisplayText = "高级工程师" });
                
                sdtPr.Append(dropdown);
                sdt.Append(sdtPr);
                
                // 设置控件默认内容
                var sdtContent = new SdtContent();
                var sdtPara = new Paragraph();
                var sdtRun = new Run();
                sdtRun.Append(new Text("实习生"));
                sdtPara.Append(sdtRun);
                sdtContent.Append(sdtPara);
                
                sdt.Append(sdtContent);
                body.Append(sdt);
                
                mainPart.Document.Save();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:52:40