MS Word C#AddIn - 如何编辑打开的word文档的xml

时间:2015-07-14 15:42:30

标签: c# xml ms-word add-in docx

感谢您的光临:)

我需要直接修改MS Word文档的XML ,因为Word Interop的功能不足以满足我的需要。
诀窍是我必须从Word加载项将其应用到当前打开的文档,所以我无法打开/保存包(对吗?)。简而言之,如下所示的几十篇文章在这里不适用:
https://msdn.microsoft.com/en-us/library/aa982683%28v=office.12%29.aspx

任何帮助将不胜感激:)

示例问题 - 从单词中的一个非常非常大的表中删除自定义单元格边距(想想200x10)并选中“与整个表格相同”。

解决方案的潜在客户(currenttable是当前选定的字表):

using System.Xml.Linq; // plus all the standard Word Add-In references
...
XDocument currentablexdocument = XDocument.Parse(currenttable.Range.WordOpenXML);
currentablexdocument.Descendants().Where(e =>e.Name.LocalName.Equals("tcMar")).Remove();
currenttable.Range.Delete();
currentselection.InsertXML(currentablexdocument.ToString());

说明:

  • currenttable.Range.WordOpenXML为我提供了格式良好的表格XML表示,然后我将其解释为XDocument
  • tcMar =表格单元格边距。仅当单元格具有自定义边距时,才存在这些XML元素。删除所有这些元素确实完全我需要的东西。
  • currenttable.Range.Delete()删除旧表
  • currentselection.InsertXML(...)将修改后的表格XML插入到边距已修复的文档中。几乎是瞬间的。耶!

问题:

  • 删除和插入表格不稳定,会产生不良结果。如果我可以直接修改xml会好得多。有可能吗?

声明:
我们欢迎任何其他解决这一特定问题的想法,但我尝试了无数可能的解决方案:

  • 应用客户拒绝的表格样式
  • 循环“SendKeys”命令以自动使用Word界面太不可靠了,
  • 更改Table.XXXPadding,Row.XXXPadding,Column.XXXPadding不会影响自定义Cell边距(以及其他问题)
  • 循环遍历单元格以更改其Cell.XXXPadding太慢(在200x10桌面上冻结几分钟的单词)。注意,它正在访问缓慢的填充;正确实现时,循环本身需要3秒才能遍历整个表。
  • ofc我用ScreenRefreshing = false和AllowAutoFit = false尝试了一切;

有人请帮忙:) 干杯!

0 个答案:

没有答案