【发布时间】:2017-05-23 16:12:35
【问题描述】:
我正在尝试更新 Word 表格单元格中的文本(位于内容控件 [CC] 中)。我已经使用表格对象成功地做到了这一点;但是对于拥有大量表格的大型文档的客户来说,它太慢了。所以,我希望能够使用 getOoxml 和 insertOoxml 来更新表格单元格的值(希望更快,尽管我看到它在 Word Online 中可能非常慢)。 所以我会使用 getOoxml 在 CC 中获取表 Ooxml,然后以编程方式修改 xml,然后将 Ooxml 插入到 CC 中。
我能够成功获取 Ooxml,并使用 C# OpenXMLPowerTools 以编程方式成功修改表 Ooxml。但是,我无法成功将 Ooxml 重新插入 CC。
如果 CC 是围绕选定的表添加的,那么当代码运行时,它总是会失败并显示“InvalidArgument”。请注意,这样做时,CC 中的表格上方或下方没有换行符(CC 适合表格)。这就是我客户的大多数桌子的样子。
如果表格是在 CC 中添加的(导致表格上方/下方出现不需要的换行符),则代码会运行,但会导致添加额外的 CC 和换行符。因此,每次代码运行时,CC 计数都会增加 1。CC 似乎是相互嵌套的。额外的 CC 是不可接受的,因为它们会弄乱后续代码。它还会在每次运行代码时添加一个额外的换行符。
我已经尝试过 contentControls.items[0].clear()。 - 这会删除文本,但不会删除表格或 CC,因此没有帮助。
这是 Script Lab 中的简化代码:
$("#getooxml").click(getooxml);
function getooxml() {
Word.run(function (context) {
var contentControls = context.document.contentControls;
context.load(contentControls);
return context.sync().then(function () {
var ooxml = contentControls.items[0].getOoxml(); //contains a table
return context.sync().then(function () {
contentControls.items[0].insertOoxml(ooxml.value, Word.InsertLocation.replace);
return context.sync().then(function () {
console.log('inserted OOXM. CC count:' + contentControls.items.length);
});
});
});
})
.catch(function (error) {
console.log('Error: ' + JSON.stringify(error));
if (error instanceof OfficeExtension.Error) {
console.log('Debug info: ' + JSON.stringify(error.debugInfo));
}
});
}
是否有任何可能的方法让它发挥作用? 例如,有没有办法可以修改 Ooxml 以使其工作?我怀疑它添加 CC 的原因是因为 getOoxml() 包含父 CC 本身,并且当插入父 CC 中时,它会添加 CC(以及任何嵌套的 CC)。如果是这样,如何从 Ooxml 中删除父 CC?
我有版本 1704(内部版本 8067.2115)
这里有一个帖子表明添加的段落问题将在下个月修复:`context.document.body.insertOoxml` breaks documents, crashes word 它还表明“替换”选项实际上没有替换的错误(但我不认为是这种情况)
【问题讨论】: