如何使用应用程序脚本向 Google 幻灯片演示文稿添加连接线?
2020-04-30
717
我正在尝试遵循 Google Slides API 参考资料; '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 在其文档中使用的确切字段名称。 我尝试了带引号和不带引号的两种方式。请帮忙!谢谢
2个回答
我认为您的目标如下。
- 您想在 Google Slides 上用一条线连接 2 个形状。
- 您想使用带有 Google Apps Script 的 Slides 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 服务 而不是 Slides 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
2020-05-01
@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);
}
Day4
2020-05-01