例如,日期控件如下所示:
<w:sdt>
<w:sdtPr>
<w:rPr>
<w:lang w:val="en-GB"/>
</w:rPr>
<w:alias w:val="MyDateControl"/>
<w:tag w:val="MyDateControl"/>
<w:id w:val="1988737388"/>
<w:placeholder>
<w:docPart w:val="B1C8EC07E88D4A37A49123DF17D1B057"/>
</w:placeholder>
<w:date w:fullDate="2019-05-30T00:00:00Z">
<w:dateFormat w:val="dd.MM.yyyy"/>
<w:lid w:val="de-DE"/>
<w:storeMappedDataAs w:val="dateTime"/>
<w:calendar w:val="gregorian"/>
</w:date>
</w:sdtPr>
<w:sdtEndPr/>
<w:sdtContent>
<w:tc>
<w:tcPr>
<w:tcW w:w="4531" w:type="dxa"/>
</w:tcPr>
<w:p w14:paraId="775DBDA1" w14:textId="5D9C5A3B" w:rsidR="00F9702E" w:rsidRDefault="00BB356A">
<w:pPr>
<w:rPr>
<w:lang w:val="en-GB"/>
</w:rPr>
</w:pPr>
<w:r>
<w:t>30.05.2019</w:t>
</w:r>
</w:p>
</w:tc>
</w:sdtContent>
</w:sdt>
现在,我可以打开文档并得到一个看起来像它的元素:
using System;
using System.Linq;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
namespace OpenXmlGames
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
using (WordprocessingDocument doc = WordprocessingDocument.Open("DemoWordDoc.docx", true))
{
var dateControl = doc.MainDocumentPart.Document
.Descendants<SdtElement>()
.Single(r => r.SdtProperties.GetFirstChild<Tag>().Val == "MyDateControl");
Console.WriteLine(dateControl.InnerXml);
}
}
}
}
但是如何实际设置值?似乎至少有3个地方。控件是否具有从StdElement强制转换为特殊类型的方法,以及可以实际使用它们的方法?