Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Google文档中的Google Apps脚本更改光标所在单词的颜色_Javascript_Google Apps Script_Google Docs_Google Apps_Google Docs Api - Fatal编程技术网

Javascript 使用Google文档中的Google Apps脚本更改光标所在单词的颜色

Javascript 使用Google文档中的Google Apps脚本更改光标所在单词的颜色,javascript,google-apps-script,google-docs,google-apps,google-docs-api,Javascript,Google Apps Script,Google Docs,Google Apps,Google Docs Api,我正在尝试更改当前google文档光标所在的单词的颜色(当执行服务器功能时)。我不知道该怎么做。我看到了:它解释了如何获得这行的最后一个字,但这并没有真正起作用,这就是我所拥有的(非常粗糙的代码): 但它只给出了行中的最后一个单词,而不是光标实际所在的单词,而且我不知道在找到文本后如何更改文档中单词的颜色。我知道我可以根据某个范围更改颜色,但它只适用于getElement(),但是如何更改光标所在的整个单词的特定范围 例如,假设我有一行,用光标: hello world ho|w are you

我正在尝试更改当前google文档光标所在的单词的颜色(当执行服务器功能时)。我不知道该怎么做。我看到了:它解释了如何获得这行的最后一个字,但这并没有真正起作用,这就是我所拥有的(非常粗糙的代码):

但它只给出了行中的最后一个单词,而不是光标实际所在的单词,而且我不知道在找到文本后如何更改文档中单词的颜色。我知道我可以根据某个范围更改颜色,但它只适用于getElement(),但是如何更改光标所在的整个单词的特定范围

例如,假设我有一行,用光标:

hello world ho|w are you today
然后,当我激活服务器功能时,例如,只有单词“how”应该更改为红色

这怎么可能呢???

可以这样做,诀窍是获取当前用户单词的开始和结束的偏移量

函数clientize(){
//获取用户光标的位置
var position=DocumentApp.getActiveDocument().getCursor();
//获取包含此位置的元素
var ref_element=position.getElement();
//获取元素中的文本
var text=ref_element.asText().getText();
//获取光标在ref_元素中的相对位置。
//验证光标是否位于文本元素或段落元素内。
var ref_offset=position.getOffset();
if(ref_element.getType()==DocumentApp.ElementType.段落){
//光标位于行的开头或结尾
if(ref_offset==1){
//光标位于最后一个单词处。向左移动到文本中
ref_offset=text.length-1;
}
}
//获取当前单词的初始字符的偏移量
var offset\u first=ref\u offset-text.substring(0,ref\u offset)。拆分(“”[text.substring(0,ref\u offset)。拆分(“”).length-1]。长度;
//获取当前单词末尾的字符数
var chars_至_端;
if(text.substring(ref\u offset,ref\u offset+text.length-1).indexOf(“”>-1){
//若单词有尾随空格,则将其从计数中排除
chars_to_end=text.substring(ref_offset,ref_offset+text.length-1);
}否则{
chars_to_end=text.substring(ref_offset,ref_offset+text.length-1)。长度-1;
}
//获取当前单词最后一个字符的偏移量
var offset\u last=参考值\u offset+chars\u to\u end;
//定义样式属性
var style={};
样式[DocumentApp.Attribute.FOREGROUND_COLOR]=“FF00FF”;
//将样式应用于当前单词
ref_element.asText().setAttributes(首先偏移,最后偏移,样式);
}
注意:如果返回的单词后面或前面有comas或其他字符,则必须对其进行筛选。 提示:使用正则表达式。 看看这个测试,看看它是否有效

此处的关键功能也可供参考:


请注意,有很多方法可以做到这一点,这只是实现这一点的一种方法。

非常好的解决方案,正是我想要的!除此之外,还有一件事我想知道您是否可以帮助解决:当光标位于一行末尾的单词末尾时,当激活脚本时,我会出现错误:“找不到方法setAttributes(number,number,object)”,您知道如何解决此问题吗?我认为这与getElement()实际读取下一行有关,而不是光标位于末尾的那一行,你知道解决方法/某种解决方案吗?@bluejayke观察得很好。如果光标位于行的开头或结尾,则包含它的元素的类型为
DocumentApp.ElementType.paragration
,因此没有
setAttributes(number,number,object)
方法。鉴于这一警告,我们需要调整代码以考虑这种可能性。我已经编辑了代码,现在应该可以正常工作了。:)
hello world ho|w are you today