1

https://developers.google.com/apps-script/class_documentbodysection#appendImage

我基本上打开一个文档并获取它的 DocumentBodySection,然后遍历元素,复制它们 (Element.copy()) 以获得深度分离副本,然后将元素附加到另一个文档。

这适用于段落和其他元素类型,但是当涉及内联图像时,我在生成的文档中得到一个断开的链接。

有人让它工作吗?

这是一个片段

function appendSection(doc, section) {
  for (i=0; i<section.getNumChildren(); i++) {
    var el = section.getChild(i);
    if (el.getType() == DocumentApp.ElementType.PARAGRAPH)
    {
      if (el.getNumChildren() != 0) {
        var el_child = el.getChild(0);
        if (el_child.getType() == DocumentApp.ElementType.INLINE_IMAGE)
        {
          doc.appendImage(el_child.asInlineImage().copy());
          Logger.log("Image");
        }
      }
      doc.appendParagraph(el.copy());
      Logger.log("Paragraph");
    }
  }     
  return doc
}

提前致谢。

4

1 回答 1

2

我让 appendImage 在不一样但类似的情况下为我工作。

希望它也对你有用,请告诉我

根据您的代码进行调整,只需添加/更改 Blob 行以避免重复的内联图像

  if (el_child.getType() == DocumentApp.ElementType.INLINE_IMAGE)
  {
    var blob = el_child.asInlineImage().getBlob();
    doc.appendImage(blob);
  } 

编辑 1:如下所述,当循环遍历 bodySection 时,任何 INLINE_IMAGE 都将嵌入到 PARAGRAPH 中。下面的代码适用于任何未用文本包装的 INLINE_IMAGE。如果是这种情况,您需要更深入地挖掘。

for (var elem = 0; elem < bodySection.getNumChildren(); elem++) {
          var theElem = bodySection.getChild(elem).copy();
          if (theElem.getType() == DocumentApp.ElementType.PARAGRAPH) {
            if (theElem.asParagraph().getNumChildren() != 0 && theElem.asParagraph().getChild(0).getType() == DocumentApp.ElementType.INLINE_IMAGE) {
              var blob = theElem.asParagraph().getChild(0).asInlineImage().getBlob();
              targetDoc.appendImage(blob);
            }
            else targetDoc.appendParagraph(theElem.asParagraph());
          }
          if (theElem.getType() == DocumentApp.ElementType.LIST_ITEM) targetDoc.appendListItem(theElem.asListItem().copy());
          if (theElem.getType() == DocumentApp.ElementType.TABLE) targetDoc.appendTable(theElem.asTable());
        }
于 2013-01-10T15:49:11.100 回答