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();
        }
    }
}

Источник: /questions/6303374/google-slides-kak-avtomaticheski-obnovlyat-diagrammyi-svyazannyie-s-elektronnoj-tablitsej-g/6303386#6303386

Формы / Столы

Нет: https://issuetracker.google.com/issues/64027131

Связанная таблица

По состоянию на август 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());
}