如何阻止对内容控件的访问 - 打开 xml
How to block access to content controls - open xml
我正在通过标签从 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)
}
您可以在 SdtProperties
元素中插入 Lock
(<w:lock>
) 元素 - 这将使内容变为只读。例如,这定义了一个包含文本 'hello' 的纯文本内容控件,在 Word 中编辑文档时显示为只读:
<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 很有用。
我正在通过标签从 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)
}
您可以在 SdtProperties
元素中插入 Lock
(<w:lock>
) 元素 - 这将使内容变为只读。例如,这定义了一个包含文本 'hello' 的纯文本内容控件,在 Word 中编辑文档时显示为只读:
<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 很有用。