Как заполнить значение формы в текстовом документе, используя openxml? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть текстовый документ, как на следующем скриншоте 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);
            }
        }
    }
}

но как я могу на самом деле установить значение? Кажется, что есть как минимум три места, где он находится. Есть ли у элементов управления специальные типы, из StdElement, с методами, которые фактически работают с ними?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...