Google слайды автоматически обновляет ссылки / таблицы, связанные с Google листом
У меня есть презентация слайдов 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();
}
}
}
Формы / Столы
Связанная таблица
По состоянию на август 2021 г.
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, чтобы узнать о соответствующих методах.
Существует множество ограничений: например, при этом не будет копироваться полный форматированный текст (несколько цветов или стилей шрифта в одной ячейке).
Также см. Этот ответ для более простого обходного пути (но он не передает форматирование ячейки).
Кто-нибудь получил это на работу?
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 Sheets".
В следующем примере настройки предполагается, что есть пять слайдов с некоторыми связанными диаграммами:
- первый слайд - заголовок / подзаголовок основного слайда (без диаграммы)
- второй слайд - содержит диаграмму, связанную с диаграммой сводной таблицы, в которой подсчитываются сотрудники R&D и их планы на листе ответов Google Form
- третий слайд - содержит диаграмму, связанную с диаграммой сводной таблицы, в которой подсчитываются сотрудники IME и их планы на листе ответов Google Form
- четвертый слайд - содержит диаграмму, связанную с диаграммой сводной таблицы, в которой подсчитывается персонал PMO и их планы на листе ответов Google Form
- пятый слайд - содержит диаграмму, связанную с диаграммой сводной таблицы, в которой подсчитывается общее количество сотрудников и их планы на листе ответов Google Form
Функция ниже обновит слайды связанными диаграммами. Для его работы требуются расширенные службы Google: API Google Slides https://developers.google.com/slides/.
Вы можете активировать эту расширенную функцию в своей среде разработки скрипта Google Apps в разделе
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());
}