Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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 Doc Apps脚本缓存选定的文本元素_Javascript_Google Apps Script_Google Docs Api - Fatal编程技术网

Javascript 使用Google Doc Apps脚本缓存选定的文本元素

Javascript 使用Google Doc Apps脚本缓存选定的文本元素,javascript,google-apps-script,google-docs-api,Javascript,Google Apps Script,Google Docs Api,更新:这是问以下问题的更好方式 对于文档中的元素是否有Idlike属性,我可以稍后使用该属性访问该元素。假设我在文档中插入了一段,如下所示: var myParagraph = 'This should be highlighted when user clicks a button'; body.insertParagraph(0, myParagraph); 然后用户手动(即通过键入或粘贴)在开始处插入另一个。现在,我段落的childIndex从0更改为1。我想稍后再谈这一段,并强调它。但

更新:这是问以下问题的更好方式

对于
文档中的
元素
是否有
Id
like属性,我可以稍后使用该属性访问该元素。假设我在文档中插入了一段,如下所示:

var myParagraph = 'This should be highlighted when user clicks a button';
body.insertParagraph(0, myParagraph);
然后用户手动(即通过键入或粘贴)在开始处插入另一个。现在,我段落的
childIndex
0
更改为
1
。我想稍后再谈这一段,并强调它。但是由于插入的原因,
childIndex
不再有效。对于
元素
接口或实现该接口的任何类型,都没有
Id
类属性
CahceService
PropertiesService
只接受
String
数据,因此我无法将
MyParague
存储为
对象

你们有什么想法来实现我想要的吗

谢谢

同一问题的旧版本(可选阅读):

假设用户选择一个单词并按下我的加载项的突出显示按钮。然后她又用同样的方法写了几个字。然后,她以一种方式编辑文档,使突出显示的单词的开始-结束索引发生变化

此时,她按下“删除突出显示”按钮。我的加载项应禁用所有以前选择的单词的突出显示。问题是我不想扫描整个文档并找到任何突出显示的文本。我只想直接访问那些以前选择的

有办法吗?我尝试缓存选定的元素。但是当我从缓存中取回它们时,我得到了
TypeError:在对象文本中找不到函数insertText。
error。对象的类型似乎在
cache.put()
cache.get()
之间发生了变化


我希望我能清楚地解释我想要实现的目标

不确定缓存是否是最佳方法。缓存是易变的,因此缓存的值可能不再存在。也许是个更好的选择

一种直接的方法是添加一个不依赖于后续文档更改的文档。它有一个缺点:每个人都可以看到书签

更有趣的方法是添加具有唯一名称的。示例代码如下:

function setNamedParagraph() {
  var doc = DocumentApp.getActiveDocument();
  // Suppose you want to remember namely the third paragraph (currently)
  var par = doc.getBody().getParagraphs()[2];
  Logger.log(par.getText());
  var rng = doc.newRange().addElement(par);
  doc.addNamedRange("My Unique Paragraph", rng);
}


function getParagraphByName() {
  var doc = DocumentApp.getActiveDocument();
  var rng = doc.getNamedRanges("My Unique Paragraph")[0];
  if (rng) {
    var par = rng.getRange().getRangeElements()[0].getElement().asParagraph();
    Logger.log(par.getText());
  } else {
    Logger.log("Deleted!");
  }
}

第一个函数将第三段“标记”为命名范围。第二个按范围名称获取该段落,尽管随后文档发生了更改。在这里,当我们的“唯一段落”被删除时,我们需要考虑例外情况。

<代码> CaseService < /COD>仅是“代码>字符串 >内容,正如它在文档中明确陈述的那样。您必须将它实例化为您需要的类
 var cache = CacheService.getDocumentCache();
 cache.get('text').insertText(0, ':)');  
function setNamedParagraph() {
  var doc = DocumentApp.getActiveDocument();
  // Suppose you want to remember namely the third paragraph (currently)
  var par = doc.getBody().getParagraphs()[2];
  Logger.log(par.getText());
  var rng = doc.newRange().addElement(par);
  doc.addNamedRange("My Unique Paragraph", rng);
}


function getParagraphByName() {
  var doc = DocumentApp.getActiveDocument();
  var rng = doc.getNamedRanges("My Unique Paragraph")[0];
  if (rng) {
    var par = rng.getRange().getRangeElements()[0].getElement().asParagraph();
    Logger.log(par.getText());
  } else {
    Logger.log("Deleted!");
  }
}