旧版表单字段
旧版表单字段
Aspose.Words FOSS for .NET 读取并操作 Word 的旧版(内容控件之前的)表单字段——文本输入、复选框和下拉字段——通过 FormField 类及其在 Aspose.Words.Fields 中的三个专用字段子类。
读取表单字段值
Document.Range.FormFields(一个 FormFieldCollection)提供对范围内所有旧版表单字段的直接访问,无需手动遍历节点树。每个 FormField 公开 Name(用于引用字段的书签式标识符)、Type(一个 FieldType 值,用于标识字段的类型)、Result(当前值)、Enabled,以及通过 HelpText/OwnHelp 和 StatusText/OwnStatus 获取的帮助/状态文本。SetTextInputValue(newValue) 直接为文本输入字段设置新值。通过书签名称(例如 formFields["BookmarkName"])索引 FormFieldCollection 以检索特定字段,Remove(formField) / RemoveAt(index) 可从集合中删除字段。
文本、复选框和下拉字段类型
这三种旧版表单字段类型各自拥有专用的类:FieldFormText(FORMTEXT字段,对应于 FieldType.FieldFormTextInput)用于自由文本输入,FieldFormCheckBox(FORMCHECKBOX字段)用于布尔切换,FieldFormDropDown(FORMDROPDOWN字段)用于选择列表。在底层的 FormField 节点上,TextInputType(一个 TextFormFieldType 值——Regular、Number、Date、CurrentDate、CurrentTime 或 Calculated)和 TextInputFormat 控制文本字段的值如何解释和格式化;MaxLength 限制其输入长度;TextInputDefault 提供默认值。Checked 和 Default 适用于复选框字段,IsCheckBoxExactSize/CheckBoxSize 控制其渲染尺寸。下拉字段在 DropDownItems 中保存其选项列表,这是一个支持 Add、Insert、Remove、Contains 和 IndexOf 的 DropDownItemCollection,另有 DropDownSelectedIndex 用于当前选中的项目。
技巧与最佳实践
- 使用
Document.Range.FormFields而不是手动按类型过滤Document.Range.Fields——它是传统表单字段的直接、类型化入口点。 - 当表单字段的值应在用户离开后立即触发依赖字段重新计算时,设置
CalculateOnExit。 FormField.EntryMacro/ExitMacro引用原始文档中配置的 VBA 宏名称 ——读取它们不会执行任何宏代码。- 在将文本字段的
Result解析为数字或日期之前,检查TextInputType——Regular字段不施加格式约束。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
按书签名称索引 FormFieldCollection 返回空值 | 表单字段的书签名称不匹配,或在搜索范围内不存在该字段 | 在枚举时通过 FormField.Name 确认准确的书签名称 |
设置 Checked 后复选框状态未反映 | 修改后文档未保存 | 在修改后保存文档;Checked将在下次访问时读取 |
下拉列表DropDownSelectedIndex超出范围 | 索引与DropDownItems中的项目不对应 | 在设置之前,请根据DropDownItems.Count验证索引 |
| 文本字段值未应用 | 使用了直接属性赋值,而不是SetTextInputValue | 在FormField上调用SetTextInputValue(newValue) |
FAQ
在 FormField 与 FieldFormText/FieldFormCheckBox/FieldFormDropDown 之间有什么区别?
FormField 是表示任何传统表单字段的通用节点,可通过 Document.Range.FormFields 访问。FieldFormText、FieldFormCheckBox 和 FieldFormDropDown 是针对每种字段类型的特定字段类(派生自 Field),当通过通用的 Field 集合进行操作时使用它们。
如何在文档中获取所有表单字段的值?
枚举 Document.Range.FormFields 并读取每个 FormField 上的 Name/Result。
我可以向下拉式表单字段添加选项吗?
是的 — FormField.DropDownItems 是一个具有 Add(value)、Insert(index, value) 和 Remove(name) 的 DropDownItemCollection。
这些与现代内容控件相同吗?
不是。传统表单字段(FORMTEXT、FORMCHECKBOX、FORMDROPDOWN)早于 Word 的结构化文档标签(内容控件)模型;两者都可以出现在同一文档中。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
Document.Range.FormFields | 直接访问范围内的所有旧版表单字段 |
FormField | 通用旧版表单字段节点:名称、类型、结果、启用状态 |
FormFieldCollection | 由 FormField 对象组成的集合;按书签名称索引,Remove() |
FieldFormText | FORMTEXT 字段类 |
FieldFormCheckBox | FORMCHECKBOX 字段类 |
FieldFormDropDown | FORMDROPDOWN 字段类 |
TextFormFieldType | 文本字段输入格式的枚举 (Regular, Number, Date 等) |
DropDownItemCollection | 可编辑的下拉字段选项列表 |