【问题标题】:Add Google sheet with data using Google API v4使用 Google API v4 添加带有数据的 Google 表格
【发布时间】:2016-11-13 07:15:51
【问题描述】:

我正在使用 Python。我需要使用 Google API v4 在电子表格中添加工作表。我可以使用带有电子表格 id 和 addSheet 请求的 batchUpdate 创建工作表(它返回 shetId 并创建空工作表)。但是如何在其中添加数据呢?

data = {'requests': [
    {
        'addSheet':{
            'properties':{'title': 'New sheet'}
        }
    }
]}

res = service.spreadsheets().batchUpdate(spreadsheetId=s_id, body=data).execute()
SHEET_ID = res['replies'][0]['addSheet']['properties']['sheetId']

【问题讨论】:

    标签: python google-sheets google-spreadsheet-api


    【解决方案1】:

    您可以添加此代码以在 Google 表格中写入数据。在文档中——Reading & Writing Cell Values

    电子表格可以有多个工作表,每个工作表有任意数量的行或列。单元格是特定行和列交叉处的位置,并且可能包含数据值。 Google Sheets API 提供了spreadsheets.values 集合以实现简单的值读取和写入。

    写入单个范围

    要将数据写入单个范围,请使用spreadsheets.values.update 请求:

    values = [
        [
            # Cell values ...
        ],
        # Additional rows ...
    ]
    body = {
      'values': values
    }
    result = service.spreadsheets().values().update(
        spreadsheetId=spreadsheet_id, range=range_name,
        valueInputOption=value_input_option, body=body).execute()
    

    更新请求的正文必须是 ValueRange 对象,但唯一必填字段是 values。如果指定了 range,则它必须与 URL 中的范围匹配。在 ValueRange 中,您可以选择指定其majorDimension。默认情况下,使用 ROWS。如果指定了 COLUMNS,则每个内部数组都写入一列而不是一行。

    写入多个范围

    如果要编写多个不连续的范围,可以使用spreadsheets.values.batchUpdate 请求:

    values = [
        [
            # Cell values
        ],
        # Additional rows
    ]
    data = [
        {
            'range': range_name,
            'values': values
        },
        # Additional ranges to update ...
    ]
    body = {
      'valueInputOption': value_input_option,
      'data': data
    }
    result = service.spreadsheets().values().batchUpdate(
        spreadsheetId=spreadsheet_id, body=body).execute()
    

    batchUpdate 请求的主体必须是一个BatchUpdateValuesRequest 对象,其中包含一个ValueInputOption 和一个ValueRange 对象列表(每个写入范围一个)。每个 ValueRange 对象都指定了自己的 rangemajorDimension 以及要输入的数据。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      发现在电子表格中创建工作表后,您可以访问范围“nameofsheet!A1”,即

      service.spreadsheets().values().update(spreadsheetId=s_id, range='New sheet!A1', body=data_i, valueInputOption='RAW').execute()
      

      此请求会将数据发布到名为“新工作表”的新创建工作表中

      【讨论】:

        【解决方案3】:

        您还可以尝试我为 google sheet api v4 编写的“更直观”的库,pygsheets,因为我发现默认客户端有点麻烦。

        import pygsheets
        gc = pygsheets.authorize()
        
        # Open spreadsheet 
        sh = gc.open('my new ssheet')
        
        # create a worksheet    
        sh.add_worksheet("new sheet",rows=50,cols=60)
        
        # update data with 2d vector
        sh.update_cells('A1:B10', values)
        
        # or skip let it infer range from size of values
        sh.update_cells('A1', values)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-28
          • 1970-01-01
          • 2018-06-17
          • 1970-01-01
          • 1970-01-01
          • 2017-06-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多