默认情况下在Word Client中显示审阅窗格

时间:2017-10-31 07:47:14

标签: c# openxml openxml-sdk wordprocessingml

我想要什么: 我正在编辑WordprocessingDocument,并在其中添加了一些跟踪的更改。这部分完成了。现在,我希望MS word默认显示所有修订,即,它不应该要求用户点击红色侧栏来打开跟踪的更改文件。

red side bar

我做了什么:为此,我找到了一个类RevisionView,它在<w:revisionView />元素下的settings.xml中添加了xml元素w:settingsRevisionView有一些属性,例如CommentsDisplayRevisionFormatting等。我明确将它们全部设置为true

RevisionView revView = new RevisionView();
revView.DisplayRevision = new OnOffValue(true);
revView.Formatting = new OnOffValue(true);
revView.InkAnnotations = new OnOffValue(true);
revView.Markup = new OnOffValue(true);
revView.Comments = new OnOffValue(true);

然后我将此revView添加到Settings

Settings settings = wordprocessingDocument.MainDocumentPart.DocumentSettingsPart.Settings;
settings.RemoveAllChildren<RevisionView>();
settings.AppendChild(revView);
settings.Save();

然后我明确地审阅了文档xml,它在settings中添加了以下xml:

<w:revisionView w:markup="true" w:comments="true" w:insDel="true" w:formatting="true" w:inkAnnotations="true" />

但在设置中添加此元素并不会影响视图。它没有显示默认打开的修订版。

然后,出于测试目的,我将zoom中的settings.xml元素从<w:zoom w:percent="100" />手动更改为<w:zoom w:percent="120" />。我的预期是:word会立即将​​此文档的缩放从100更改为120。但它没有这样做,即使在100中更改为120后,缩放也为settings.xml

还有一件事:我无法使用互操作,因为我必须将其部署到服务器,这就是我使用OpenXmlSdk完成所有这些操作的原因。

我在问什么:

  • 甚至可以我想要什么

  • 如果是,那么我做错了什么? RevisionView是我应该依赖的选项吗?

  • 有没有办法强制应用单词(覆盖默认的应用程序级别设置)settings.xml中提供的设置?

  • 为什么单词不能将缩放从100更改为120?

1 个答案:

答案 0 :(得分:1)

以下是您的问题的答案:

  

甚至可以做我想做的事情吗?

您要做的是:打开docx文件后,自动打开“审阅窗格”。我找不到强制Word客户端使用OpenXml执行此操作的方法。

  

如果是,那么我做错了什么? RevisionView是我应该依赖的选项吗?

这是不可能的,所以这里的答案也是否定的。

  

有没有办法强制word应用(覆盖默认的应用程序级别设置)settings.xml中提供的设置?

是使用OpenXml SDKSettings部件具有可以使用代码控制的属性,以更改默认的Word客户端行为。

  

为什么单词不能将缩放从100更改为120?

我无法看到你的文件而无法回答这个问题。手动编辑文件时,可能没有正确保存文件。

我能够使用以下代码构建一个简单的控制台应用程序。该应用程序将任何Word文件的缩放级别更改为120%。您需要将文件路径添加到代码中。

我使用OpenXml Productivity Tool.生成了大部分代码。

注意 - 在Visual Studio中构建时,请不要忘记将DocumentFormat.OpenXmlWindowsBase添加到项目引用中。

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace ConsoleApp4
{
    class Program
    {

        private static WordprocessingDocument document;
        private static System.Collections.Generic.IDictionary<System.String, OpenXmlPart> UriPartDictionary = new System.Collections.Generic.Dictionary<System.String, OpenXmlPart>();
        private static System.Collections.Generic.IDictionary<System.String, DataPart> UriNewDataPartDictionary = new System.Collections.Generic.Dictionary<System.String, DataPart>();


        static void Main(string[] args)
        {

            using (document = WordprocessingDocument.Open("<DOCX FILE PATH HERE>", true))
            {
                BuildUriPartDictionary();
                ChangeParts();
            }

        }

        private static void BuildUriPartDictionary()
        {
            System.Collections.Generic.Queue<OpenXmlPartContainer> queue = new System.Collections.Generic.Queue<OpenXmlPartContainer>();
            queue.Enqueue(document);
            while (queue.Count > 0)
            {
                foreach (var part in queue.Dequeue().Parts)
                {
                    if (!UriPartDictionary.Keys.Contains(part.OpenXmlPart.Uri.ToString()))
                    {
                        UriPartDictionary.Add(part.OpenXmlPart.Uri.ToString(), part.OpenXmlPart);
                        queue.Enqueue(part.OpenXmlPart);
                    }
                }
            }
        }

        private static void ChangeParts()
        {
            ChangeDocumentSettingsPart1(((DocumentSettingsPart)UriPartDictionary["/word/settings.xml"]));
        }

        private static void ChangeDocumentSettingsPart1(DocumentSettingsPart documentSettingsPart)
        {
            Settings settings1 = documentSettingsPart.Settings;

            Zoom zoom1 = settings1.GetFirstChild<Zoom>();

            zoom1.Percent = "120";

        }
    }
}