def update_cells(self, start, end, vals, sheet=None): """ Update the values in a given range. The values should be listed in order from left to right across rows. :param tuple,str start: tuple indicating (row, col) or string like 'A1' :param tuple,str end: tuple indicating (row, col) or string like 'Z20' :param list vals: array of values to populate :param str,int,Worksheet sheet: optional, if you want to open a different sheet first, see :meth:`open_sheet <gspread_pandas.client.Spread.open_sheet>` (default None) """ if sheet: self.open_sheet(sheet) if not self.sheet: raise NoWorksheetException("No open worksheet") if start == end: return for start_cell, end_cell, val_chunks in self._get_update_chunks( start, end, vals): rng = get_range(start_cell, end_cell) cells = self._retry_range(rng) if len(val_chunks) != len(cells): raise MissMatchException( "Number of chunked values doesn't match number of cells") for val, cell in zip(val_chunks, cells): cell.value = val self._retry_update(cells)
def update_cells(self, start, end, vals, sheet=None, raw_columns=None): """ Update the values in a given range. The values should be listed in order from left to right across rows. Parameters ---------- start : tuple,str tuple indicating (row, col) or string like 'A1' end : tuple,str tuple indicating (row, col) or string like 'Z20' vals : list array of values to populate sheet : str,int,Worksheet optional, if you want to open a different sheet first, see :meth:`open_sheet <gspread_pandas.spread.Spread.open_sheet>` (default None) raw_columns : list, int optional, list of column numbers in the google sheet that should be interpreted as "RAW" input Returns ------- None """ self._ensure_sheet(sheet) for start_cell, end_cell, val_chunks in self._get_update_chunks( start, end, vals): rng = get_range(start_cell, end_cell) cells = self.sheet.range(rng) if len(val_chunks) != len(cells): raise MissMatchException( "Number of chunked values doesn't match number of cells") for val, cell in zip(val_chunks, cells): cell.value = val if raw_columns: assert isinstance(raw_columns, list), "raw_columns must be a list of ints" raw_cells = [i for i in cells if i.col in raw_columns] self.sheet.update_cells(raw_cells, ValueInputOption.raw) else: raw_cells = [] user_cells = [i for i in cells if i not in raw_cells] if user_cells: self.sheet.update_cells(user_cells, ValueInputOption.user_entered)
def update_cells(self, start, end, vals, sheet=None): """Update the values in a given range. The values should be listed in order from left to right across rows. Parameters ---------- start : tuple,str tuple indicating (row, col) or string like 'A1' end : tuple,str tuple indicating (row, col) or string like 'Z20' vals : list array of values to populate sheet : str,int,Worksheet optional, if you want to open a different sheet first, see :meth:`open_sheet <gspread_pandas.client.Spread.open_sheet>` (default None) Returns ------- None """ if sheet is not None: self.open_sheet(sheet) if not self.sheet: raise NoWorksheetException("No open worksheet") for start_cell, end_cell, val_chunks in self._get_update_chunks( start, end, vals ): rng = get_range(start_cell, end_cell) cells = self._retry_func(partial(self.sheet.range, rng)) if len(val_chunks) != len(cells): raise MissMatchException( "Number of chunked values doesn't match number of cells" ) for val, cell in zip(val_chunks, cells): cell.value = val self._retry_func(partial(self.sheet.update_cells, cells, "USER_ENTERED"))
def test_get_range(): assert util.get_range("a1", (3, 3)) == "A1:C3"
def test_get_range(): assert util.get_range('a1', (3, 3)) == 'A1:C3'