首页 > 解决方案 > 用谷歌文档中的表格替换图像

问题描述

我想用包含 Google Doc 中该图像的表格替换选定的图像。当我运行代码时,没有表被插入到谷歌文档中。

    function insertImage(ID, caption) {
    var selection = DocumentApp.getActiveDocument().getSelection();
    if (selection) {
        var elements = selection.getSelectedElements();
        var tImg = elements[0].getElement();
        var cells = [
            [tImg.asInlineImage(), ID+': '+caption]
        ];
        var parentElement = tImg.getParent();
        parentElement.insertTable(parentElement.getChildIndex(tImg) + 1, cells)
        tImg.removeFromParent();
    }
}

图像不会被删除,表格也不会被添加。谢谢!

标签: google-apps-scriptgoogle-docsgoogle-docs-api

解决方案


  • 您想将选定的图像替换为表格。
  • 您希望将所选图像插入到插入表格的单元格的第一列。文本放在第二列。

如果我对你的问题的理解是正确的,那么这个修改怎么样?

修改点:

  • Method ofinsertTable()是 Class Body 的方法。
  • 需要检索图像的位置作为文档正文的子索引。
  • 插入表格后,图像被插入到插入表格的单元格中。
  • 在这个修改中,当图像被删除时,它会删除图像的段落。通过这种方式,可以将图像替换为表格而不包括换行符。这种情况与在单元格中插入图像相同。
  • getSelectedElements()已弃用。所以请使用getRangeElements().

当以上几点反映到脚本中时,它变成如下。

修改后的脚本:

function insertImage(ID, caption) {
//  ID = "sample ID"; // for sample
//  caption = "sample caption"; // for sample

  var doc = DocumentApp.getActiveDocument(); // Added
  var body = doc.getBody(); // Added
  var selection = doc.getSelection(); // Modified
  if (selection) {
    var elements = selection.getRangeElements(); // Modified
    var e = elements[0].getElement(); // Modified
    if (e.getType() == DocumentApp.ElementType.INLINE_IMAGE) { // Added
      var tImg = e.asInlineImage(); // Modified
      var parentElement = tImg.getParent();
      var cells = [["", ID + ': ' + caption]]; // Modified
      var table = body.insertTable(body.getChildIndex(parentElement), cells); // Modified
      var cell = table.getCell(0, 0); // Added
      cell.insertImage(0, tImg.getBlob()).getParent().asParagraph().getNextSibling().removeFromParent(); // Added
      tImg.getParent().asParagraph().removeFromParent(); // Modified
    }
  }
}
输入:

在此处输入图像描述

输出:

在此处输入图像描述

笔记:

  • 在您的脚本中,使用了所选元素的第一张图像。所以我跟着这个。

参考:

如果这不是你想要的,请告诉我。我想修改它。


推荐阅读