我正在尝试创建一个Office Javascript加载项,它将检查光标之前的字符并根据其内容替换该字符。因此,我需要在光标之前创建一个字符范围。我可以使用VBA宏轻松地做到这一点,但是不幸的是,我找不到新的javascript API来做到这一点的方法。这可能吗?
如果可能的话,如果我可以看一下光标前后的5个字符以了解添加的上下文,那也将很有帮助。
谢谢。
答案 0 :(得分:0)
几个月前,我尝试了类似的方法。简而言之,没有好的方法。 您可以尝试我在下面指定的内容,但是我建议您反对。该示例没有经过仔细考虑,很可能会包含许多错误。另外,我发现这是做这么简单的事情的效率极低的方法。
API中的限制因素阻止了简单的解决方案:
示例
// WARNING: Incredibly inefficient and poor code. Do not use directly!
// WARNING: Edge cases are not tackled in this example.
function replaceCharacterBeforeCursor() {
Word.run(function (context) {
var selection = context.document.getSelection();
// Assumption: Cursor always starts at the beginning of a selection.
var cursor = selection.getRange('Start');
// Create a new range that covers everything before the cursor (or the beginning of the selection).
var startDocument = selection.parentBody.getRange("Start");
var rangeBeforeSelection = startDocument.expandTo(startDocument);
// Capture parent paragraph.
var parentParagraph = rangeBeforeSelection.paragraphs.getLast();
context.load(parentParagraph);
context
.sync()
.then(function () {
// Create range that captures everything from the beginning of the parent
// paragraph until the cursor.
var paragraphStart = parentParagraph.getRange('Start');
var wordRangeBeforeCursor = paragraphStart.expandTo(cursor);
context.load(wordRangeBeforeCursor);
context
.sync()
.then(function () {
// Replace last character.
var oldText = wordRangeBeforeCursor.text;
var wordLength = oldText.length;
var lastCharacter = oldText.substring(wordLength - 1);
if (lastCharacter !== " ") {
var newText = oldText.substring(0, wordLength - 1) + "test";
wordRangeBeforeCursor.insertText(newText, 'Replace');
context.sync();
}
});
});
});
}
另一种方法是通过文本范围。这将大大降低效率。无论哪种方式,我希望这都能帮助您找到适合您需求的解决方案。