我想要什么:
我正在编辑WordprocessingDocument
,并在其中添加了一些跟踪的更改。这部分完成了。现在,我希望MS word默认显示所有修订,即,它不应该要求用户点击红色侧栏来打开跟踪的更改文件。
我做了什么:为此,我找到了一个类RevisionView
,它在<w:revisionView />
元素下的settings.xml
中添加了xml元素w: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);
然后我将此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?
答案 0 :(得分:1)
以下是您的问题的答案:
甚至可以做我想做的事情吗?
您要做的是:打开docx文件后,自动打开“审阅窗格”。我找不到强制Word客户端使用OpenXml执行此操作的方法。
如果是,那么我做错了什么? RevisionView是我应该依赖的选项吗?
这是不可能的,所以这里的答案也是否定的。
有没有办法强制word应用(覆盖默认的应用程序级别设置)settings.xml中提供的设置?
是使用OpenXml SDK。 Settings部件具有可以使用代码控制的属性,以更改默认的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";
}
}
}