【问题标题】:python / gspread - How to update a range of cells with a data list?python / gspread - 如何使用数据列表更新一系列单元格?
【发布时间】:2015-02-24 14:12:42
【问题描述】:

我有一个数据列表(从 CSV 中提取),我正在尝试使用 Python / GSpread 更新 Google Doc 上的一系列单元格。这是我的代码示例:

import gspread
def write_spreadsheet(spreadsheet_name, sheet_id, data, start_row):
    gc = gspread.login('yourmail@gmail.com', 'password')
    wks = gc.open(spreadsheet_name).get_worksheet(sheet_index)
    start_letter = 'A'
    end_letter = string.uppercase[len(data[0]) - 1]
    end_row = start_row + len(data) - 1
    range = "%s%d:%s%d" % (start_letter, start_row, end_letter, end_row)

    print "Range is: " + range
    cell_list = wks.range(range)

    try:
        for i, val in enumerate(data):  #gives us a tuple of an index and value
            cell_list[i].value = val    #use the index on cell_list and the val from cell_values

        #Update the whole sheet
        wks.update_cells(cell_list)

    except:
        print "Exception"

this_data_ex = [['data1', 'data1'], ['data2', 'data2']]
write_spreadsheet('python-test', 1, this_data_ex, 1)

这可行,但它不会将列表行条目分成正确的列。 Google 表格上的输出如下所示:

    A                  B

['data1', 'data1'] ['data2', 'data2']

如何修复“try-for”部分以将每个数据条目写入新单元格,然后将行换行在正确的位置? (像这样)

 A   |  B

数据1 |数据1

数据2 |数据2

【问题讨论】:

    标签: python google-sheets-api gspread


    【解决方案1】:

    双重嵌套for循环;一个用于行,一个用于列,然后分别更新每个单元格。这部分似乎可以正常工作并获得预期的结果:

     try:
        idx = 0
        for (start_row, rowlist) in enumerate(data):
            for (colnum, value) in enumerate(rowlist):
                cell_list[idx].value = value
                idx += 1
                if idx >= len(cell_list):
                    break
    
        # Update the whole sheet
        wks.update_cells(cell_list)
    

    【讨论】:

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