Replace image with table in google doc











up vote
1
down vote

favorite












I want to replace a selected image with a table containing that image in a Google Doc. No table is inserted into the google doc when I run the code.



    function insertImage(ID, caption) {
var selection = DocumentApp.getActiveDocument().getSelection();
if (selection) {
var elements = selection.getSelectedElements();
var tImg = elements[0].getElement();
var cells = [
[tImg.asInlineImage(), ID+': '+caption]
];
var parentElement = tImg.getParent();
parentElement.insertTable(parentElement.getChildIndex(tImg) + 1, cells)
tImg.removeFromParent();
}
}


The image isn't removed and the table isn't added. Thanks!










share|improve this question




























    up vote
    1
    down vote

    favorite












    I want to replace a selected image with a table containing that image in a Google Doc. No table is inserted into the google doc when I run the code.



        function insertImage(ID, caption) {
    var selection = DocumentApp.getActiveDocument().getSelection();
    if (selection) {
    var elements = selection.getSelectedElements();
    var tImg = elements[0].getElement();
    var cells = [
    [tImg.asInlineImage(), ID+': '+caption]
    ];
    var parentElement = tImg.getParent();
    parentElement.insertTable(parentElement.getChildIndex(tImg) + 1, cells)
    tImg.removeFromParent();
    }
    }


    The image isn't removed and the table isn't added. Thanks!










    share|improve this question


























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      I want to replace a selected image with a table containing that image in a Google Doc. No table is inserted into the google doc when I run the code.



          function insertImage(ID, caption) {
      var selection = DocumentApp.getActiveDocument().getSelection();
      if (selection) {
      var elements = selection.getSelectedElements();
      var tImg = elements[0].getElement();
      var cells = [
      [tImg.asInlineImage(), ID+': '+caption]
      ];
      var parentElement = tImg.getParent();
      parentElement.insertTable(parentElement.getChildIndex(tImg) + 1, cells)
      tImg.removeFromParent();
      }
      }


      The image isn't removed and the table isn't added. Thanks!










      share|improve this question















      I want to replace a selected image with a table containing that image in a Google Doc. No table is inserted into the google doc when I run the code.



          function insertImage(ID, caption) {
      var selection = DocumentApp.getActiveDocument().getSelection();
      if (selection) {
      var elements = selection.getSelectedElements();
      var tImg = elements[0].getElement();
      var cells = [
      [tImg.asInlineImage(), ID+': '+caption]
      ];
      var parentElement = tImg.getParent();
      parentElement.insertTable(parentElement.getChildIndex(tImg) + 1, cells)
      tImg.removeFromParent();
      }
      }


      The image isn't removed and the table isn't added. Thanks!







      google-apps-script google-docs google-docs-api






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 26 at 0:38









      Tanaike

      19.2k2921




      19.2k2921










      asked Nov 22 at 10:40









      jperry1147

      1209




      1209
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote



          accepted











          • You want to replace an selected image to a table.

          • You want to the selected image to the 1st column of cell of the inserted table. the text is put in the 2nd column.


          If my understanding of your question is correct, how about this modification?



          Modification points:




          • Method of insertTable() is the method of Class Body.

          • The place of image is required to be retrieved as the child index of the document body.

          • Image is inserted to the cell of the inserted table after the table was inserted.

          • In this modification, when the image is deleted, it deletes the paragraph of image. By this, the image can be replaced to the table without including the line break. This situation is the same with inserting the image in the cell.


          • getSelectedElements() was deprecated. So please use getRangeElements().


          When above points are reflected to the script, it becomes as follows.



          Modified script:



          function insertImage(ID, caption) {
          // ID = "sample ID"; // for sample
          // caption = "sample caption"; // for sample

          var doc = DocumentApp.getActiveDocument(); // Added
          var body = doc.getBody(); // Added
          var selection = doc.getSelection(); // Modified
          if (selection) {
          var elements = selection.getRangeElements(); // Modified
          var e = elements[0].getElement(); // Modified
          if (e.getType() == DocumentApp.ElementType.INLINE_IMAGE) { // Added
          var tImg = e.asInlineImage(); // Modified
          var parentElement = tImg.getParent();
          var cells = [["", ID + ': ' + caption]]; // Modified
          var table = body.insertTable(body.getChildIndex(parentElement), cells); // Modified
          var cell = table.getCell(0, 0); // Added
          cell.insertImage(0, tImg.getBlob()).getParent().asParagraph().getNextSibling().removeFromParent(); // Added
          tImg.getParent().asParagraph().removeFromParent(); // Modified
          }
          }
          }


          Input:

          enter image description here



          Output:

          enter image description here



          Note:




          • In your script, the 1st image of selected elements is used. So I followed to this.


          References:




          • insertTable()

          • insertImage()

          • getRangeElements()


          If this was not what you want, please tell me. I would like to modify it.






          share|improve this answer





















          • This does exactly what I needed - thank you!
            – jperry1147
            Nov 26 at 10:43










          • @jperry1147 I'm glad your issue was resolved. Thank you, too.
            – Tanaike
            Nov 26 at 22:34











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53429094%2freplace-image-with-table-in-google-doc%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








          up vote
          0
          down vote



          accepted











          • You want to replace an selected image to a table.

          • You want to the selected image to the 1st column of cell of the inserted table. the text is put in the 2nd column.


          If my understanding of your question is correct, how about this modification?



          Modification points:




          • Method of insertTable() is the method of Class Body.

          • The place of image is required to be retrieved as the child index of the document body.

          • Image is inserted to the cell of the inserted table after the table was inserted.

          • In this modification, when the image is deleted, it deletes the paragraph of image. By this, the image can be replaced to the table without including the line break. This situation is the same with inserting the image in the cell.


          • getSelectedElements() was deprecated. So please use getRangeElements().


          When above points are reflected to the script, it becomes as follows.



          Modified script:



          function insertImage(ID, caption) {
          // ID = "sample ID"; // for sample
          // caption = "sample caption"; // for sample

          var doc = DocumentApp.getActiveDocument(); // Added
          var body = doc.getBody(); // Added
          var selection = doc.getSelection(); // Modified
          if (selection) {
          var elements = selection.getRangeElements(); // Modified
          var e = elements[0].getElement(); // Modified
          if (e.getType() == DocumentApp.ElementType.INLINE_IMAGE) { // Added
          var tImg = e.asInlineImage(); // Modified
          var parentElement = tImg.getParent();
          var cells = [["", ID + ': ' + caption]]; // Modified
          var table = body.insertTable(body.getChildIndex(parentElement), cells); // Modified
          var cell = table.getCell(0, 0); // Added
          cell.insertImage(0, tImg.getBlob()).getParent().asParagraph().getNextSibling().removeFromParent(); // Added
          tImg.getParent().asParagraph().removeFromParent(); // Modified
          }
          }
          }


          Input:

          enter image description here



          Output:

          enter image description here



          Note:




          • In your script, the 1st image of selected elements is used. So I followed to this.


          References:




          • insertTable()

          • insertImage()

          • getRangeElements()


          If this was not what you want, please tell me. I would like to modify it.






          share|improve this answer





















          • This does exactly what I needed - thank you!
            – jperry1147
            Nov 26 at 10:43










          • @jperry1147 I'm glad your issue was resolved. Thank you, too.
            – Tanaike
            Nov 26 at 22:34















          up vote
          0
          down vote



          accepted











          • You want to replace an selected image to a table.

          • You want to the selected image to the 1st column of cell of the inserted table. the text is put in the 2nd column.


          If my understanding of your question is correct, how about this modification?



          Modification points:




          • Method of insertTable() is the method of Class Body.

          • The place of image is required to be retrieved as the child index of the document body.

          • Image is inserted to the cell of the inserted table after the table was inserted.

          • In this modification, when the image is deleted, it deletes the paragraph of image. By this, the image can be replaced to the table without including the line break. This situation is the same with inserting the image in the cell.


          • getSelectedElements() was deprecated. So please use getRangeElements().


          When above points are reflected to the script, it becomes as follows.



          Modified script:



          function insertImage(ID, caption) {
          // ID = "sample ID"; // for sample
          // caption = "sample caption"; // for sample

          var doc = DocumentApp.getActiveDocument(); // Added
          var body = doc.getBody(); // Added
          var selection = doc.getSelection(); // Modified
          if (selection) {
          var elements = selection.getRangeElements(); // Modified
          var e = elements[0].getElement(); // Modified
          if (e.getType() == DocumentApp.ElementType.INLINE_IMAGE) { // Added
          var tImg = e.asInlineImage(); // Modified
          var parentElement = tImg.getParent();
          var cells = [["", ID + ': ' + caption]]; // Modified
          var table = body.insertTable(body.getChildIndex(parentElement), cells); // Modified
          var cell = table.getCell(0, 0); // Added
          cell.insertImage(0, tImg.getBlob()).getParent().asParagraph().getNextSibling().removeFromParent(); // Added
          tImg.getParent().asParagraph().removeFromParent(); // Modified
          }
          }
          }


          Input:

          enter image description here



          Output:

          enter image description here



          Note:




          • In your script, the 1st image of selected elements is used. So I followed to this.


          References:




          • insertTable()

          • insertImage()

          • getRangeElements()


          If this was not what you want, please tell me. I would like to modify it.






          share|improve this answer





















          • This does exactly what I needed - thank you!
            – jperry1147
            Nov 26 at 10:43










          • @jperry1147 I'm glad your issue was resolved. Thank you, too.
            – Tanaike
            Nov 26 at 22:34













          up vote
          0
          down vote



          accepted







          up vote
          0
          down vote



          accepted







          • You want to replace an selected image to a table.

          • You want to the selected image to the 1st column of cell of the inserted table. the text is put in the 2nd column.


          If my understanding of your question is correct, how about this modification?



          Modification points:




          • Method of insertTable() is the method of Class Body.

          • The place of image is required to be retrieved as the child index of the document body.

          • Image is inserted to the cell of the inserted table after the table was inserted.

          • In this modification, when the image is deleted, it deletes the paragraph of image. By this, the image can be replaced to the table without including the line break. This situation is the same with inserting the image in the cell.


          • getSelectedElements() was deprecated. So please use getRangeElements().


          When above points are reflected to the script, it becomes as follows.



          Modified script:



          function insertImage(ID, caption) {
          // ID = "sample ID"; // for sample
          // caption = "sample caption"; // for sample

          var doc = DocumentApp.getActiveDocument(); // Added
          var body = doc.getBody(); // Added
          var selection = doc.getSelection(); // Modified
          if (selection) {
          var elements = selection.getRangeElements(); // Modified
          var e = elements[0].getElement(); // Modified
          if (e.getType() == DocumentApp.ElementType.INLINE_IMAGE) { // Added
          var tImg = e.asInlineImage(); // Modified
          var parentElement = tImg.getParent();
          var cells = [["", ID + ': ' + caption]]; // Modified
          var table = body.insertTable(body.getChildIndex(parentElement), cells); // Modified
          var cell = table.getCell(0, 0); // Added
          cell.insertImage(0, tImg.getBlob()).getParent().asParagraph().getNextSibling().removeFromParent(); // Added
          tImg.getParent().asParagraph().removeFromParent(); // Modified
          }
          }
          }


          Input:

          enter image description here



          Output:

          enter image description here



          Note:




          • In your script, the 1st image of selected elements is used. So I followed to this.


          References:




          • insertTable()

          • insertImage()

          • getRangeElements()


          If this was not what you want, please tell me. I would like to modify it.






          share|improve this answer













          • You want to replace an selected image to a table.

          • You want to the selected image to the 1st column of cell of the inserted table. the text is put in the 2nd column.


          If my understanding of your question is correct, how about this modification?



          Modification points:




          • Method of insertTable() is the method of Class Body.

          • The place of image is required to be retrieved as the child index of the document body.

          • Image is inserted to the cell of the inserted table after the table was inserted.

          • In this modification, when the image is deleted, it deletes the paragraph of image. By this, the image can be replaced to the table without including the line break. This situation is the same with inserting the image in the cell.


          • getSelectedElements() was deprecated. So please use getRangeElements().


          When above points are reflected to the script, it becomes as follows.



          Modified script:



          function insertImage(ID, caption) {
          // ID = "sample ID"; // for sample
          // caption = "sample caption"; // for sample

          var doc = DocumentApp.getActiveDocument(); // Added
          var body = doc.getBody(); // Added
          var selection = doc.getSelection(); // Modified
          if (selection) {
          var elements = selection.getRangeElements(); // Modified
          var e = elements[0].getElement(); // Modified
          if (e.getType() == DocumentApp.ElementType.INLINE_IMAGE) { // Added
          var tImg = e.asInlineImage(); // Modified
          var parentElement = tImg.getParent();
          var cells = [["", ID + ': ' + caption]]; // Modified
          var table = body.insertTable(body.getChildIndex(parentElement), cells); // Modified
          var cell = table.getCell(0, 0); // Added
          cell.insertImage(0, tImg.getBlob()).getParent().asParagraph().getNextSibling().removeFromParent(); // Added
          tImg.getParent().asParagraph().removeFromParent(); // Modified
          }
          }
          }


          Input:

          enter image description here



          Output:

          enter image description here



          Note:




          • In your script, the 1st image of selected elements is used. So I followed to this.


          References:




          • insertTable()

          • insertImage()

          • getRangeElements()


          If this was not what you want, please tell me. I would like to modify it.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 26 at 0:38









          Tanaike

          19.2k2921




          19.2k2921












          • This does exactly what I needed - thank you!
            – jperry1147
            Nov 26 at 10:43










          • @jperry1147 I'm glad your issue was resolved. Thank you, too.
            – Tanaike
            Nov 26 at 22:34


















          • This does exactly what I needed - thank you!
            – jperry1147
            Nov 26 at 10:43










          • @jperry1147 I'm glad your issue was resolved. Thank you, too.
            – Tanaike
            Nov 26 at 22:34
















          This does exactly what I needed - thank you!
          – jperry1147
          Nov 26 at 10:43




          This does exactly what I needed - thank you!
          – jperry1147
          Nov 26 at 10:43












          @jperry1147 I'm glad your issue was resolved. Thank you, too.
          – Tanaike
          Nov 26 at 22:34




          @jperry1147 I'm glad your issue was resolved. Thank you, too.
          – Tanaike
          Nov 26 at 22:34


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53429094%2freplace-image-with-table-in-google-doc%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

          Calculate evaluation metrics using cross_val_predict sklearn

          Insert data from modal to MySQL (multiple modal on website)