paragraph.clear() 导致 bookmark.getPosition() 移动

问题描述 投票:0回答:1

我有一个谷歌文档,里面有 2 个书签。书签位于不同的段落中。

文档结构是这样的:

             | ...(other content)...
[bookmark-0] | Text-0
             | ...(other content)...
[bookmark-1] | Text-1
             | ...(other content)...

我正在运行这个脚本

function removeTextContent() {
  const docsId = '...';
  const docs = DocumentApp.openById(docsId);
  const doc = docs.getTabs()[0];
  const bookmarks = doc.asDocumentTab().getBookmarks();

  for (const [index, bookmark] of bookmarks.entries()) {
    Logger.log(bookmark.getId()); // output correct values
    const position = bookmark.getPosition(); // get shifted in 2nd iteration
    const element = position.getElement();
    const paragraph = element.asParagraph();
    paragraph.clear();
    position.insertText(String(index));
  }
}

预期结果:

             | ...(other content)...
[bookmark-0] | 0
             | ...(other content)...
[bookmark-1] | 1
             | ...(other content)...

实际结果:

             | ...(other content)...
[bookmark-0] | 1
             | ...(other content)...
[bookmark-1] | Text-1
             | ...(other content)...

进一步调试显示,在第二次迭代中,

position
发生了移位,因此在第二次迭代中,
position.insertText()
将值放在了错误的位置。

这段代码也给出了相同的行为

paragraph.getChild(0).removeFromParent(); // instead of paragraph.clear()

我的目标是用“其他东西”替换书签的内容,同时保持书签

.getId()
完好无损。

google-apps-script google-docs
1个回答
0
投票

这是 Google 问题跟踪器 上报告的已知问题,由于请求时间较长、缺乏活动以及报告该问题的总人数,尚未打算修复。

根据最后一张票上分配的个人,Google 文档脚本编辑器错误。 Element.clear/deleteText/setText 不能与 bookmark.getposition 一起使用:

我将此问题标记为已过时,因为它尚未收到很多投票,并且自报告以来已经有一段时间了。如果您仍然认为这个问题很重要,请在下面评论并提供更多详细信息或打开一个新问题。感谢您的反馈!

他们的建议是开一张新票,让他们知道问题仍然存在。

TL;博士

以下是在 Google 问题跟踪器上提交的错误报告和功能请求:

由于上述原因,它们目前的状态是

Won't fix (Obsolete)
,而它们分别是在
Feb 3, 2015 05:29AM
Apr 27, 2018 07:14AM
创建的。

© www.soinside.com 2019 - 2024. All rights reserved.