Muh*_*mad 5 c# openxml openxml-sdk wordprocessingml
我想要的是:我正在编辑一个WordprocessingDocument,并在其中添加一些跟踪的更改.这部分完成了.现在,我希望MS word 默认显示所有修订版,即,它不应要求用户单击红色侧栏以打开文档中的跟踪更改.
我做了什么:对于这一点,我发现了一类RevisionView,它增加了XML元素<w:revisionView />的settings.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);
Run Code Online (Sandbox Code Playgroud)
然后我把它添加revView到Settings:
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会改变此文档的缩放100到120现在.但它并没有做到这一点,变焦是100即使改变后120在settings.xml.
还有一件事:我不能使用互操作,因为我必须将它部署到服务器,这就是我使用OpenXmlSdk完成所有这些操作的原因.
我在问什么:
甚至可以做我想要的事情吗?
如果是,那么我做错了什么?是RevisionView选项,我应该依靠什么?
有没有办法强制单词应用(覆盖默认的应用程序级别设置)提供的设置settings.xml?
为什么单词不能将缩放从100改为120?
以下是您的问题的答案:
甚至可以做我想做的事吗?
您想要做的是:打开 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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |