Checkbox 使用OpenXML以编程方式将复选框内容控件添加到Word文档
是否有一种简单/直接的方法可以在.docx文档体中动态添加多个复选框控件(而不是编辑其值) 我尝试在这样一个新段落后添加一个SdtContentCheckBox,但没有成功:Checkbox 使用OpenXML以编程方式将复选框内容控件添加到Word文档,checkbox,ms-word,openxml,dynamic-content,Checkbox,Ms Word,Openxml,Dynamic Content,是否有一种简单/直接的方法可以在.docx文档体中动态添加多个复选框控件(而不是编辑其值) 我尝试在这样一个新段落后添加一个SdtContentCheckBox,但没有成功: newParagraph.Append(new SdtContentCheckBox()); 并遵循以下说明: 在这里: 第一个只演示了如何添加文本内容控件,第二个直接导致.docx文件损坏 任何帮助都将不胜感激 我能找到的最接近的工作代码是: 使用此功能,我可以动态添加传统复选框(即既不是内容控件也不是ActiveX
newParagraph.Append(new SdtContentCheckBox());
并遵循以下说明:
在这里:
第一个只演示了如何添加文本内容控件,第二个直接导致.docx文件损坏
任何帮助都将不胜感激 我能找到的最接近的工作代码是: 使用此功能,我可以动态添加传统复选框(即既不是内容控件也不是ActiveX控件),但至少这是一个开始
如果有人知道如何添加复选框内容控件,请随时在下面发布回复,我会将其标记为正确。即使您自己找到了答案,我也会将此保留在这里,以防任何人在寻找相关内容时偶然发现 有一个名为OpenXMLSDK2.5Productivity tool的工具,您可以从中下载它,它允许您对word.docx文档进行反向工程,以获得从头开始生成的C#代码 为了获得生成任何类型的word元素(复选框、表格、项目符号列表…)所需的代码,您需要使用所述元素创建word文档并保存它 然后,使用OpenXMLSDK2.5生产力工具打开它,并单击“反射代码”按钮。生成的代码将向您展示如何创建包含的元素、样式和其他格式 有了这些,我得到了获得带有复选框的段落所需的代码
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
public static Paragraph GenerateCheckboxParagraph(string internalName, int internalId, string textAfterTextbox)
{
var run1 = new Run(
new FieldChar(
new FormFieldData(
new FormFieldName() { Val = internalName },
new Enabled(),
new CalculateOnExit() { Val = OnOffValue.FromBoolean(false) },
new CheckBox(
new AutomaticallySizeFormField(),
new DefaultCheckBoxFormFieldState() { Val = OnOffValue.FromBoolean(false) }))
)
{
FieldCharType = FieldCharValues.Begin
}
);
var run2 = new Run(new FieldCode(" FORMCHECKBOX ") { Space = SpaceProcessingModeValues.Preserve });
var run3 = new Run(new FieldChar() { FieldCharType = FieldCharValues.End });
var run4 = new Run(new Text(textAfterTextbox));
var element =
new Paragraph(
run1,
new BookmarkStart() { Name = internalName, Id = new StringValue(internalId.ToString()) },
run2,
run3,
new BookmarkEnd() { Id = new StringValue(internalId.ToString()) },
run4
);
return element;
}
来吧,伙计们,我真不敢相信从来没有人想通过编程方式添加可点击的复选框!
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
public static Paragraph GenerateCheckboxParagraph(string internalName, int internalId, string textAfterTextbox)
{
var run1 = new Run(
new FieldChar(
new FormFieldData(
new FormFieldName() { Val = internalName },
new Enabled(),
new CalculateOnExit() { Val = OnOffValue.FromBoolean(false) },
new CheckBox(
new AutomaticallySizeFormField(),
new DefaultCheckBoxFormFieldState() { Val = OnOffValue.FromBoolean(false) }))
)
{
FieldCharType = FieldCharValues.Begin
}
);
var run2 = new Run(new FieldCode(" FORMCHECKBOX ") { Space = SpaceProcessingModeValues.Preserve });
var run3 = new Run(new FieldChar() { FieldCharType = FieldCharValues.End });
var run4 = new Run(new Text(textAfterTextbox));
var element =
new Paragraph(
run1,
new BookmarkStart() { Name = internalName, Id = new StringValue(internalId.ToString()) },
run2,
run3,
new BookmarkEnd() { Id = new StringValue(internalId.ToString()) },
run4
);
return element;
}