Google幻灯片 - 如何自动更新链接到G电子表格的图表

时间:2017-06-12 10:30:08

标签: charts google-apps-script google-sheets google-slides-api google-slides

我有一个Google幻灯片演示文稿,其中包含与特定Google电子表格相关联的图表。

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

这样做的最佳方式是什么?

非常感谢!

3 个答案:

答案 0 :(得分:7)

您可以使用以下脚本将自定义函数添加到幻灯片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();
    }
  }
}

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

答案 1 :(得分:1)

您可以在关于API的官方文档中找到它(针对不同的lang)。 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()

答案 2 :(得分:1)

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

enter image description here enter image description here