如何在 c# 中使用互操作添加不可编辑的页脚

Posted

技术标签:

【中文标题】如何在 c# 中使用互操作添加不可编辑的页脚【英文标题】:How to add footer that is uneditable using interop in c# 【发布时间】:2018-08-20 02:17:36 【问题描述】:

我使用此代码向 Word 文档添加页脚,但我想让页脚在被应用程序打开时设为只读或不可编辑。这可能吗?我在网上搜索,但没有任何地方提到如何使其不可编辑。

Word.Application wordApp = null;

        // word document
        document = null;

        try
        
            wordApp = new Word.Application();
            //WordApp.Visible = true;
            // open
            document = wordApp.Application.Documents.Open(wordpath);

            foreach (Word.Section wordSection in document.Sections)
            
                //Get the footer range and add the footer details.
                Word.Range footerRange = wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                footerRange.Font.ColorIndex = Word.WdColorIndex.wdGray50;
                footerRange.Font.Size = 15;
                footerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
                footerRange.Text = wordHeaderName;

            

            // save 
            document.Save();
        
        finally
        
            // close excel document & application
            if (document != null)
            
                try
                
                    document.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
                
                catch  
            

            if (wordApp != null)
            
                try
                
                    wordApp.Quit();
                
                catch  
            
        

【问题讨论】:

文档中的哪些内容应该是可编辑/不可编辑的,由谁编辑,在什么情况下? @CindyMeister 只有页脚不可编辑,所有用户都不能永久编辑页脚。谢谢 【参考方案1】:

Word 的最新版本(我记得是 2007 年以来)具有保护功能,允许您阻止整个文档进行编辑 - 然后您可以明确允许对各种范围进行编辑。棘手的部分是这些范围必须具有内容才能使许可生效(并保持)有效。

这意味着您可能需要在标题中放置一些“隐藏文本”,例如,它们应该是可编辑的。如果任何页眉或页脚被锁定,则无法从先前取消链接的选项。任何缺少的功能都可以通过代码工具提供,这些工具可以取消保护、执行任何需要完成的操作,然后重新保护。

假设在您打开文档并创建页脚时文档的所有“部分”都已经存在,请将您的代码更改为如下所示。

注意事项

当我从 VBA 转换它时,可能会有语法“blips” 您可能应该阅读两个对象中的文档保护 模型以及一般 Word 帮助,尤其是 IRM 的可能性。 您可以为保护分配密码。

代码sn-p:

 Word.Application wordApp = null;

    // word document
    document = null;

    try
    
        wordApp = new Word.Application();
        //WordApp.Visible = true;
        // open
        document = wordApp.Application.Documents.Open(wordpath);
        Word.Range permittedRange = document.Content;
        permittedRange.Editors.Add(Word.WdEditorType.wdEditorEveryone);

        foreach (Word.Section wordSection in document.Sections)
        
            //Allow editing the headers?
            permittedRange = wordSection.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            permittedRange.Editors.Add(Word.WdEditorType.wdEditorEveryone);

            //Get the footer range and add the footer details.
            Word.Range footerRange = wordSection.Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
            footerRange.Font.ColorIndex = Word.WdColorIndex.wdGray50;
            footerRange.Font.Size = 15;
            footerRange.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
            footerRange.Text = wordHeaderName;

        
        document.Protect(Word.WdProtectionType.wdAllowOnlyReading, ref missing, ref missing, ref missing, ref missing);
        // save 
        document.Save();

【讨论】:

以上是关于如何在 c# 中使用互操作添加不可编辑的页脚的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ag-grid 表的页脚中启用或显示总行

如何使用 VBA 将页码字段逻辑插入 Word 模板的页脚?

如何在 r 中的可反应表的页脚(包含每列的总值)中添加分隔符?

如何将属性值作为列表添加到 Magento 的页脚?

PDF如何添加页眉页脚?PDF添加页眉页脚的小技巧

PDF文件怎么修改,怎么给PDF文件添加页眉页脚