【问题标题】:Inserting a list of list in python to google sheets using gspread使用 gspread 将 python 中的列表插入到谷歌表格中
【发布时间】:2018-04-21 18:46:30
【问题描述】:

我在 python 中创建了一个嵌套列表,看起来像

my_list = [[a,b],[c,d],[e,f],[g,h].....]

我想要做的是将此列表作为批处理插入,以便每个元素都插入到谷歌工作表的新行中。该列表是根据用户输入生成的,因此my_list 中的元素数量可能会有所不同。 最终输出应如下所示:

我不想逐行执行此操作,因为列表可能很长,并且可能有许多类似的列表,这会使整个过程效率低下。

任何帮助将不胜感激!!

【问题讨论】:

    标签: python-2.7 google-sheets gspread


    【解决方案1】:

    gspread 3.0.0 版(撰写本文时的最新版本)中,插入嵌套列表的最有效方法如下:

    my_list = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']]
    
    sh.values_update(
        'Sheet1!A1', 
        params={'valueInputOption': 'RAW'}, 
        body={'values': my_list}
    )
    

    其中shSpreadsheet 类的实例,Sheet1 是您正在更新的工作表的名称。

    这将通过对 Sheets API 的单个请求一次性更新单元格的值。

    注意:在 gspread 的未来版本中,可能会有另一种方法来执行此操作。请密切关注回购。

    【讨论】:

      【解决方案2】:

      如果您使用的是 google 电子表格 api,则可以轻松实现。 (这不是 gspread 解决方案,但请检查是否可以使用 gspread 访问此端点,使用 API 调用将减轻很多负担) 从数组长度取行数。 示例

      my_list = [[1,2],[3,4],[5,6],[7,8]]
      

      所以这里我们有 4 个元素和 2 列(最大)

      range = "A1:B"+len(my_list)
      

      现在只需向电子表格.values.append 端点发送一个发布请求

      https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}:append
      

      帖子正文如下

      {
        "range": range,
        "majorDimension": "ROWS",
        "values": my_list,
      }
      

      你可以在线尝试这个API端点here

      【讨论】:

        【解决方案3】:

        我建议使用 pandas 等数据表单库将列表转换为 xlsx obj,然后使用 google drive api 上传。

        【讨论】:

          【解决方案4】:

          我能够使用以下方法成功地将大型数组(数据框)插入到谷歌表格中:

          来源链接:https://pythonhosted.org/gspread-dataframe/

          import pandas_datareader.tsp as tsp
          tspreader = tsp.TSPReader(start='2019-12-1', end='2019-12-5')
          tspout=tspreader.read()
          
          import gspread
          #documentation https://gspread.readthedocs.io/en/latest/api.html
          from oauth2client.service_account import ServiceAccountCredentials
          
          scope = ['https://spreadsheets.google.com/feeds',
                   'https://www.googleapis.com/auth/drive']
          creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
          client = gspread.authorize(creds)
          sheet = client.open("nameOFyourWORKBOOK").worksheet("nameOFyourSHEET")
          
          from gspread_dataframe import get_as_dataframe, set_with_dataframe
          
          set_with_dataframe(sheet, tspout, row=1, col=1, include_index=True, include_column_header=True, resize=False, allow_formulas=True)
          

          我希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-07-08
            相关资源
            最近更新 更多