使用 Google-Slide-API 和 python 更改表格列宽 修改点:修改后的脚本:注意:参考:

问题描述

我有一个电子表格文档,我通过使用 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。关于这一点,请根据您的实际情况进行修改。

参考:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...