我正在开发一个 word 插件。主要任务是使用数据库中的数据填充文档中的书签。在 office.js 中,我发现书签可以作为范围对象进行访问,并且我正在使用“ rangeObject.insertText(text, insertLocation)" 将数据插入书签的方法。但问题是第二个参数 insertLocation 值可以是 'Replace'、'Start'、'End'、'Before' 或 'After'。这基本上是追加书签之前或之后的数据。像这样 -图片 1(使用 insertLocation 值“End”的当前结果) https://i.stack.imgur.com/l1k9P.jpg
使用 insertLocation 值“替换”它会替换整个书签并实际上从文档中删除书签!所以我想要的就是在书签中插入一个文本,如下所示-图2(期望的结果) https://i.stack.imgur.com/d79hO.jpg
注意:我稍后必须读取这些书签值。因此无法删除任何书签。并且我正在使用 Office.js api 的 1.4 beta 版本。
这是我的代码-
Word.run(function (context) {
var doc = context.document;
//get the bookmark range by its name
var bookmarkRange = doc.getBookmarkRangeOrNullObject("cscasenumber01");
//insert a data
bookmarkRange.insertText("test data",'end');
// Synchronize the document state by executing the queued commands,
return context.sync();
}).catch(errorHandler);
在审查此问题后,我们发现“替换”行为是设计使然。
事实上,如果您直接使用 UI 替换包含书签的范围的文本,则书签将被删除。如果您使用宏/VBA 以编程方式执行此操作,情况也是如此。
好消息是,替换文本后,选择将是替换的文本范围,因此如果需要,您可以在替换操作后重新创建书签。
请注意,这只发生在替换时。在开始或结束处插入将保留书签。
最后,书签 API 仍处于预览阶段,发布日期未知。
--------- 保留预览答案的一些上下文 ---------
非常感谢您使用我们的预览版 API。我只是重现这种行为,这是设计使然。是的,API 上的 before、start、end、after 的语义非常清晰。
- “开始”和“结束”插入位置意味着插入将在调用范围的边界内,在这种情况下意味着如果您使用其中任何一个,则书签需要扩展到插入的任何内容。
- 另一方面,“之前”/“之后”意味着插入到范围边界之外。
- 最后,replace 应该用作为参数提供的任何文本替换书签,书签将被删除(与直接在 UI 中并使用 VBA 以编程方式执行此操作一致)。
谢谢
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)