How to automatically update charts linked to Google Sheets?

后端 未结 3 517
情书的邮戳
情书的邮戳 2020-12-17 04:08

I have a Google Slides presentation with charts that are linked to a specific Google Sheets Spreadsheet.

As there are many charts in the presentation, I\'m looking fo

3条回答
  •  执念已碎
    2020-12-17 04:47

    You can find it in official documentation about API (for different lang). https://developers.google.com/slides/how-tos/add-chart#refreshing_a_chart

    You need to write a script for this and run it by schedule or manually.

    I have found my own code that worked great.

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

提交回复
热议问题