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

如何用C#判断Word.docx中CheckBoxSymbolType类型复选框是否勾选?

判断Word文档中复选框的勾选状态

你当前的代码只获取了复选框的符号样式(CheckBoxSymbolType),这和复选框的勾选状态是分离的。要判断勾选状态,需要找到对应的复选框表单域元素,并检查它的状态属性。

解决方案代码示例

针对Word中的传统表单域复选框,你可以通过遍历CheckBox元素来获取状态:

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

// 打开文档,使用using自动释放资源
using (WordprocessingDocument documentFormA = WordprocessingDocument.Open(formALocation, true))
{
    // 获取所有复选框表单域
    var checkBoxes = documentFormA.MainDocumentPart.Document.Body.Descendants<CheckBox>();
    
    foreach (var checkBox in checkBoxes)
    {
        // 获取复选框的名称(用于区分不同复选框,可选)
        var formField = checkBox.Parent?.Parent as FormField;
        string boxName = formField?.Name?.Value ?? "未命名复选框";
        
        // 读取勾选状态:Checked属性为true则表示已勾选
        bool isChecked = checkBox.Checked?.Value == true;
        
        // 输出结果,可根据需求替换为业务逻辑
        Console.WriteLine($"复选框「{boxName}」:{(isChecked ? "已勾选" : "未勾选")}");
    }
}

补充:内容控件类型复选框的处理

如果是Word中插入的内容控件复选框(而非传统表单域),需要遍历SdtElement来获取状态:

var contentCheckBoxes = documentFormA.MainDocumentPart.Document.Body.Descendants<SdtElement>()
    .Where(sdt => sdt.SdtProperties?.Descendants<CheckBox>() != null);

foreach (var sdt in contentCheckBoxes)
{
    var checkBoxProp = sdt.SdtProperties.Descendants<CheckBox>().FirstOrDefault();
    bool isChecked = checkBoxProp?.Checked?.Value == true;
    string boxTitle = sdt.SdtProperties.Descendants<SdtAlias>().FirstOrDefault()?.Val?.Value ?? "未命名内容控件复选框";
    
    Console.WriteLine($"内容控件复选框「{boxTitle}」:{(isChecked ? "已勾选" : "未勾选")}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:24:46