![](/img/trans.png)
[英]How to use UserForm CheckBox to change Control Content CheckBox in Word Document?
[英]Programmatically add Checkbox Content Controls to Word document using OpenXML
是否有一種簡單/直接的方法可以在 .docx 文檔正文中動態添加(而不是編輯其值)多個復選框控件?
我嘗試在像這樣的新段落之后附加一個SdtContentCheckBox但沒有運氣:
newParagraph.Append(new SdtContentCheckBox());
並按照此處的說明進行操作: https : //www.codeproject.com/Tips/370758/Add-dynamic-content-controls-to-a-word-document和此處: How do I create a check box in C# using Open開發工具包
第一個只展示了如何添加文本內容控件,第二個直接導致 .docx 文件損壞。
任何幫助將不勝感激!
我能找到的最接近的工作代碼是這樣的:
public static Paragraph GenerateParagraph()
{
var element =
new Paragraph(
new Run(
new FieldChar(
new FormFieldData(
new FormFieldName(){ Val = "Check1" },
new Enabled(),
new CalculateOnExit(){ Val = BooleanValues.Zero },
new CheckBox(
new AutomaticallySizeFormField(),
new DefaultCheckboxFormFieldState(){ Val = BooleanValues.Zero }))
){ FieldCharType = FieldCharValues.Begin }),
new BookmarkStart(){ Name = "Check1", Id = 0 },
new Run(
new FieldCode(" FORMCHECKBOX "){ Space = "preserve" }),
new Run(
new FieldChar(){ FieldCharType = FieldCharValues.End }),
new BookmarkEnd(){ Id = 0 },
new Run(
new Text("My check box"))
){ RsidParagraphAddition = "00784880", RsidRunAdditionDefault = "00B77989" };
return element;
}
使用它我能夠動態添加舊復選框(即既不是內容控件也不是 ActiveX 控件),但至少它是一個開始!
如果有人知道如何添加復選框內容控件,請隨時在下面發表回復,我會將其標記為正確。
即使你自己找到了答案,我還是把它留在這里,以防有人偶然發現這個尋找相關的東西。
有一個名為 Open XML SDK 2.5 Productivity Tool 的工具,您可以從 這里下載,它允許您對 word .docx 文檔進行逆向工程,以獲取 C# 代碼以從頭開始生成它。
為了獲得您正在尋找的代碼以生成任何類型的單詞元素(復選框、表格、項目符號列表...),您需要使用所述元素創建一個單詞文檔並保存它。
然后,使用 Open XML SDK 2.5 Productivity Tool 打開它並單擊“Reflect Code”按鈕。 生成的代碼將向您展示如何創建這些元素、樣式和其他格式。
有了這個,我得到了獲取帶有復選框的段落所需的代碼
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.