为什么在 Google 文档中复制 table 不会复制嵌入的图形?

Why does copying a table in Google Docs not copy embedded graphics?

这段 Google Apps 脚本代码

    for (let el = 0; el < tempDocBody.getNumChildren(); el++) {
      const elem = tempDocBody.getChild(el);
      Logger.log(
        "ProcessMainTable [%s] %s %s",
        el,
        elem.getType().toString(),
        elem.asText().getText(),
      );
      switch (elem.getType()) {
        case DocumentApp.ElementType.TABLE:
          target.getBody().insertTable(offset++, elem.asTable().copy());
          break;
        case DocumentApp.ElementType.PARAGRAPH:
          target.getBody().insertParagraph(offset++, elem.asParagraph().copy());
          break;
      }
    }

工作正常,除了 TABLE 单元格之一中嵌入的图像没有被复制到目标。其他一切都很好,例如字体和格式。 .copy() 不应该是 "deep" 吗?

有人对此有解决方法吗?

我相信你的情况和目标如下。

  • 在您的情况下,table 单元格具有内联图像。当您将 table 从源文档复制到目标文档时,图像不会被复制。
  • 您想通过包含内联图像将 table 复制到目标文档。

为此,这个修改怎么样?在这种情况下,似乎无法使用 copy() 直接复制内联图像。因此,作为解决方法,将 table 从源文档复制到目标文档后,将源文档中的图像放入目标文档如何?

当你的脚本修改后,变成如下。

修改后的脚本:

从:
target.getBody().insertTable(offset++, elem.asTable().copy());
到:
var srcTable = elem.asTable().copy();
var dstTable = target.getBody().insertTable(offset++, srcTable);
for (var i = 0; i < srcTable.getNumRows(); i++) {
  for (var j = 0; j < srcTable.getRow(i).getNumCells(); j++) {
    var cell = srcTable.getCell(i, j);
    for (var k = 0; k < cell.getNumChildren(); k++) {
      var paragraph = cell.getChild(k).asParagraph();
      for (var l = 0; l < paragraph.getNumChildren(); l++) {
        var child = paragraph.getChild(l);
        if (child.getType() == DocumentApp.ElementType.INLINE_IMAGE) {
          var srcImg = child.asInlineImage();
          dstTable.getCell(i, j).getChild(k).asParagraph().clear().insertInlineImage(l, srcImg.getBlob()).setWidth(srcImg.getWidth()).setHeight(srcImg.getHeight());
        }
      }
    }
  }
}

注:

  • 我在 Google 问题跟踪器上搜索过这个问题。但我找不到它。那么如何将此报告给问题跟踪器呢? Ref

参考文献: