Python 3.x 使用Google幻灯片API和python更改表列宽

Python 3.x 使用Google幻灯片API和python更改表列宽,python-3.x,google-slides-api,Python 3.x,Google Slides Api,我有一个电子表格文档,通过使用GoogleSheetAPI我从中获取数据。然后,通过使用谷歌幻灯片API,我创建了一个包含“n”张幻灯片的幻灯片文档。在每张幻灯片上,我创建了一个包含“n”行的2列表格。每张幻灯片上的第一列始终包含电子表格A列中的数据。第二列包含来自其他电子表格列(从B到“n”)的数据。然后我改变文本大小。到目前为止还不错 现在,当我尝试在每张幻灯片上调整每个表的列宽时,它没有做任何事情,这是一个问题,因为有些表包含更多信息,因此这些表不适合幻灯片。这是代码中不起作用的部分: f

我有一个电子表格文档,通过使用GoogleSheetAPI我从中获取数据。然后,通过使用谷歌幻灯片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和GoogleAPI还不熟悉,我不知道为什么它不起作用。你能帮帮我吗?如果你对如何做有更好的建议,我愿意接受。谢谢大家!

我相信你的目标如下

  • 你有一个谷歌幻灯片
  • 谷歌幻灯片有几个幻灯片,每个幻灯片有一个表,其中有2列
  • 您想更改两列的列宽
  • 您希望使用googleapis for python实现这一点
  • 您已经能够使用GoogleSlidesAPI使用batchUpdate方法
修改点:
  • 我认为你的要求是正确的。但是,我想提出一点修改意见。在脚本中,循环中使用了
    batchUpdate
    方法。我认为当使用
    batchUpdate
    时,谷歌幻灯片中所有幻灯片的
    updateTableColumnProperties
    都可以通过一个API调用运行
虽然我不确定您的
mag
值和整个脚本,但作为实现上述目标的示例脚本,下面修改的脚本如何?如果这有助于您理解幻灯片API,我很高兴

修改脚本: 关于
creds
,请使用您的授权脚本。此外,你可以在网站上看到它

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

当我调整您的脚本以适应我的脚本时,它成功了。非常感谢你!您的代码非常有用,它帮助我更多地理解了幻灯片API。我可以有一个额外的问题吗?有没有办法使用googleapi for python更改填充?我在幻灯片API文档中找不到此选项。提前谢谢你@马丁:谢谢你的答复。我很高兴你的问题解决了。我愿意支持你。但你评论的问题是新问题,这与你的问题不同。那么,你能通过包含详细信息将其作为新问题发布吗?因为当你的初始问题被评论改变时,看到你的问题的其他用户会感到困惑。通过将其作为新问题发布,包括我在内的用户可以想到它。如果你能合作解决你的新问题,我很高兴。你能合作解决你的新问题吗?谢谢你的回答。很抱歉,我将创建一个包含详细信息的新问题。再次,非常感谢您的支持,非常感谢。非常感谢您愿意帮助,非常感谢。幸运的是,在发布新问题之前,我能够想到自己的解决方案。我的解决方案可能并不理想,但我认为这是最好的学习方式。(我不知道我是否应该继续发布它,因为它可能会帮助其他人)但当我被其他事情卡住时,我会提出一个新问题。很高兴知道有人支持我。再次感谢你,你帮了我大忙。
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()