如何使用openxml在Word文档中填写表格值?

时间:2019-05-10 14:32:40

标签: ms-office openxml-sdk

我有一个Word文档,如以下屏幕截图所示 enter image description here

例如,日期控件如下所示:

  <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强制转换为特殊类型的方法,以及可以实际使用它们的方法?

0 个答案:

没有答案