Apps 脚本中的 getBody 总是 returns null,尽管我认为应该这样写

getBody always returns null in Apps Script even though that's how I think it should be written

我的代码旨在使 Google 文档中的编辑更容易,但效果不佳,returns getBody 为空。我已经测试过将 "body" 设置为变量,但这不太奏效。由于我对 Javascript 缺乏经验,我很难理解为什么 exactly getBody returns 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)

你有 findText("very", searchResult) 而你没有变量 searchResult。根据文档,这需要 range class(阅读 here

接下来是整个混乱

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

我做了一些格式化以便更好地查看整个 while 循环。首先,这是一个无限循环,因为它会不断重复,因为 searchResult 在循环内部永远不会改变,所以这一步要么被跳过,要么将无限继续。接下来是这个特殊的方法:

.setAttributes(searchResult.getStartOffset(),
               searchResult.getEndOffsetInclusive(),
               "#FF000"
              )

请仔细阅读方法 here,因为您使用不当。您正在向该方法提供一个 string,它需要一个 object。在同一个文档页面中向下滚动到下一个方法,没有偏移量,它显示了如何格式化 attributes 的示例。

接下来我们跳出循环。这似乎毫无意义

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

也许您的意思是在 while 循环内完成?因为本质上你现在正在做的是

  1. 从文档中设置 searchResult
  2. 日志searchResult对象
  3. 设置 searchResult 属性(因为这看起来像十六进制颜色代码,我假设您希望为代码着色)。在 searchResult 不是 null 时执行此操作。
  4. 从文档
  5. 设置searchResult
  6. 结束

如果这意味着在 while 循环内,那么您需要在 while 之后添加 { 并在您希望在 1 次迭代中发生的最后一个操作之后添加 } while 循环。