- Если текстовое поле
textBoxID
не существует, вы хотите создать новое текстовое поле. - Когда текстовое поле
textBoxID
существует, вы хотите изменить значение в текстовом поле. - О создании текстового поля вы хотите использовать функцию
newTextBox
. - Вы хотите добиться этого с помощью скрипта Google Apps.
- Вы уже смогли создайте новое текстовое поле, используя ваш скрипт.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Пример ситуации:
В этой модификации, в качестве примера ситуации, начальное значение текстового поля равно 0
. И когда текстовое поле не существует на слайде, создается новое текстовое поле. Когда текстовое поле существует на слайде, значение текстового поля изменяется. В этом случае к существующему значению добавляется 1
.
Шаблон 1:
В этом шаблоне используется ваш скрипт newTextBox
. Прежде чем использовать это, пожалуйста, установите переменные presentationId
, pageId
и data
. data
является примером значения.
Пример сценария:
// Please set following variables.
const presentationId = "###";
const pageId = "###";
function newTextBox(textBoxID, xpos, ypos, textBoxText) {
var elementId = textBoxID;
var requests = [
{createShape: {objectId: textBoxID, shapeType: 'TEXT_BOX', elementProperties: {pageObjectId: pageId, size: {width: {magnitude: 53.5748, unit: 'PT'}, height: {magnitude: 22.6772, unit: 'PT'}}, transform: {scaleX: 1, scaleY: 1, translateX: xpos, translateY: ypos, unit: 'PT'}}}},
{insertText: {objectId: textBoxID, insertionIndex: 0, text: textBoxText}}
];
var createTextboxWithTextResponse = Slides.Presentations.batchUpdate({requests: requests}, presentationId);
var createShapeResponse = createTextboxWithTextResponse.replies[0].createShape;
Logger.log('Created textbox with ID: %s', createShapeResponse.objectId);
}
// Please run this function.
function myFunction() {
var data = [
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
];
const slide = SlidesApp.openById(presentationId).getSlideById(pageId);
const obj = slide.getShapes().reduce((o, e) => {
o[e.getObjectId()] = e;
return o;
}, {});
ar.forEach(({textBoxID, xpos, ypos, textBoxText}) => {
if (textBoxID in obj) {
const oldValue = obj[textBoxID].getText().asString(); // Here, you can retrieve the value of existing textbox.
const newValue = Number(oldValue) + 1;
obj[textBoxID].getText().replaceAllText(oldValue, newValue);
} else {
newTextBox(textBoxID, xpos, ypos, textBoxText);
}
});
}
Шаблон 2:
В этом шаблоне создается одно тело запроса с использованием значений data
и используйте его для метода batchUpdate. При этом используется только один вызов API. Прежде чем использовать это, пожалуйста, установите переменные presentationId
, pageId
и data
. data
является примером значения.
Пример сценария:
function myFunction() {
// Please set following variables.
var data = [
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
{textBoxID: "###", xpos: ###, ypos: ###, textBoxText: "0"},
];
const presentationId = "###";
const pageId = "###";
const slide = SlidesApp.openById(presentationId).getSlideById(pageId);
const obj = slide.getShapes().reduce((o, e) => {
o[e.getObjectId()] = e;
return o;
}, {});
const requests = data.reduce((ar, {textBoxID, xpos, ypos, textBoxText}) => {
if (textBoxID in obj) {
const oldValue = obj[textBoxID].getText().asString(); // Here, you can retrieve the value of existing textbox.
const newValue = Number(oldValue) + 1;
obj[textBoxID].getText().replaceAllText(oldValue, newValue);
} else {
ar.push([
{createShape: {objectId: textBoxID, shapeType: 'TEXT_BOX', elementProperties: {pageObjectId: pageId, size: {width: {magnitude: 53.5748, unit: 'PT'}, height: {magnitude: 22.6772, unit: 'PT'}}, transform: {scaleX: 1, scaleY: 1, translateX: xpos, translateY: ypos, unit: 'PT'}}}},
{insertText: {objectId: textBoxID, insertionIndex: 0, text: textBoxText}}
]);
}
return ar;
}, []);
if (requests.length > 0) {
var createTextboxWithTextResponse = Slides.Presentations.batchUpdate({requests: requests}, presentationId);
Logger.log(createTextboxWithTextResponse)
}
}
Примечание:
- В вашем сценарии используется
console.log
. Поэтому я подумал, что ваш редактор сценариев может использовать для включения V8 runtime. Поэтому я изменил скрипт как V8. Пожалуйста, будьте осторожны. - Это простой модифицированный скрипт. Поэтому, пожалуйста, измените это для вашей реальной ситуации.
Ссылки:
Если я неправильно понял ваш вопрос, и это не то направление, которое вы хотите, я прошу прощения.