问题描述
我有一个电子表格文档,我通过使用 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 和 Google-API 的新手,我不知道为什么它不起作用。请你帮助我好吗?如果你对如何做有更好的建议,我愿意接受他们。谢谢!
解决方法
我相信你的目标如下。
- 您有一张 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。关于这一点,请根据您的实际情况进行修改。