使用 Google-Slide-API 和 python 更改 table 列宽
Changing table column width using Google-Slide-API and python
我有一个电子表格文档,通过使用 Google-Sheet-API 我正在从中获取数据。然后通过使用 Google-Slide-API 我正在创建一个包含 'n' 幻灯片的幻灯片文档。在每张幻灯片上,我都创建了一个 table 和 'n' 行的 2 列。每张幻灯片的第一列始终包含来自电子表格 A 列的数据。第二列包含来自其他电子表格列的数据(从 B 到 'n')。然后我正在改变文字大小。到目前为止一切顺利。
现在,当我尝试调整每张幻灯片上每个 table 的列宽时,它没有做任何事情,这是一个问题,因为一些 table 包含更多信息,因此 tables 不适合幻灯片。这是不起作用的代码部分:
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()
无论有没有这个部分,tables 总是保持不变,所以它没有任何影响。该代码没有 return 任何错误或消息。
我相信你的目标如下。
- 您有 Google 个幻灯片。
- Google 幻灯片有几张幻灯片,每张幻灯片有一个 table 有 2 列。
- 您想更改 2 列的列宽。
- 您想使用 python 的 googleapis 实现此目的。
- 您已经能够使用 Google 幻灯片 API 的 batchUpdate 方法。
修改点:
- 我认为您的请求正文是正确的。但是,我想提出一个修改点。在您的脚本中,
batchUpdate
方法在循环中使用。我认为当使用 batchUpdate
时,Google 幻灯片中的所有幻灯片的 updateTableColumnProperties
可以通过一次 API 调用 运行。
虽然我不确定您 mag
的值和您的整个脚本,但作为实现上述目标的示例脚本,以下修改后的脚本怎么样?如果这有助于您理解幻灯片 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()
注:
- 当上述脚本为运行时,每张幻灯片中table的“A”列和“B”列的宽度被修改。在此示例脚本中,分别为“A”列和“B”列设置了 100 和 300 PT。关于这一点,请根据您的实际情况进行修改。
参考文献:
我有一个电子表格文档,通过使用 Google-Sheet-API 我正在从中获取数据。然后通过使用 Google-Slide-API 我正在创建一个包含 'n' 幻灯片的幻灯片文档。在每张幻灯片上,我都创建了一个 table 和 'n' 行的 2 列。每张幻灯片的第一列始终包含来自电子表格 A 列的数据。第二列包含来自其他电子表格列的数据(从 B 到 'n')。然后我正在改变文字大小。到目前为止一切顺利。
现在,当我尝试调整每张幻灯片上每个 table 的列宽时,它没有做任何事情,这是一个问题,因为一些 table 包含更多信息,因此 tables 不适合幻灯片。这是不起作用的代码部分:
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()
无论有没有这个部分,tables 总是保持不变,所以它没有任何影响。该代码没有 return 任何错误或消息。
我相信你的目标如下。
- 您有 Google 个幻灯片。
- Google 幻灯片有几张幻灯片,每张幻灯片有一个 table 有 2 列。
- 您想更改 2 列的列宽。
- 您想使用 python 的 googleapis 实现此目的。
- 您已经能够使用 Google 幻灯片 API 的 batchUpdate 方法。
修改点:
- 我认为您的请求正文是正确的。但是,我想提出一个修改点。在您的脚本中,
batchUpdate
方法在循环中使用。我认为当使用batchUpdate
时,Google 幻灯片中的所有幻灯片的updateTableColumnProperties
可以通过一次 API 调用 运行。
虽然我不确定您 mag
的值和您的整个脚本,但作为实现上述目标的示例脚本,以下修改后的脚本怎么样?如果这有助于您理解幻灯片 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()
注:
- 当上述脚本为运行时,每张幻灯片中table的“A”列和“B”列的宽度被修改。在此示例脚本中,分别为“A”列和“B”列设置了 100 和 300 PT。关于这一点,请根据您的实际情况进行修改。