从现有的Google电子表格,附加行和更新中获取响应

数据搜寻器

我可以连接到Google Spreadsheet并添加新行(列表中的实际值),如下所示,它可以正常工作:

import gspread
from oauth2client.service_account import ServiceAccountCredentials

from pprint import pprint
from googleapiclient import discovery

scope = ['https://spreadsheets.google.com/feeds',
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/spreadsheets.currentonly',
    'https://www.googleapis.com/auth/spreadsheets']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)

service = discovery.build('sheets', 'v4', credentials=credentials)

#Name of Spreadsheet
Sheet_Title = "New Spreadsheet Final"

# The ID of the spreadsheet 
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'  # TODO: Update placeholder value.
#Get sheet ID

#Open the wanted Tab
sheet = gc.open(Sheet_Title).worksheet("Tab One")  

#Get the wanted range of the sheet
range_name = 'A1:W1000'  # TODO: Update placeholder value.

#Add new rows in the Sheet. Values are hardcoded below
values = [
    ['09/01/2021', 'IT', '8%'],
    ['08/02/2021', 'NL', '1%']
    # Additional rows ...
]
body = {
    'values': values
}

#Append the rows in the Google Spreadsheet
result = service.spreadsheets().values().append(
    spreadsheetId=spreadsheet_id, range=range_name,
    valueInputOption='USER_ENTERED', body=body).execute()

我现在想做的是添加新行,但是对于每个单元格(或通常是特定列)添加数据验证。因此,我下去查看了响应。然后,我附加了一个新的行值,其中包括格式和数据验证:

#Values to be added in the original query
value_to_be_added = [
              {
                "formattedValue": "05/05/2019",
                "userEnteredFormat": {
                  "numberFormat": {
                    "type": "DATE",
                    "pattern": "dd/mm/yyyy"
                  }
                },
                "dataValidation": {
                  "condition": {
                    "type": "DATE_IS_VALID"
                  },
                  "strict": "True"
                }
              },
              {
                "formattedValue": "DE",
                "userEnteredFormat": {
                  "numberFormat": {
                    "type": "NUMBER",
                    "pattern": "#,##0.00"
                  },
                  "verticalAlignment": "BOTTOM"
                },
                "dataValidation": {
                  "condition": {
                    "type": "ONE_OF_LIST",
                    "values": [
                      {
                        "userEnteredValue": "UK"
                      },
                      {
                        "userEnteredValue": "ES"
                      },
                      {
                        "userEnteredValue": "IT"
                      },
                      {
                        "userEnteredValue": "DE"
                      },
                      {
                        "userEnteredValue": "AT"
                      },
                      {
                        "userEnteredValue": "NL"
                      }
                    ]
                  },
                  "showCustomUi": "True"
                }
              },
              {
                "formattedValue": "4%",
                "userEnteredFormat": {
                  "numberFormat": {
                    "type": "PERCENT",
                    "pattern": "0%"
                  }
                }
              }
            ]

换句话说,我尝试处理原始响应JSON,唯一需要做的就是更新完整文件,但找不到正确的更新函数:

#Get request to get the full Google Spreadsheet in a JSON
request = service.spreadsheets().get(spreadsheetId=spreadsheet_id, ranges=range_name, includeGridData=True)
response = request.execute()

#dictionary that will be appended in the values of the response
mydict = {}

#Assign dictionary with the new value. We have one value in this case.
mydict[row_count+1] = value_to_be_added

#print(mydict[row_count+1])

#Add new row in the response.
response['sheets'][0]['data'][0]['rowData'][x]['values'].append(mydict[row_count+1])

#updated response that has to be sent/updated in the API.
new_response = response

有没有办法用更新后的响应完全更新/替换原始响应?

原始电子表格:

在此处输入图片说明

我update.request之后的最终电子表格(我希望如何):

在此处输入图片说明

您可以在其中看到应用了数据验证的新行(可以是X的行数)。

Tanaike
  • 您要在电子表格最后一行的下一行追加一行。
    • 您想要附加一行,例如日期值dd/mm/yyyy,数据验证,0%格式数和数字。
    • 您想要将的值05/05/2019, UK, 8%, 9作为显示值。
  • 您想通过gspread和python实现此目的。
  • 您已经能够使用Sheets API获取和放置Spreadsheet的值。

如果我的理解是正确的,那么该示例脚本如何?在此示例脚本中,我使用了batch_updategspread的方法的方法batch_upategspread的是表API的spreadsheets.batchUpdate的方法。并且该行由appendCells请求追加。

示例脚本:

示例脚本如下。在运行脚本之前,请设置电子表格ID和工作表名称。在此脚本中,Tab One用作工作表名称。

gc = gspread.authorize(credentials)
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
body = {'requests':
        [
            {
                'appendCells':
                {
                    'rows':
                    [
                        {
                            'values':
                            [
                                {
                                    'userEnteredFormat':
                                    {
                                        'numberFormat':
                                        {
                                            'type': 'DATE',
                                            'pattern': 'dd/mm/yyyy'
                                        }
                                    },
                                    'dataValidation':
                                    {
                                        'condition':
                                        {
                                            'type': 'DATE_IS_VALID'
                                        },
                                        'strict': True
                                    },
                                    'userEnteredValue':
                                    {
                                        'numberValue': 43590  # This is the serial number of "05/05/2019".
                                    }
                                },
                                {
                                    'userEnteredFormat':
                                    {
                                        'numberFormat':
                                        {
                                            'type': 'NUMBER',
                                            'pattern': '#,##0.00'
                                        },
                                        'verticalAlignment': 'BOTTOM'
                                    },
                                    'dataValidation':
                                    {
                                        'condition':
                                        {
                                            'type': 'ONE_OF_LIST',
                                            'values':
                                            [
                                                {
                                                    'userEnteredValue': 'UK'
                                                },
                                                {
                                                    'userEnteredValue': 'ES'
                                                },
                                                {
                                                    'userEnteredValue': 'IT'
                                                },
                                                {
                                                    'userEnteredValue': 'DE'
                                                },
                                                {
                                                    'userEnteredValue': 'AT'
                                                },
                                                {
                                                    'userEnteredValue': 'NL'
                                                }
                                            ]
                                        },
                                        'showCustomUi': True
                                    },
                                    'userEnteredValue':
                                    {
                                        'stringValue': 'UK'
                                    }
                                },
                                {
                                    'userEnteredFormat':
                                    {
                                        'numberFormat':
                                        {
                                            'type': 'PERCENT',
                                            'pattern': '0%'
                                        }
                                    },
                                    'userEnteredValue':
                                    {
                                        'numberValue': 0.08
                                    }
                                },
                                {
                                    'userEnteredValue':
                                    {
                                        'numberValue': 9
                                    }
                                }
                            ]
                        }
                    ],
                    'sheetId': sheetId,
                    'fields': '*'
                }
            }
        ]
        }
res = spreadsheet.batch_update(body)
print(res)

注意:

  • 05/05/2019被置为格式的日期dd/mm/yyyy,请把数量43590是序列号。

参考文献:

添加:

当您要在for循环中使用请求正文时,以下脚本如何?batchUpdate方法可以与数组一起使用。

gc = gspread.authorize(credentials)
spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
sheetName = "Tab One"
spreadsheet = gc.open_by_key(spreadsheet_id)
sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']
requests = []
for x in range(len(new_values)):  # Please set "new_values".
    body =                 {
                    'appendCells':
                    {
                        'rows':
                        [
                            {
                                'values':
                                [
                                    {
                                        'userEnteredFormat':
                                        {
                                            'numberFormat':
                                            {
                                                'type': 'DATE',
                                                'pattern': 'dd/mm/yyyy'
                                            }
                                        },
                                        'dataValidation':
                                        {
                                            'condition':
                                            {
                                                'type': 'DATE_IS_VALID'
                                            },
                                            'strict': True
                                        },
                                        'userEnteredValue':
                                        {
                                            'numberValue': new_values[x][0]
                                        }
                                    },
                                    {
                                        'userEnteredFormat':
                                        {
                                            'numberFormat':
                                            {
                                                'type': 'NUMBER',
                                                'pattern': '#,##0.00'
                                            },
                                            'verticalAlignment': 'BOTTOM'
                                        },
                                        'dataValidation':
                                        {
                                            'condition':
                                            {
                                                'type': 'ONE_OF_LIST',
                                                'values':
                                                [
                                                    {
                                                        'userEnteredValue': 'UK'
                                                    },
                                                    {
                                                        'userEnteredValue': 'ES'
                                                    },
                                                    {
                                                        'userEnteredValue': 'IT'
                                                    },
                                                    {
                                                        'userEnteredValue': 'DE'
                                                    },
                                                    {
                                                        'userEnteredValue': 'AT'
                                                    },
                                                    {
                                                        'userEnteredValue': 'NL'
                                                    }
                                                ]
                                            },
                                            'showCustomUi': True
                                        },
                                        'userEnteredValue':
                                        {
                                            'stringValue': new_values[x][1]
                                        }
                                    },
                                    {
                                        'userEnteredFormat':
                                        {
                                            'numberFormat':
                                            {
                                                'type': 'PERCENT',
                                                'pattern': '0%'
                                            }
                                        },
                                        'userEnteredValue':
                                        {
                                            'numberValue': new_values[x][2]
                                        }
                                    },
                                    {
                                        'userEnteredValue':
                                        {
                                            'numberValue': new_values[x][2]
                                        }
                                    }
                                ]
                            }
                        ],
                        'sheetId': sheetId,
                        'fields': '*'
                    }
                }
    requests.append(body)

res = spreadsheet.batch_update({'requests':requests})
print(res)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google电子表格中的数据绑定?

来自分类Dev

Google电子表格响应中没有ETag

来自分类Dev

Google电子表格中的Sumproduct部门

来自分类Dev

导入Excel电子表格数据到现有的sql表?

来自分类Dev

使用表单更新Google电子表格上的现有数据?

来自分类Dev

Google电子表格中的arrayformula总和

来自分类Dev

如何根据现有电子表格更新Google表单下拉列表?

来自分类Dev

Google文档电子表格中的IF和有条件的SUM

来自分类Dev

根据Google表格电子表格中的动态数据更新Google表单字段

来自分类Dev

使用R编辑现有的Google文档电子表格

来自分类Dev

在Google电子表格中搜索

来自分类Dev

电子表格中的Google Geochart动态值

来自分类Dev

Google电子表格中的时区转换

来自分类Dev

使用Apache POI修改现有的xlsx电子表格会导致无法读取的内容错误

来自分类Dev

Google电子表格中的“常量”?

来自分类Dev

如何在我的Google表格文件中获取电子表格的总数

来自分类Dev

使用Pandas在Google电子表格中使用现有行附加新行

来自分类Dev

如何使用php在Google驱动器中创建电子表格并安装加载项或将应用脚本附加到电子表格中

来自分类Dev

在Google电子表格中混合2列

来自分类Dev

附加电子表格中Excel文件列表的Google脚本

来自分类Dev

编辑其他电子表格时用于复制现有电子表格的脚本

来自分类Dev

通过Google App脚本打开现有电子表格

来自分类Dev

获取行号和列号Google电子表格-App脚本

来自分类Dev

如何从Google电子表格中获取任何值的语言以及JAVA中电子表格的当前时间

来自分类Dev

如何将现有的Google工作表插入Google电子表格?

来自分类Dev

Google电子表格和表格

来自分类Dev

Twilio HTTP 错误和 Google 电子表格

来自分类Dev

用于更新现有 Excel 电子表格中的单元格的 R 包

来自分类Dev

自动更新 Google 电子表格脚本

Related 相关文章

  1. 1

    Google电子表格中的数据绑定?

  2. 2

    Google电子表格响应中没有ETag

  3. 3

    Google电子表格中的Sumproduct部门

  4. 4

    导入Excel电子表格数据到现有的sql表?

  5. 5

    使用表单更新Google电子表格上的现有数据?

  6. 6

    Google电子表格中的arrayformula总和

  7. 7

    如何根据现有电子表格更新Google表单下拉列表?

  8. 8

    Google文档电子表格中的IF和有条件的SUM

  9. 9

    根据Google表格电子表格中的动态数据更新Google表单字段

  10. 10

    使用R编辑现有的Google文档电子表格

  11. 11

    在Google电子表格中搜索

  12. 12

    电子表格中的Google Geochart动态值

  13. 13

    Google电子表格中的时区转换

  14. 14

    使用Apache POI修改现有的xlsx电子表格会导致无法读取的内容错误

  15. 15

    Google电子表格中的“常量”?

  16. 16

    如何在我的Google表格文件中获取电子表格的总数

  17. 17

    使用Pandas在Google电子表格中使用现有行附加新行

  18. 18

    如何使用php在Google驱动器中创建电子表格并安装加载项或将应用脚本附加到电子表格中

  19. 19

    在Google电子表格中混合2列

  20. 20

    附加电子表格中Excel文件列表的Google脚本

  21. 21

    编辑其他电子表格时用于复制现有电子表格的脚本

  22. 22

    通过Google App脚本打开现有电子表格

  23. 23

    获取行号和列号Google电子表格-App脚本

  24. 24

    如何从Google电子表格中获取任何值的语言以及JAVA中电子表格的当前时间

  25. 25

    如何将现有的Google工作表插入Google电子表格?

  26. 26

    Google电子表格和表格

  27. 27

    Twilio HTTP 错误和 Google 电子表格

  28. 28

    用于更新现有 Excel 电子表格中的单元格的 R 包

  29. 29

    自动更新 Google 电子表格脚本

热门标签

归档