简体   繁体   English

从 Google 电子表格获取图表并使用 Python 更新幻灯片中的图表占位符

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

I'm using Google API to automatize a monthly report.我正在使用 Google API 来自动化月度报告。 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.我想通过图表 id 从电子表格中获取图表,并用幻灯片 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?知道我怎么能完成这个吗?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM