如何将幻灯片从一个演示文稿复制到另一个?
How to copy a slide from one presentation to another?
我正在尝试从源演示文稿中复制幻灯片并将它们附加到目标演示文稿的末尾。我在 SO 上搜索了解决方案,但他们使用 google 应用程序脚本。我正在寻找可以使用 google 幻灯片或 google 驱动器 REST API.
的解决方案
到目前为止我尝试的是获取源演示文稿幻灯片的每个元素并使用批量更新将它们添加到目标演示文稿中,但显然这很乏味并且不能涵盖所有情况。
有没有人有任何可能的方法来执行此任务?
遗憾的是,目前阶段还没有直接复制一张幻灯片的方法(类似于SheetsAPI的copyTo方法)到其他Google张幻灯片。因此,为了将幻灯片复制到其他幻灯片,我认为有 2 个解决方法。
- 通过get方法获取幻灯片中的所有对象和格式后,创建新幻灯片并使用batchUpdate方法放置对象。
- 使用Google Apps Script创建一个API,因为GAS的幻灯片服务有直接复制幻灯片的方法。
我推荐后者,因为我认为前者会是复杂的脚本。所以我想为后一种解决方法提出一个示例脚本。
当您使用此脚本时,请按照以下流程进行操作。
准备流程
- 登录到 Google 驱动器。 https://drive.google.com/drive/my-drive
- 创建新的独立项目。
- 请在 https://script.google.com/ 创建新项目。
- 设置项目名称并复制并粘贴以下示例脚本。
- 部署网络应用程序。
- 在脚本编辑器上,通过"Publish" -> "Deploy as web app"打开一个对话框。
- Select "Me" 对于 "Execute the app as:".
- Select "Anyone, even anonymous" 对于 "Who has access to the app:".
- 单击 "Deploy" 按钮作为新按钮 "Project version"。
- 自动打开"Authorization required"的对话框。
- 点击"Review Permissions"。
- Select自己的账号。
- 在 "This app isn't verified" 单击 "Advanced"。
- 点击"Go to ### project name ###(unsafe)"
- 单击 "Allow" 按钮。
- 复制"Current web app URL:"。
- 就像
https://script.google.com/macros/s/#####/exec
。
- 点击"OK"。
通过此流程,Web 应用程序部署为自己的 API。在此示例中,"Anyone, even anonymous" for "Who has access to the app:" 用作测试。如果你想使用访问令牌,请修改这里。您可以在下方"References".
查看详细信息
示例脚本
Google 应用程序脚本:
function doGet(e) {
var srcId = e.parameters.srcId;
var dstId = e.parameters.dstId;
var srcPage = e.parameters.srcPage;
var srcSlide = SlidesApp.openById(srcId);
var dstSlide = SlidesApp.openById(dstId);
var copySlide = srcSlide.getSlides()[srcPage - 1];
dstSlide.appendSlide(copySlide);
return ContentService.createTextOutput("Done.");
}
curl 命令:
部署 Web 应用程序后,您可以使用自己的 Web 应用程序 API。请求已部署的 Web 应用程序的示例 curl 如下。
在使用之前,请设置幻灯片的源和目标文件 ID。当您要复制源幻灯片的第一页时,请将 1
设置为 srcPage
。并且还请设置上面检索到的端点。
curl -GL \
-d "srcId=### fileId of source Slides ###" \
-d "dstId=### fileId of destination Slides ###" \
-d "srcPage=1" \
"https://script.google.com/macros/s/#####/exec"
当此命令为运行时,返回Done.
。届时,您可以在目标幻灯片中看到附加到最后一页的幻灯片。
参考资料
我正在尝试从源演示文稿中复制幻灯片并将它们附加到目标演示文稿的末尾。我在 SO 上搜索了解决方案,但他们使用 google 应用程序脚本。我正在寻找可以使用 google 幻灯片或 google 驱动器 REST API.
的解决方案到目前为止我尝试的是获取源演示文稿幻灯片的每个元素并使用批量更新将它们添加到目标演示文稿中,但显然这很乏味并且不能涵盖所有情况。
有没有人有任何可能的方法来执行此任务?
遗憾的是,目前阶段还没有直接复制一张幻灯片的方法(类似于SheetsAPI的copyTo方法)到其他Google张幻灯片。因此,为了将幻灯片复制到其他幻灯片,我认为有 2 个解决方法。
- 通过get方法获取幻灯片中的所有对象和格式后,创建新幻灯片并使用batchUpdate方法放置对象。
- 使用Google Apps Script创建一个API,因为GAS的幻灯片服务有直接复制幻灯片的方法。
我推荐后者,因为我认为前者会是复杂的脚本。所以我想为后一种解决方法提出一个示例脚本。
当您使用此脚本时,请按照以下流程进行操作。
准备流程
- 登录到 Google 驱动器。 https://drive.google.com/drive/my-drive
- 创建新的独立项目。
- 请在 https://script.google.com/ 创建新项目。
- 设置项目名称并复制并粘贴以下示例脚本。
- 部署网络应用程序。
- 在脚本编辑器上,通过"Publish" -> "Deploy as web app"打开一个对话框。
- Select "Me" 对于 "Execute the app as:".
- Select "Anyone, even anonymous" 对于 "Who has access to the app:".
- 单击 "Deploy" 按钮作为新按钮 "Project version"。
- 自动打开"Authorization required"的对话框。
- 点击"Review Permissions"。
- Select自己的账号。
- 在 "This app isn't verified" 单击 "Advanced"。
- 点击"Go to ### project name ###(unsafe)"
- 单击 "Allow" 按钮。
- 复制"Current web app URL:"。
- 就像
https://script.google.com/macros/s/#####/exec
。
- 就像
- 点击"OK"。
通过此流程,Web 应用程序部署为自己的 API。在此示例中,"Anyone, even anonymous" for "Who has access to the app:" 用作测试。如果你想使用访问令牌,请修改这里。您可以在下方"References".
查看详细信息示例脚本
Google 应用程序脚本:
function doGet(e) {
var srcId = e.parameters.srcId;
var dstId = e.parameters.dstId;
var srcPage = e.parameters.srcPage;
var srcSlide = SlidesApp.openById(srcId);
var dstSlide = SlidesApp.openById(dstId);
var copySlide = srcSlide.getSlides()[srcPage - 1];
dstSlide.appendSlide(copySlide);
return ContentService.createTextOutput("Done.");
}
curl 命令:
部署 Web 应用程序后,您可以使用自己的 Web 应用程序 API。请求已部署的 Web 应用程序的示例 curl 如下。
在使用之前,请设置幻灯片的源和目标文件 ID。当您要复制源幻灯片的第一页时,请将 1
设置为 srcPage
。并且还请设置上面检索到的端点。
curl -GL \
-d "srcId=### fileId of source Slides ###" \
-d "dstId=### fileId of destination Slides ###" \
-d "srcPage=1" \
"https://script.google.com/macros/s/#####/exec"
当此命令为运行时,返回Done.
。届时,您可以在目标幻灯片中看到附加到最后一页的幻灯片。