为什么在Google Docs中复制一个表格不能复制嵌入的图形?

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

这段谷歌应用脚本代码

    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() 应该是 "深 "吗?

有谁有办法解决这个问题吗?

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

我认为你的情况和目标如下。

  • 在你的情况下,表格单元格有内联图像。当你把表格从源文档复制到目标文档时,图像没有被复制。
  • 你想把表格复制到目标Document时,包括内联图片。

对此,如何修改呢?在这种情况下,似乎不能直接使用内联图像复制。copy(). 所以作为一个变通的办法,把表格从源Document复制到目标Document后,把源Document中的图片放到目标Document中呢?

当你的脚本被修改后,就变成了下面的样子。

修改后的脚本。

From:
target.getBody().insertTable(offset++, elem.asTable().copy());
To:
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());
        }
      }
    }
  }
}

注意:

  • 我在谷歌问题追踪器上搜索过这个问题。但我找不到它。那么把这个问题报告到问题追踪器上怎么样?参考文献

参考文献

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