cursorPos.insertInlineImage()给出错误:“我们很抱歉,发生了服务器错误。请稍等一下再试一次”

时间:2014-03-09 01:36:46

标签: google-apps-script

我正在尝试使用Google文档中包含的脚本从网址加载图片并将其插入光标位置,但使用cursorPos.insertInlineImage(image)插入图片会出现错误We're sorry, a server error occurred. Please wait a bit and try again < / p>

使用getBody().appendImage(image)插入图片或使用cursorPos.insertText("hello")插入文字可以正常使用。

function onOpen(e) {
  var ui = DocumentApp.getUi();
  ui.createMenu("Test")
    .addItem("Insert", "insertTest")
    .addToUi();
}

function insertTest() {
  var doc = DocumentApp.getActiveDocument();
  var image = UrlFetchApp.fetch("http://latex.codecogs.com/gif.latex?E%3Dmc%5E2").getBlob();
  var cursorPos = doc.getCursor();
  doc.getBody().appendImage(image); // works
  cursorPos.insertText("test!"); // works
  cursorPos.insertInlineImage(image); // gives error
}

2 个答案:

答案 0 :(得分:3)

我很高兴地说找到了一个简单的解决方法!

function insertTest() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var image = UrlFetchApp.fetch("http://latex.codecogs.com/gif.latex?E%3Dmc%5E2").getBlob();
  var cursorElement = doc.getCursor().getElement();
  body.insertImage(body.getChildIndex(cursorElement), image);
}

不幸的是,如果光标位于段落内,则会抛出一个错误,指出cursorElement不是body的子节点。解决方案是将cursorElement的最高级别父级传递给getChildIndex。

function insertTest() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var image = UrlFetchApp.fetch("http://latex.codecogs.com/gif.latex?E%3Dmc%5E2").getBlob();
  var cursorElement = doc.getCursor().getElement();
  body.insertImage(body.getChildIndex(getTopLevelParent(cursorElement)), image);
}

// get the uppermost level parent of an element within a body section
function getTopLevelParent(element) {
  var parent = element.getParent();
  if (parent.getType() == DocumentApp.ElementType.BODY_SECTION) {
    return element;
  } else {
    return getTopLevelParent(parent);
  }
}

答案 1 :(得分:0)

这是一个稍微简单的解决方法。 我们的想法是将图像附加到文档正文的末尾,然后将其移动到光标位置。 在这个过程中,无论是关于阻止insertInlineImage之前工作的原始codecogs图像被删除,每个人都很高兴!

function insertTest() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var image = UrlFetchApp.fetch(
              "http://latex.codecogs.com/gif.latex?E%3Dmc%5E2")
              .getBlob();
  var cursorPos = doc.getCursor();
  var imageCopy = (image = body.appendImage(image)).copy();
      cursorPos.insertInlineImage(imageCopy);
      image.removeFromParent();
}