Javascript getBody在应用程序脚本中总是返回null,尽管我认为应该这样写

Javascript getBody在应用程序脚本中总是返回null,尽管我认为应该这样写,javascript,google-apps-script,google-docs,Javascript,Google Apps Script,Google Docs,我的代码旨在使谷歌文档中的编辑更容易,但不太有效,返回getBody null。我已经测试过将body设置为一个变量,但这不太管用。由于我对Javascript缺乏经验,很难理解getBody返回null的确切原因。所以,如果你知道我在这件事上哪里出了问题,那对我的未来会有帮助 function myFunction() { var searchResult searchResult = DocumentApp.getActiveDocument().getBody().findText(

我的代码旨在使谷歌文档中的编辑更容易,但不太有效,返回getBody null。我已经测试过将body设置为一个变量,但这不太管用。由于我对Javascript缺乏经验,很难理解getBody返回null的确切原因。所以,如果你知道我在这件事上哪里出了问题,那对我的未来会有帮助

function myFunction() {

var searchResult

searchResult = 
DocumentApp.getActiveDocument().getBody().findText("very",searchResult)
Logger.log(searchResult)

while (searchResult !== null)searchResult.getElement().asText().setAttributes(searchResult.getStartOffset(),searchResult.getEndOffsetInclusive(),"#FF000")

  searchResult = 
DocumentApp.getActiveDocument().getBody().findText("very",searchResult)

}



function highlightProblem() {

var words = ["very","so","totally","really"] 

words.forEach(findText)

}


function onOpen(){
DocumentApp.getUi().createMenu('everythingisnotfine.avi').addItem('Higlight Words That Make You Sound Like a Dandy', 'higlightProblem').addToUi()
}       

你的身体不是空的。你的第一个问题是在这一行

searchResult = DocumentApp.getActiveDocument().getBody().findText("very", searchResult)
您有findTextvery、searchResult,但没有变量searchResult。根据文档,这需要读取范围类

接下来就是这里的混乱

while (searchResult !== null)
  searchResult.getElement().asText()
    .setAttributes(searchResult.getStartOffset(),
                   searchResult.getEndOffsetInclusive(),
                   "#FF000"
                  )
我做了一些格式化,以便更好地查看整个while循环。首先,这是一个无止境的循环,因为它将不断重复,因为searchResult在循环内部从未更改,所以这一步要么被跳过,要么将无限期地继续。接下来是这个特殊的方法:

.setAttributes(searchResult.getStartOffset(),
               searchResult.getEndOffsetInclusive(),
               "#FF000"
              )
由于你使用方法不正确,请仔细阅读。您正在为该方法提供一个字符串,该方法需要一个对象。在同一文档页面中,向下滚动到下一个方法,不带偏移量,它显示了属性应如何格式化的示例

下一步,我们移动到循环之外。这似乎毫无意义

searchResult = DocumentApp.getActiveDocument().getBody().findText("very",searchResult);
也许你的意思是在while循环中完成?因为你现在做的基本上是

从文档设置搜索结果。 日志搜索结果对象 设置searchResult属性,因为这看起来像十六进制颜色代码,我假设您希望为代码着色。在searchResult不为null时执行此操作。 从文档设置搜索结果 终止
如果这是在while循环中,那么您需要在while循环的1次迭代中希望执行的最后一个操作之后添加{after while and}。

编辑您的问题,并将注释中的代码放在里面。哦,抱歉,这里有点新,这样更好,但您应该先放问题文本,然后放代码。这是因为监控标签的人,即他们可能想回答的问题,在主页上看到了第一句话左右。因此,理想情况下,你的前1-2句话会告诉你问题是什么,或者至少给出一个关于手头问题的提示,以便更多有能力的人能够参与回答。你可以通过检查一个标签页(如下所示)来查看这些页上的问题: