getBody总是在Apps脚本中返回null,即使这是我认为它应该被编写的方式

时间:2018-01-30 18:33:36

标签: javascript google-apps-script google-docs

我的代码旨在让Google文档中的编辑更容易,但效果不佳并且返回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()
}       

1 个答案:

答案 0 :(得分:1)

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

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

如果您没有变量findText("very", searchResult),则searchResult。根据文档,这需要range类(阅读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. 结束
  7. 如果这是在while循环内部,那么您需要在{while之后添加},以便在{{1}的1次迭代中发生最后一次操作之后1}}循环。