5

我有一个 Google 幻灯片演示文稿,其中包含链接到特定 Google 表格电子表格的图表。

由于演示文稿中有许多图表,我正在寻找一种方法来自动更新所有这些链接的图表,或者至少一次更新所有这些图表。

做这个的最好方式是什么?

4

3 回答 3

9

您可以使用以下脚本将自定义函数添加到幻灯片 UI 中的下拉菜单。这会从当前演示文稿中获取幻灯片,循环播放它们,获取每张幻灯片中的任何图表并刷新(更新)它们。

function onOpen() {
  var ui = SlidesApp.getUi();
  ui.createMenu('Custom Menu')
  .addItem('Batch Update Charts', 'batchUpdate')
  .addToUi();
}

function batchUpdate(){

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

注意:在此回复时,更新/刷新链接幻灯片的功能似乎不存在。

于 2018-01-14T21:39:55.700 回答
2

您可以在有关 API 的官方文档中找到它(针对不同的语言)。 https://developers.google.com/slides/how-tos/add-chart#refreshing_a_chart

您需要为此编写一个脚本并按计划或手动运行它。

我发现我自己的代码效果很好。

from __future__ import print_function
import httplib2
import os

from apiclient import discovery
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage

try:
    import argparse
    flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
except ImportError:
    flags = None

# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/slides.googleapis.com-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/drive'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Google Slides API Python Quickstart'


def get_credentials():
    """Gets valid user credentials from storage.

    If nothing has been stored, or if the stored credentials are invalid,
    the OAuth2 flow is completed to obtain the new credentials.

    Returns:
        Credentials, the obtained credential.
    """
    home_dir = os.path.expanduser('~')
    credential_dir = os.path.join(home_dir, '.credentials')
    if not os.path.exists(credential_dir):
        os.makedirs(credential_dir)
    credential_path = os.path.join(credential_dir,
                                   'slides.googleapis.com-python-quickstart.json')

    store = Storage(credential_path)
    credentials = store.get()
    if not credentials or credentials.invalid:
        flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
        flow.user_agent = APPLICATION_NAME
        if flags:
            credentials = tools.run_flow(flow, store, flags)
        else: # Needed only for compatibility with Python 2.6
            credentials = tools.run(flow, store)
        print('Storing credentials to ' + credential_path)
    return credentials

def main():
    """Shows basic usage of the Slides API.

    Creates a Slides API service object and prints the number of slides and
    elements in a sample presentation:
    """
    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('slides', 'v1', http=http)

    # Here past your presentation id
    presentationId = '1Owma9l9Z0Xjm1OPp-fcchdcxc1ImBPY2j9QH1LBDxtk'
    presentation = service.presentations().get(
        presentationId=presentationId).execute()
    slides = presentation.get('slides')

    print ('The presentation contains {} slides:'.format(len(slides)))
    for slide in slides:
        for element in slide['pageElements']:

            presentation_chart_id = element['objectId']

            # Execute the request.
            try:
                requests = [{'refreshSheetsChart': {'objectId': presentation_chart_id}}]
                body = {'requests': requests}

                #print(element)
                requests = service.presentations().batchUpdate(
                    presentationId=presentationId, body=body).execute()
                print('Refreshed a linked Sheets chart with ID: {0}'.format(presentation_chart_id))

            except Exception:
                pass

if __name__ == '__main__':
    main()
于 2017-06-27T16:15:38.820 回答
2

最新更新:幻灯片的工具下拉菜单中现在有一个选项可以查看所有链接对象;出现的菜单底部有“全部更新”选项。

在此处输入图像描述 在此处输入图像描述

于 2020-04-20T16:01:36.460 回答