2017-08-07 15 views
1

Google Suite APIを使用して選択した画像を画像に置き換えようとしています。GoogleスイートAPIを使用して選択を置き換えます。

私は選択のインデックスを取得できたら、その特定のインデックスにイメージを挿入してから、選択したすべての要素を削除できると考えました。しかし、私はインデックスが正しく動作するように見えることはできません。

私は以下を試してみましたが、テキストの途中で単語を選択していても-1を返します。

var doc = DocumentApp.getActiveDocument(); 
var selection = doc.getSelection(); 
var elements = selection.getRangeElements(); 
if(elements.length > 0){ 
    return elements[0].getStartOffset(); 
} 

私はドキュメントを検索しようとしましたが、解決策が見つかりませんでした。事前に

var selection = doc.getSelection(); 
selection.replaceWithImage(image); 

ありがとう:私が欲しいもの

のようなものです。

答えて

1

カーソルの位置を選択の先頭に移動して解決しました。ここでは、同じ質問を持つ他の人のためにコメントされたコードです。

function insertImage(imageURL){ 
    var doc = DocumentApp.getActiveDocument(); 
    var body = doc.getBody(); 
    var UI = DocumentApp.getUi(); 
    var blob = UrlFetchApp.fetch(imageURL).getBlob(); 
    var cursor = doc.getCursor(); 

    /* If cursor is null, there is a selection not a position */ 
    if(!cursor){ 
     var selection = doc.getSelection(); 

     /* Get all elements selected */ 
     var elements = selection.getRangeElements(); 

     if(elements[0]){ 
      var element = elements[0].getElement(); 
      var index; 
      var previousElement = element.getPreviousSibling(); 
      var fakedElement = false; 
      var position; 

      /* If the element is type TEXT you can't get index from getChildIndex. */ 
      if(element.getType().toString() == "TEXT"){ 
       index = elements[0].getStartOffset(); 
       if(element.getText() === " "){ 
        element = doc.insertParagraph(index, ""); 
        fakedElement = true; 
       } 
      } else { 
       index = element.getParent().getChildIndex(element); 
      } 

      /* If the selected element is an image, we need to append a fake paragraph to keep the cursor poisition. Dont worry, this will be removed later. */ 
      if(elements.length === 1 && element.getType().toString() == "INLINE_IMAGE"){ 
       element = doc.insertParagraph(index, ""); 
       fakedElement = true; 
      } 

      /* Go through each element and remove it. */ 
      elements.forEach(function (element, key) { 
       var text; 
       if(element.getElement().editAsText){ 
        if(element.isPartial()){ 
         text = element.getElement().editAsText(); 
         text.deleteText(element.getStartOffset(), element.getEndOffsetInclusive()); 
        } else { 
         doc.appendParagraph(''); // Create empty paragraph since you can't delete last paragraph. 
         text = element.getElement().removeFromParent(); 
        } 
       } else { 
        element.getElement().removeFromParent(); 
       } 
      }); 

      if(body.getNumChildren() === 1){ 
       paragraph = doc.getBody().appendParagraph(''); 
       position = doc.newPosition(paragraph, 0); 
       doc.setCursor(position); 
      } else if(element && !element.getParent() && previousElement){ 
       element = previousElement; 
       index = element.getParent().getChildIndex(element); 
      } else if(body.editAsText().getText().length === 0){ 
       paragraph = doc.getBody().appendParagraph(''); 
       position = doc.newPosition(paragraph, 0); 
       doc.setCursor(position); 
      } else { 
       position = doc.newPosition(element, index); 
      } 

      if(!position){ 
       paragraph = doc.getBody().appendParagraph(''); 
       position = doc.newPosition(paragraph, 0); 
       doc.setCursor(position); 
      } 

      /* Move position of cursor to the new position */ 
      doc.setCursor(position); 

      /* Update cursor variable since its now available */ 
      cursor = doc.getCursor(); 

      /* If a placeholder element was created to keep the position, remove it. */ 
      if(fakedElement){ 
       element.removeFromParent(); 
      } 
     } 
    } 

    /* Insert image */ 
    var image = body.appendImage(blob); 
    cursor.insertInlineImage(image); 
    image.removeFromParent(); 

    return true; 
} 
1

私はドキュメント内のものを見つけるのに役立つスクリプトを持っています。実際、私は昨夜、Google Docs用の封筒プリンタスクリプトを作成するために使っていました。 ここにはlinkがあります。私はいつも私の特定のニーズに合わせてそれを変更していますので、自由にお楽しみください。それはあまりにもイメージを見つけるのに役立ちます。

関連する問題