【问题标题】:Changing table column width using Google-Slide-API and python使用 Google-Slide-API 和 python 更改表格列宽
【发布时间】:2021-01-19 10:49:27
【问题描述】:

我有一个电子表格文档,并通过使用 Google-Sheet-API 从中获取数据。然后通过使用 Google-Slide-API 我正在创建一个带有“n”张幻灯片的幻灯片文档。在每张幻灯片上,我正在创建一个包含“n”行的 2 列表。每张幻灯片的第一列始终包含电子表格 A 列中的数据。第二列包含来自其他电子表格列的数据(从 B 到“n”)。然后我正在更改文本大小。到目前为止一切顺利。

现在,当我尝试调整每张幻灯片上每个表格的列宽时,它不会做任何问题,因为有些表格包含更多信息,因此表格不适合幻灯片。这是代码中不起作用的部分:

for i in range(number_of_slides):
    regs = [
        {'updateTableColumnProperties': {
            'objectId': tableID[i],
            'columnIndices': [j],
            'tableColumnProperties': {
            'columnWidth': {'magnitude': mag[j], 'unit': 'PT'}
                },
            'fields': 'columnWidth'
            }
         } for j in range(2) ]
     SLIDES.presentations().batchUpdate(body={'requests': reqs},
            presentationId=deckID).execute()

无论有没有这部分,表格始终保持不变,因此不会产生任何影响。该代码不会返回任何错误或消息。

【问题讨论】:

    标签: python-3.x google-slides-api


    【解决方案1】:

    我相信你的目标如下。

    • 您有一个 Google 幻灯片。
    • Google 幻灯片有几张幻灯片,每张幻灯片都有一个包含 2 列的表格。
    • 您想要更改 2 列的列宽。
    • 您想使用 googleapis for python 来实现这一点。
    • 您已经能够通过 Google Slides API 使用 batchUpdate 方法。

    修改点:

    • 我认为您的请求正文是正确的。但是,我想提出一个修改点。在您的脚本中,batchUpdate 方法在循环中使用。我认为当使用batchUpdate 时,Google 幻灯片中所有幻灯片的updateTableColumnProperties 都可以通过一个 API 调用来运行。

    虽然我不确定您的mag 值和您的整个脚本,但作为实现上述目标的示例脚本,以下修改后的脚本怎么样?如果这有助于您理解 Slides API,我很高兴。

    修改脚本:

    关于creds,请使用您的授权脚本。另外,您可以在Quickstart for python 看到它。

    service = build('slides', 'v1', credentials=creds)
    PRESENTATION_ID = '###' # Please set Google Slides ID.
    magnitude = [100, 300] # Please set the widths for the columns A and B in each table. In this sample, 100 and 300 PT are set.
    
    # 1. Retrieve an object for each slides.
    presentation = service.presentations().get(presentationId=PRESENTATION_ID).execute()
    
    # 2. Create a request body for the batchUpdate method.
    slides = presentation.get('slides')
    requests = []
    for slide in slides:
        pe = slide.get('pageElements')
        if pe:
            for pageElement in pe:
                t = pageElement.get('table')
                if t:
                    for i, m in enumerate(magnitude):
                        requests.append({
                            'updateTableColumnProperties': {
                                'objectId': pageElement['objectId'],
                                'columnIndices': [i],
                                'tableColumnProperties': {
                                    'columnWidth': {'magnitude': m, 'unit': 'PT'}
                                },
                                'fields': 'columnWidth'
                            }
                        })
    
    # 3. Request the request body.
    service.presentations().batchUpdate(body={'requests': requests}, presentationId=PRESENTATION_ID).execute()
    

    注意:

    • 运行上述脚本时,会修改每张幻灯片中表格的“A”和“B”列的宽度。在此示例脚本中,分别为“A”和“B”列设置了 100 和 300 PT。关于这一点,请根据您的实际情况进行修改。

    参考资料:

    【讨论】:

    • 当我调整你的脚本以适应我的脚本时,它起作用了。非常感谢你!您的代码非常有帮助,它帮助我进一步了解了 Slides API。
    • 我还有一个问题吗?有没有办法使用 googleapi for python 更改填充?我在 Slides API 文档中找不到此选项。提前谢谢!
    • @Martin 感谢您的回复。我很高兴你的问题得到了解决。我愿意支持你。但是您的评论问题是新问题,这与您的问题不同。那么您可以通过包含详细信息将其作为新问题发布吗?因为当您的初始问题被评论更改时,看到您的问题的其他用户会感到困惑。通过将其发布为新问题,包括我在内的用户都可以想到它。如果你能合作解决你的新问题,我很高兴。你能合作解决你的新问题吗?
    • 感谢您的回复。抱歉,我将创建一个包含详细信息的新问题。再次感谢您的支持,非常感谢。
    • 非常感谢您愿意提供帮助,非常感谢。幸运的是,在发布新问题之前,我能够想到自己的解决方案。我的解决方案可能并不理想,但我认为这是最好的学习方式。 (我不知道我是否还应该发布它,因为它可能对其他人有所帮助)但是当我遇到其他问题时,我会提出一个新问题。很高兴知道有人支持我。再次感谢您,您的帮助最大。
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多