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!
google-apps-script google-docs google-docs-api
add a comment |
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!
google-apps-script google-docs google-docs-api
add a comment |
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!
google-apps-script google-docs google-docs-api
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
google-apps-script google-docs google-docs-api
edited Nov 26 at 0:38
Tanaike
19.2k2921
19.2k2921
asked Nov 22 at 10:40
jperry1147
1209
1209
add a comment |
add a comment |
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 usegetRangeElements()
.
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:
Output:
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.
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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 usegetRangeElements()
.
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:
Output:
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.
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
add a comment |
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 usegetRangeElements()
.
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:
Output:
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.
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
add a comment |
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 usegetRangeElements()
.
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:
Output:
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.
- 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 usegetRangeElements()
.
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:
Output:
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.
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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