我有一个 Google 幻灯片演示文稿,其中有一些链接到 Google 表格中的数据的单元格/表格。目前,我必须手动单击每个链接的单元格/表格来更新值。我需要一个用于自动更新/批量更新/刷新这些链接的 Google 幻灯片脚本,以便值/表格自动更新。那可能吗?
4 回答
是和不是。
图表
是的!这些可以批量更新:
function onOpen() {
SlidesApp.getUi() // Or DocumentApp or FormApp.
.createMenu('Update Charts')
.addItem("Update now !!!!!", 'refreshCharts').addToUi();
}
function refreshCharts(){
var gotSlides = SlidesApp.getActivePresentation().getSlides();
for (var i = 0; i < gotSlides.length; i++) {
var slide = gotSlides[i];
var sheetsCharts = slide.getSheetsCharts();
for (var k = 0; k < sheetsCharts.length; k++) {
var shChart = sheetsCharts[k];
shChart.refresh();
}
}
}
来源:https ://stackoverflow.com/a/48254442/
形状/表格
否:https ://issuetracker.google.com/issues/64027131
从谷歌更新 24/5/2019
https://gsuiteupdates.googleblog.com/2019/05/bulk-update-docs-slides.html
以下示例设置假设有五张带有一些链接图表的幻灯片:
- 第一张幻灯片 - 主幻灯片标题/副标题(无图表)
- 第二张幻灯片 - 包含从数据透视表的图表链接的图表,该图表计算了研发人员以及他们计划从 Google 表单响应表中执行的操作
- 第三张幻灯片 - 包含从数据透视表的图表链接的图表,该图表计算 IME 员工以及他们计划从 Google 表单响应表中执行的操作
- 第四张幻灯片 - 包含从数据透视表的图表链接的图表,该图表计算 PMO 工作人员以及他们计划从 Google 表单响应表中执行的操作
- 第五张幻灯片 - 包含从数据透视表的图表链接的图表,该图表计算员工总数以及他们计划从 Google 表单响应表中执行的操作
下面的函数将使用链接图表更新幻灯片。要使其工作,它需要高级 Google 服务:Google 幻灯片 API https://developers.google.com/slides/。
您可以从您的Google Apps 脚本 IDE下激活此高级功能Resources > Advanced Google Services... > Google Slides API
。API 版本设置为v1
. 如果你不启用它,脚本会抱怨Slides is not defined at updateSlideCharts(...)
RefreshSheetsChartRequest
有关Google Slides API v1的更多详细信息,请参阅以下链接: https ://developers.google.com/slides/reference/rest/v1/presentations/request#RefreshSheetsChartRequest
function updateSlideCharts() {
var presentation = SlidesApp.openById(YOUR_SLIDE_ID); //you need to get this slide id from your slide URL
//if empty
if (presentation == null) throw new Error('Presentation was not found');
Logger.log("%s id = %s", presentation.getName(), presentation.getId());
var slides = presentation.getSlides();
if (slides == null) throw new Error('Slides were not found');
Logger.log("Total of slides in %s: %d", presentation.getName(), slides.length);
var presentationId = presentation.getId();
var presentationRndChartId = slides[1].getSheetsCharts()[0].getObjectId();
Logger.log("ObjectId of \"%s\": %s", slides[1].getSheetsCharts()[0].getTitle(), presentationRndChartId);
var presentationImeChartId = slides[2].getSheetsCharts()[0].getObjectId();
Logger.log("ObjectId of \"%s\": %s", slides[2].getSheetsCharts()[0].getTitle(), presentationImeChartId);
var presentationPmoChartId = slides[3].getSheetsCharts()[0].getObjectId();
Logger.log("ObjectId of \"%s\": %s", slides[3].getSheetsCharts()[0].getTitle(), presentationPmoChartId);
var presentationStaffChartId = slides[4].getSheetsCharts()[0].getObjectId();
Logger.log("ObjectId of \"%s\": %s", slides[4].getSheetsCharts()[0].getTitle(), presentationStaffChartId);
var requests = [{
refreshSheetsChart: {
objectId: presentationRndChartId
}
}];
// Execute the request.
var batchUpdateResponse = Slides.Presentations.batchUpdate({
requests: requests
}, presentationId);
Logger.log('Refreshed linked Sheets charts for \"%s\"', slides[1].getSheetsCharts()[0].getTitle());
requests = [{
refreshSheetsChart: {
objectId: presentationImeChartId
}
}];
// Execute the request.
batchUpdateResponse = Slides.Presentations.batchUpdate({
requests: requests
}, presentationId);
Logger.log('Refreshed linked Sheets charts for \"%s\"', slides[2].getSheetsCharts()[0].getTitle());
requests = [{
refreshSheetsChart: {
objectId: presentationPmoChartId
}
}];
// Execute the request.
batchUpdateResponse = Slides.Presentations.batchUpdate({
requests: requests
}, presentationId);
Logger.log('Refreshed linked Sheets charts for \"%s\"', slides[3].getSheetsCharts()[0].getTitle());
var requests = [{
refreshSheetsChart: {
objectId: presentationStaffChartId
}
}];
// Execute the request.
var batchUpdateResponse = Slides.Presentations.batchUpdate({
requests: requests
}, presentationId);
Logger.log('Refreshed linked Sheets charts for \"%s\"', slides[4].getSheetsCharts()[0].getTitle());
}
有没有人让这个工作?
function refreshCharts(){
var gotSlides = SlidesApp.getActivePresentation().getSlides();
for (var i = 0; i < gotSlides.length; i++) {
var slide = gotSlides[i];
var sheetsCharts = slide.getSheetsCharts();
for (var k = 0; k < sheetsCharts.length; k++) {
var shChart = sheetsCharts[k];
shChart.refresh();
}
}
}
我刚刚收到此错误消息“无法刷新图表。请确认该图表是 Google 表格中的有效图表。”
链接表
截至 2021 年 8 月,仍然没有.refresh()
链接表的功能,但如果您的用例允许您在脚本编写时知道源电子表格和范围,您可以通过读取文本值、字体颜色、字体样式来更新链接表,等,从电子表格并将它们写入表格。像这样的东西:
function updateSheetsChart()
{
// The range on the source spreadsheet
var sourceRange = SpreadsheetApp.openById(SOURCE_SPREADSHEET_ID).getRange(SOURCE_TABLE_RANGE)
var source = {
'values': sourceRange.getDisplayValues(),
'backgrounds': sourceRange.getBackgrounds(),
'textStyles': sourceRange.getTextStyles(),
'fontColors': sourceRange.getFontColors()
}
// The linked table on the presentation
var table = SlidesApp.getActivePresentation().getPageElementById(SHEETS_TABLE_OBJECT_ID).asTable()
var columnCount = table.getNumColumns()
var rowCount = table.getNumRows()
for (var col = 0; col < columnCount; col++)
{
for (var row = 0; row < rowCount; row++)
{
var cell = table.getCell(row, col)
// Cell text
var cellText = cell.getText()
cellText.setText(source.values[row][col])
// Background color
cell.getFill().setSolidFill(source.backgrounds[row][col])
// Font style (bold)
var cellTextStyle = cellText.getTextStyle()
cellTextStyle.setBold(source.textStyles[row][col].isBold())
// Text color
cellTextStyle.setForegroundColor(source.fontColors[row][col])
}
}
}
您可以为字体大小、斜体、链接 URL 等添加更多行。有关相应方法,请参阅Range、Sheets TextStyle和Slides TextStyle类的文档。
有很多限制:例如,这不会复制完整的富文本(一个单元格中有多种颜色或字体样式)。
另请参阅此答案以获得更简单的解决方法(但它不会传输单元格格式)。