Python/gspread - how can I update multiple cells with DIFFERENT VALUES at once?

前端 未结 4 2127
广开言路
广开言路 2021-01-01 00:23

To update a range of cells, you use the following command.

## Select a range
cell_list = worksheet.range(\'A1:A7\')

for cell in cell_list:
    cell.value =          


        
相关标签:
4条回答
  • 2021-01-01 01:01

    You can use enumerate on a separate list containing the different values you want in the cells and use the index part of the tuple to match to the appropriate cells in cell_list.

    cell_list = worksheet.range('A1:A7')
    cell_values = [1,2,3,4,5,6,7]
    
    for i, val in enumerate(cell_values):  #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
    
    worksheet.update_cells(cell_list)
    
    0 讨论(0)
  • 2021-01-01 01:01
    1. Import modules
    import gspread
    from gspread.models import Cell
    from oauth2client.service_account import ServiceAccountCredentials
    import string as string
    import random
    
    1. create cell array with values
    cells = []
    cells.append(Cell(row=1, col=1, value='Row-1 -- Col-1'))
    cells.append(Cell(row=1, col=2, value='Row-1 -- Col-2'))
    cells.append(Cell(row=9, col=20, value='Row-9 -- Col-20'))
    
    1. Find the sheet
    # use creds to create a client to interact with the Google Drive API
    scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
    creds = ServiceAccountCredentials.from_json_keyfile_name('Sheet-Update-Secret.json', scope)
    client = gspread.authorize(creds)
    
    1. Update the cells
    sheet.update_cells(cells)
    

    You could refer these link for more details.

    0 讨论(0)
  • 2021-01-01 01:01

    Here's my solution if you want to export a pandas data frame to a google sheet with gspread:

    • We can't access and replace elements in cell_list with values in the data frame intuitively, with [row, col] notation.
    • However, the elements are stored 'cell_list' are stored in a 'row-wise' order. The relative ordering depends on how many columns in your dataframe. Element (0,0) => 0, element (3,2) in a 5x5 dataframe is 17.
      • We can construct a function that maps a [row, col] value from a data frame to its position in the list:
    def getListIndex(nrow, ncol,row_pos, col_pos):
        list_pos = row_pos*ncol + col_pos
        return(list_pos)
    

    We can use this function to update the correct element in the list, cell_list, with the respective value in the dataframe, df.

    count_row = df.shape[0]
    count_col = df.shape[1]
    
    # note this outputs data from the 1st row
    cell_list = worksheet.range(1,1,count_row,count_col)
    
    for row in range(0,count_row):
        for col in range(0,count_col):
            list_index = getListIndex(count_row, count_col, row, col)
            cell_list[list_index].value = df.iloc[row,col]
    
    

    We can output the results of the list, cell_list, to our worksheet.

    worksheet.update_cells(cell_list)
    
    0 讨论(0)
  • 2021-01-01 01:06

    Assuming a table with a header row, as follows:

    Name  | Weight
    ------+-------
    Apple | 56
    Pear  | 23
    Leaf  | 88
    

    Then, the following should be self explanatory

    cell_list = []
    
    # get the headers from row #1
    headers = worksheet.row_values(1)
    # find the column "Weight", we will remember this column #
    colToUpdate = headers.index('Weight')
    
    # task 1 of 2
    cellLookup = worksheet.find('Leaf')
    # get the cell to be updated
    cellToUpdate = worksheet.cell(cellLookup.row, colToUpdate)
    # update the cell's value
    cellToUpdate.value = 77
    # put it in the queue
    cell_list.append(cellToUpdate)
    
    # task 2 of 2
    cellLookup = worksheet.find('Pear')
    # get the cell to be updated
    cellToUpdate = worksheet.cell(cellLookup.row, colToUpdate)
    # update the cell's value
    cellToUpdate.value = 28
    # put it in the queue
    cell_list.append(cellToUpdate)
    
    # now, do it
    worksheet.update_cells(cell_list)
    
    0 讨论(0)
提交回复
热议问题