C# 有没有办法用openxml制作只读段落?

C# 有没有办法用openxml制作只读段落?,c#,ms-word,openxml-sdk,C#,Ms Word,Openxml Sdk,我正在使用OpenXML和C生成word文档。我希望阻止(只读)文本中的段落,以便用户在编辑时无法删除该段落 我做了一些不成功的测试,使整个文档成为只读的,但这不是我想要的 var file = $"{directory}\\{fileName}.docx"; using (WordprocessingDocument package = WordprocessingDocument.Create(file, WordprocessingDocumentType.Document)) {

我正在使用OpenXML和C生成word文档。我希望阻止(只读)文本中的段落,以便用户在编辑时无法删除该段落

我做了一些不成功的测试,使整个文档成为只读的,但这不是我想要的

var file = $"{directory}\\{fileName}.docx";
using (WordprocessingDocument package =
    WordprocessingDocument.Create(file, WordprocessingDocumentType.Document))
{
    package.AddMainDocumentPart();

    var documentProtection = new DocumentProtection();
    documentProtection.Edit = DocumentProtectionValues.ReadOnly;

    package.MainDocumentPart.AddNewPart<DocumentSettingsPart>();
    package.MainDocumentPart.DocumentSettingsPart.Settings = new Settings();

    package.MainDocumentPart.DocumentSettingsPart.Settings.AppendChild(documentProtection);
    package.MainDocumentPart.DocumentSettingsPart.Settings.Save();

    package.MainDocumentPart.Document = new Document(DocBody);
    package.MainDocumentPart.Document.Save();

    Process.Start(file);
}
谢谢大家!

实用(但不是100%安全)的解决方案是将受保护的段落包装在锁定的富文本内容控件中,即
SdtBlock
的实例,该实例配置为用户无法编辑或删除内容控件及其内容

下面是一些示例标记,它显示了一个锁定的内容控件,其中一个段落以这种方式受到保护,另一个段落位于该内容控件之外


这是一个受保护的段落。
这是另一个未受保护的段落。
注意
w:lock
元素,它由openxmlsdk中的
lock
类表示

创建上述
w:sdt
元素所需的C代码如下:

var-sdt=
新SdtBlock(
新SdtProperties(
新锁{Val=LockingValues.SdtContentLocked}),
新SdtContentBlock(
新段落(
新运行(
新案文(“这是一个受保护的段落。”);
实用(但不是100%安全)的解决方案是将受保护的段落包装在锁定的富文本内容控件中,即
SdtBlock
的实例,该实例配置为用户无法编辑或删除内容控件及其内容

下面是一些示例标记,它显示了一个锁定的内容控件,其中一个段落以这种方式受到保护,另一个段落位于该内容控件之外


这是一个受保护的段落。
这是另一个未受保护的段落。
注意
w:lock
元素,它由openxmlsdk中的
lock
类表示

创建上述
w:sdt
元素所需的C代码如下:

var-sdt=
新SdtBlock(
新SdtProperties(
新锁{Val=LockingValues.SdtContentLocked}),
新SdtContentBlock(
新段落(
新运行(
新案文(“这是一个受保护的段落。”);

Word实际上不支持“只读”,因为它是一个文本编辑器。实现这一目标的唯一途径是采取某种保护措施。你需要在Word UI中进行一些实验,直到找到适合你需要的东西。我建议您从内容控件开始,进入属性并设置“无法编辑”。如果这对您有效,请使用OpenXMLSDK生产力工具查看文档,了解如何创建它。如果这对你不起作用,在终端用户场所(如超级用户)询问其他选项。太好了!非常感谢。我添加了一个答案,其中显示了所需的开放XML标记和C#代码。实现这一目标的唯一途径是采取某种保护措施。你需要在Word UI中进行一些实验,直到找到适合你需要的东西。我建议您从内容控件开始,进入属性并设置“无法编辑”。如果这对您有效,请使用OpenXMLSDK生产力工具查看文档,了解如何创建它。如果这对你不起作用,在终端用户场所(如超级用户)询问其他选项。太好了!非常感谢。我添加了一个答案,其中显示了所需的开放XML标记和C#代码。
var paragraph = new Paragraph();
var run = new Run();
var properties = new RunProperties();
var paragraphProperties = new ParagraphProperties();

properties.FontSize = new FontSize();
properties.FontSize.Val = new StringValue("20");
properties.RunFonts = new RunFonts()
{
    Ascii = "Arial"
};
paragraphProperties.Justification = new Justification() { Val = JustificationValues.Center };

paragraph.Append(paragraphProperties);
run.Append(properties);

var text = new Text("Text content...") { Space = SpaceProcessingModeValues.Preserve };

run.Append(text);
paragraph.Append(run);

DocBody.Append(paragraph);