google-apps-script - 使用 Google App Script 创建新的幻灯片请求并修改创建的布局
问题描述
我正在创建工作表插件以将名称标签从 Google 工作表列表打印到 Google 幻灯片文档。一张幻灯片将包含名称标签和公司名称。创建幻灯片时我无法插入标题。
var dataRangeNotation = 'Customers!A2:M6';
var values = SpreadsheetApp.openById('').getRange(dataRangeNotation).getValues();
var presentationId = ''
var requests = []
// For each record, create a new merged presentation.
for (var i = 0; i < values.length; ++i) {
var row = values[i];
var customerName = row[0]; // name in column 1
var customerCompany = row[1]; // company description in column 2
var pageId = Utilities.getUuid();
var bodyId = Utilities.getUuid();
var titleID = Utilities.getUuid();
requests.push({
'createSlide': {
'objectId': pageId,
'insertionIndex': 0,
'slideLayoutReference': {
'predefinedLayout': 'TITLE'
},
"placeholderIdMappings": [
{
"layoutPlaceholder": {
"type": "TITLE",
"index": 0
},
"objectId": titleID,
},
{
"layoutPlaceholder": {
"type": "BODY",
"index": 0
},
"objectId": bodyId,
},
],
},
{
"insertText": {
"objectId": titleID,
"text": "This is my slide title",
},
},
});
},
var slide =
Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
Logger.log('Created Slide with ID: ' + slide.replies[0].createSlide.objectId);
布局 placeholerIdMappings 不起作用。我不想创建幻灯片然后循环幻灯片以更改幻灯片标题。寻找已经插入请求的方法。
解决方案
var dataRangeNotation = 'Customers!A2:M6';
var values = SpreadsheetApp.openById('ss').getRange(dataRangeNotation).getValues();
var presentationId = 'xxx'
var requests = []
// For each record, create a new merged presentation.
for (var i = 0; i < values.length; ++i) {
var pageId = Utilities.getUuid();
var bodyId = Utilities.getUuid();
var subtitleID = Utilities.getUuid();
requests.push(
{
"createSlide": {
"objectId": pageId,
"slideLayoutReference": {
'predefinedLayout': 'TITLE'
},
}
});
}
var slide =
Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
Logger.log('Created Slide with ID: ' + slide.replies[0].createSlide.objectId);
var preso = SlidesApp.openById(presentationId);
for (var i = 0; i < values.length; ++i) {
var row = values[i];
var customerName = row[0]; // name in column 1
var customerCompany = row[1];// case description in column 2
var [title, subtitle] = preso.getSlides()[i].getPageElements();
title.asShape().getText().setText(customerName);
subtitle.asShape().getText().setText(customerCompany);
}
这种循环可以解决问题,但由于 api 限制,它不适合大型更新。
推荐阅读
- html - 从Django中的任意数量的复选框插入表格
- python - 如何调用 API 但只获取 Python 中的一条特定信息
- string - 如何在 Kotlin 中字符串的字符之间添加斜杠?
- sql - ORA-28110: 策略函数或包 SCOTT.SEC_FUCTION 有错误
- python - 线性回归模型的二维输出
- pandas - Pandas 数据透视表可在不聚合的情况下转置列
- python - 当我在 rnn 模型中使用 for 循环时,向后失败
- maven - 有没有什么地方可以下载org.springframework.web?
- css - 使用 Angulars [ngStyle],我可以动态设置背景的不透明度而不影响覆盖文本吗?
- pointers - 作弊引擎 - 如何从 6 字节地址跟踪指针?