默认情况下在Word Client中显示"查看窗格"

Muh*_*mad 5 c# openxml openxml-sdk wordprocessingml

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

红边吧

我做了什么:对于这一点,我发现了一类RevisionView,它增加了XML元素<w:revisionView />settings.xmlw:settings元素.该RevisionView有一个像一些属性Comments,DisplayRevision,Formatting等我明确它们都设置为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);
Run Code Online (Sandbox Code Playgroud)

然后我把它添加revViewSettings:

Settings settings = wordprocessingDocument.MainDocumentPart.DocumentSettingsPart.Settings;
settings.RemoveAllChildren<RevisionView>();
settings.AppendChild(revView);
settings.Save();
Run Code Online (Sandbox Code Playgroud)

然后我明确地检查了文档xml,它在以下内容中添加了以下xml settings:

<w:revisionView w:markup="true" w:comments="true" w:insDel="true" w:formatting="true" w:inkAnnotations="true" />
Run Code Online (Sandbox Code Playgroud)

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

然后,出于测试目的,我将手中的zoom元素settings.xml<w:zoom w:percent="100" />更改为<w:zoom w:percent="120" />.我的期望是:word会改变此文档的缩放100120现在.但它并没有做到这一点,变焦是100即使改变后120settings.xml.

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

我在问什么:

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

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

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

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

Tat*_*ead 1

以下是您的问题的答案:

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

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

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

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

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

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

为什么 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";

        }
    }
}
Run Code Online (Sandbox Code Playgroud)