1

我正在通过其标签从 docx 读取内容控件。我想阻止访问它(用户将无法编辑内容)。我怎样才能做到这一点?这是我从 docx 文档中通过其标签名称获取控制权的代码:

using (WordprocessingDocument wordDocTarget = WordprocessingDocument.Open(targetFilePath, true))
{
      MainDocumentPart mainPartSource = wordDocSource.MainDocumentPart;
      SdtBlock sdtBlock = mainPartSource.Document.Body.Descendants<SdtBlock>().Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == "myTagName").SingleOrDefault();

      // rest of my code (editing inner text) 
}
4

1 回答 1

3

您可以在 -element 中插入Lock( <w:lock>)SdtProperties元素 - 这将使内容只读。例如,这定义了一个纯文本内容控件,其中包含在 Word 中编辑文档时显示为只读的文本“hello”:

<w:document>
    <w:body>
        <w:sdt>
            <w:sdtPr>
                <w:lock w:val="contentLocked" />
                <w:text />
            </w:sdtPr>
            <w:sdtContent>
                <w:p>
                    <w:r>
                        <w:t>hello</w:t>
                    </w:r>
                </w:p>
            </w:sdtContent>
        </w:sdt>
  ...
  </w:body>
</w:document>

在代码中,您可以使用这样的东西来添加锁:

using (var document = WordprocessingDocument.Open(@"c:\temp\test.docx", true))
{
    SdtBlock sdtBlock = 
        document
        .MainDocumentPart
        .Document
        .Body
        .Descendants<SdtBlock>()
        .Where(b => b.SdtProperties.GetFirstChild<Tag>().Val == "myTagName")
        .SingleOrDefault();

    var contentLock = new Lock { Val = LockingValues.SdtContentLocked };
    sdtBlock.SdtProperties.AppendChild(contentLock);
}

我发现从 Word 文档开始,然后使用 OpenXML Productivity Tool 查看 Word 生成的 xml 很有用。

于 2017-03-12T08:26:55.980 回答