为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

临摹微笑 2022-06-07 19:24:32
我可以连接到 Google 电子表格并添加新行(列表中的实际值),如下所示,它可以工作:import gspreadfrom oauth2client.service_account import ServiceAccountCredentialsfrom pprint import pprintfrom googleapiclient import discoveryscope = ['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 SpreadsheetSheet_Title = "New Spreadsheet Final"# The ID of the spreadsheet spreadsheet_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'  # TODO: Update placeholder value.#Get sheet ID#Open the wanted Tabsheet = gc.open(Sheet_Title).worksheet("Tab One")  #Get the wanted range of the sheetrange_name = 'A1:W1000'  # TODO: Update placeholder value.#Add new rows in the Sheet. Values are hardcoded belowvalues = [    ['09/01/2021', 'IT', '8%'],    ['08/02/2021', 'NL', '1%']    # Additional rows ...]body = {    'values': values}#Append the rows in the Google Spreadsheetresult = service.spreadsheets().values().append(    spreadsheetId=spreadsheet_id, range=range_name,    valueInputOption='USER_ENTERED', body=body).execute()我现在要做的是添加新行,但为每个单元格(或通常特定的列)添加数据验证。所以,我下去检查了响应。然后我附加了一个新的行值,其中包括格式和数据验证:#Values to be added in the original queryvalue_to_be_added = [              {                "formattedValue": "05/05/2019",                "userEnteredFormat": {                  "numberFormat": {                    "type": "DATE",                    "pattern": "dd/mm/yyyy"                  }                },                "dataValidation": {                  "condition": {                    "type": "DATE_IS_VALID"                  },                  "strict": "True"                }              },有没有办法用更新的响应完全更新/替换原始响应?
查看完整描述

2 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

  • 您想将一行追加到电子表格最后一行的下一行。

    • 您想附加一行,如日期值dd/mm/yyyy、数据验证、0%格式数和数字。

    • 您想将 的值05/05/2019, UK, 8%, 9作为显示值。

  • 您想使用 gspread 和 python 来实现这一点。

  • 您已经能够使用 Sheets API 获取和放置电子表格的值。

如果我的理解是正确的,那么这个示例脚本怎么样?在这个示例脚本中,我使用了batch_updategspread 的方法。gspread 的方法batch_upate是 Sheets API 的电子表格.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)



查看完整回答
反对 回复 2022-06-07
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我的版本基于 Tanaike 的回答:


#List of rows with values

new_values = [[43590,'UK',0.08,9],[43590,'DE',0.07,8]]


#connect to the google sheet and tab

sheetName = "Tab One"

spreadsheet = gc.open_by_key(spreadsheet_id)

sheetId = spreadsheet.worksheet(sheetName)._properties['sheetId']


#Add each value/row

for x in range(len(new_values)):

    #print(new_values[x])

    body = {'requests':

            [

                {

                    '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]  # 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': new_values[x][1]

                                        }

                                    },

                                    {

                                        'userEnteredFormat':

                                        {

                                            'numberFormat':

                                            {

                                                'type': 'PERCENT',

                                                'pattern': '0%'

                                            }

                                        },

                                        'userEnteredValue':

                                        {

                                            'numberValue': new_values[x][2]

                                        }

                                    },

                                    {

                                        'userEnteredValue':

                                        {

                                            'numberValue': new_values[x][3]

                                        }

                                    }

                                ]

                            }


                        ],

                        'sheetId': sheetId,

                        'fields': '*'

                    }

                }

            ]

            }

    res = spreadsheet.batch_update(body)

身体在每个循环中都被拉动。如果您认为这不是最好的方法(循环身体),您可以评论任何替代方案。有一个循环并将values数组附加到 body 对象中可能更容易。


查看完整回答
反对 回复 2022-06-07
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信