Get chart from Google Spreadsheet and update chart placeholder in Slides with Python

Question:

I’m using Google API to automatize a monthly report. I’m coping a spreadsheet and slide templates, updating the spreadsheet data and I want to add the charts to slides. My spreadsheet have one chart per sheet and each slide will only have one chart too.

I want to grab the chart from the spreadsheet by chart id and replace the chart placeholder on the slides by the slide id.

def spreadsheet_chart_to_slide(spreadsheet_id, sheet_name, slides_id):
  """
  Get chart from a spreadsheet and replace chart placeholder
  """

  # Fetch chart information from sheets
  sheets_service = Create_Service('sheets', 'v4')

  sheet = sheets_service.spreadsheet().get(
    spreadsheetId = spreadsheet_id,
    ranges = [sheet_name]).execute().get('sheets')[0]
  chart_id_sheet = sheet['charts'][0]['chartId']

  # Fetch placeholder info from slides
  slide_service = Create_Service('slides', 'v1')


  # Replace chart in slides
  slide_service = Create_Service('sheets', 'v4')

  requests = []

  slide_service.presentations().batchUpdate(
    body = {
      "requests": requests
    },
    presentationId = slides_id).execute()

Any idea how I can finish this?

Asked By: lela_rib

||

Answers:

I was able to solve the case like this:

def spreadsheet_chart_to_slide(spreadsheet_id, sheet_name, presentation_id, placeholder_text):
  """
  Get chart from a spreadsheet and add it to a slide
  """

  try:
    # Fetch chart information from sheets
    sheets_service = Create_Service('sheets', 'v4')

    sheet = sheets_service.spreadsheets().get(
      spreadsheetId = spreadsheet_id,
      ranges = [sheet_name]).execute().get('sheets')[0]
    chart_id_sheets = sheet['charts'][0]['chartId']
    print("Got chart id!")

    # Replace chart in slides
    slide_service = Create_Service('slides', 'v1')

    requests = [
      {
        "replaceAllShapesWithSheetsChart": {
          "chartId": chart_id_sheets,
          "containsText": {
            "text": placeholder_text
          },
          "linkingMode": "LINKED",
          "spreadsheetId": spreadsheet_id
        }
      }
    ]

    slide_service.presentations().batchUpdate(
      body = {
        "requests": requests
      },
      presentationId = presentation_id).execute()

  except HttpError as error:
    print(F'An error occurred: {error}')

  return
Answered By: lela_rib