5

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

红色边栏

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

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);

然后我将其添加revViewSettings

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

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

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

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

然后,出于测试目的,我将by handzoom中的元素从更改为. 我的预期是:word 会从现在开始更改此文档的缩放比例。但它并没有这样做,即使在更改为in之后,缩放也是如此。settings.xml<w:zoom w:percent="100" /><w:zoom w:percent="120" />100120100120settings.xml

还有一件事:我不能使用互操作,因为我必须将它部署到服务器,这就是为什么我使用 OpenXmlSdk 来做这一切。

我在问什么:

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

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

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

  • 为什么 word 不将缩放从 100 更改为 120?

4

1 回答 1

1

以下是您的问题的答案:

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

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

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

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

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

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

为什么 word 不将缩放从 100 更改为 120?

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

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

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

注意 - 在 Visual Studio 中构建它时,不要忘记将DocumentFormat.OpenXml和添加WindowsBase到您的项目引用中。

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";

        }
    }
}
于 2017-11-13T22:57:28.477 回答