如何使用应用程序脚本将连接线添加到 google 幻灯片演示文稿?
How do you add a connecting line to a google slides presentation using app scripts?
我正在尝试关注 Google 幻灯片 API 参考 material; 'Lines'
但我一定错过了什么。我已经使用脚本成功添加了矩形形状,但现在我想用一条线将它们连接起来。这是我目前所拥有的:
function addConnections()
{
var myPresentation = SlidesApp.getActivePresentation()
var presentationId = myPresentation.getId();
var slideId = myPresentation.getSlides()[0].getObjectId()
var requests = []
requests.push(
{
createLine:
{
lineProperties:
{
startConnection:
{
connectedObjectId: 'queryD200',
connectionSiteIndex: 3
},
endConnection:
{
connectedObjectId: 'queryD201',
connectionSiteIndex: 0
}
},
lineType: 'CURVED_CONNECTOR_2'
}
})
Slides.Presentations.batchUpdate({requests: requests}, presentationId);
}
我得到的错误是:
'requests[0].create_line' 处的未知名称 "lineType":找不到字段。
'requests[0].create_line' 处的未知名称 "lineProperties":找不到字段。
但这些是 google 在其文档中使用的确切字段名称。
我试过带引号和不带引号。请帮忙!谢谢
我相信你的目标如下。
- 您想在 Google 幻灯片上用一条线连接 2 个形状。
- 您想使用带 Google Apps 脚本的幻灯片 API 来实现此目的。
为此,这个答案怎么样?
修改点:
createLine
中没有属性个lineProperties
。
LineProperties
中没有属性个lineType
。
- 在您的请求正文中,
fields
的 属性 未被使用。
- 为了用一条线连接2个形状,在你的情况下,下面的流程怎么样?
- 使用
createLine
创建线对象。
- 使用
lineProperties
更新线对象。
lineProperties
可用于使用 UpdateLinePropertiesRequest
的现有线对象。
修改后的脚本:
当你的脚本修改后,变成如下。
function addConnections() {
var myPresentation = SlidesApp.getActivePresentation()
var presentationId = myPresentation.getId();
var slideId = myPresentation.getSlides()[0].getObjectId();
var lineObjectId = "sampleline001";
var startShape = "queryD200";
var endShape = "queryD201";
var requests = [
{createLine: {
objectId: lineObjectId,
lineCategory: "CURVED",
elementProperties: {pageObjectId: slideId, size: {height: {magnitude: 1 ,unit: "PT"}, width: {magnitude: 1, unit: "PT"}}}
}},
{updateLineProperties: {
objectId: lineObjectId,
lineProperties: {startConnection: {connectedObjectId: startShape}, endConnection: {connectedObjectId: endShape}},
fields: "startConnection,endConnection"
}}
];
Slides.Presentations.batchUpdate({requests: requests}, presentationId);
}
示例脚本:
作为另一种模式,您也可以使用 Slides service 而不是幻灯片 API。
function addConnections() {
var myPresentation = SlidesApp.getActivePresentation()
var presentationId = myPresentation.getId();
var slide = myPresentation.getSlides()[0];
var slideId = slide.getObjectId();
var startShape = "queryD200";
var endShape = "queryD201";
var line = slide.insertLine(
SlidesApp.LineCategory.CURVED,
slide.getPageElementById(startShape).asShape().getConnectionSites()[0],
slide.getPageElementById(endShape).asShape().getConnectionSites()[0]
);
}
结果:
当上面两个脚本都是运行2个形状时,可以得到如下结果
注:
- 我不确定形状对象 ID
queryD200
和 queryD201
是否正确。所以请注意这一点。
参考文献:
@Tanaike
我提供了我最终使用的代码,以防它对其他人有用。
'arrayCon' 是我需要与线连接的 elementId 对数组。有超过 400 对,但将它们一起批处理成一个请求数组非常有效,只需不超过 3 或 4 秒即可完成。
for(var i = 0;i<arrayCon.length;i++)
{
var lineId = 'lineConn'+i;
var startCon = arrayCon[i][0]
var endCon = arrayCon[i][1]
requests.push(
{
createLine:
{
objectId: lineId,
lineCategory: 'CURVED',
elementProperties: {pageObjectId: slideId, size: {height: {magnitude: 1 ,unit: "PT"}, width: {magnitude: 1, unit: "PT"}}}
}
})
requests.push(
{
updateLineProperties:
{
objectId: lineId,
fields: 'startConnection,endConnection',
lineProperties:
{
startConnection:
{
connectedObjectId: startCon,
connectionSiteIndex: 2
},
endConnection:
{
connectedObjectId: endCon,
connectionSiteIndex: 0
}
}
}
})
}
Slides.Presentations.batchUpdate({requests: requests}, presentationId);
}
我正在尝试关注 Google 幻灯片 API 参考 material; 'Lines' 但我一定错过了什么。我已经使用脚本成功添加了矩形形状,但现在我想用一条线将它们连接起来。这是我目前所拥有的:
function addConnections()
{
var myPresentation = SlidesApp.getActivePresentation()
var presentationId = myPresentation.getId();
var slideId = myPresentation.getSlides()[0].getObjectId()
var requests = []
requests.push(
{
createLine:
{
lineProperties:
{
startConnection:
{
connectedObjectId: 'queryD200',
connectionSiteIndex: 3
},
endConnection:
{
connectedObjectId: 'queryD201',
connectionSiteIndex: 0
}
},
lineType: 'CURVED_CONNECTOR_2'
}
})
Slides.Presentations.batchUpdate({requests: requests}, presentationId);
}
我得到的错误是: 'requests[0].create_line' 处的未知名称 "lineType":找不到字段。 'requests[0].create_line' 处的未知名称 "lineProperties":找不到字段。
但这些是 google 在其文档中使用的确切字段名称。 我试过带引号和不带引号。请帮忙!谢谢
我相信你的目标如下。
- 您想在 Google 幻灯片上用一条线连接 2 个形状。
- 您想使用带 Google Apps 脚本的幻灯片 API 来实现此目的。
为此,这个答案怎么样?
修改点:
createLine
中没有属性个lineProperties
。LineProperties
中没有属性个lineType
。- 在您的请求正文中,
fields
的 属性 未被使用。 - 为了用一条线连接2个形状,在你的情况下,下面的流程怎么样?
- 使用
createLine
创建线对象。 - 使用
lineProperties
更新线对象。lineProperties
可用于使用UpdateLinePropertiesRequest
的现有线对象。
- 使用
修改后的脚本:
当你的脚本修改后,变成如下。
function addConnections() {
var myPresentation = SlidesApp.getActivePresentation()
var presentationId = myPresentation.getId();
var slideId = myPresentation.getSlides()[0].getObjectId();
var lineObjectId = "sampleline001";
var startShape = "queryD200";
var endShape = "queryD201";
var requests = [
{createLine: {
objectId: lineObjectId,
lineCategory: "CURVED",
elementProperties: {pageObjectId: slideId, size: {height: {magnitude: 1 ,unit: "PT"}, width: {magnitude: 1, unit: "PT"}}}
}},
{updateLineProperties: {
objectId: lineObjectId,
lineProperties: {startConnection: {connectedObjectId: startShape}, endConnection: {connectedObjectId: endShape}},
fields: "startConnection,endConnection"
}}
];
Slides.Presentations.batchUpdate({requests: requests}, presentationId);
}
示例脚本:
作为另一种模式,您也可以使用 Slides service 而不是幻灯片 API。
function addConnections() {
var myPresentation = SlidesApp.getActivePresentation()
var presentationId = myPresentation.getId();
var slide = myPresentation.getSlides()[0];
var slideId = slide.getObjectId();
var startShape = "queryD200";
var endShape = "queryD201";
var line = slide.insertLine(
SlidesApp.LineCategory.CURVED,
slide.getPageElementById(startShape).asShape().getConnectionSites()[0],
slide.getPageElementById(endShape).asShape().getConnectionSites()[0]
);
}
结果:
当上面两个脚本都是运行2个形状时,可以得到如下结果
注:
- 我不确定形状对象 ID
queryD200
和queryD201
是否正确。所以请注意这一点。
参考文献:
@Tanaike 我提供了我最终使用的代码,以防它对其他人有用。 'arrayCon' 是我需要与线连接的 elementId 对数组。有超过 400 对,但将它们一起批处理成一个请求数组非常有效,只需不超过 3 或 4 秒即可完成。
for(var i = 0;i<arrayCon.length;i++)
{
var lineId = 'lineConn'+i;
var startCon = arrayCon[i][0]
var endCon = arrayCon[i][1]
requests.push(
{
createLine:
{
objectId: lineId,
lineCategory: 'CURVED',
elementProperties: {pageObjectId: slideId, size: {height: {magnitude: 1 ,unit: "PT"}, width: {magnitude: 1, unit: "PT"}}}
}
})
requests.push(
{
updateLineProperties:
{
objectId: lineId,
fields: 'startConnection,endConnection',
lineProperties:
{
startConnection:
{
connectedObjectId: startCon,
connectionSiteIndex: 2
},
endConnection:
{
connectedObjectId: endCon,
connectionSiteIndex: 0
}
}
}
})
}
Slides.Presentations.batchUpdate({requests: requests}, presentationId);
}