def cell_set_value(self, address, val): """ Set the value of a cell :param address: the address of a cell :param value: the new value """ self.reset_buffer = set() try: address = address.replace('$', '') address = address.replace("'", '') cell = self.cellmap[address] # when you set a value on cell, its should_eval flag is set to 'never' so its formula is not used until set free again => sp.activate_formula() self.cell_fix(address) # case where the address refers to a range if cell.is_range: cells_to_set = [] if not isinstance(val, list): val = [val] * len(cells_to_set) self.cell_reset(cell) cell.range.values = val # case where the address refers to a single value else: if address in self.named_ranges: # if the cell is a named range, we need to update and fix the reference cell ref_address = self.named_ranges[address] if ref_address in self.cellmap: ref_cell = self.cellmap[ref_address] else: ref_cell = Cell(ref_address, None, value=val, formula=None, is_range=False, is_named_range=False) self.cell_add(ref_cell) ref_cell.value = val if cell.value != val: if cell.value is None: cell.value = 'notNone' # hack to avoid the direct return in reset() when value is None # reset the node + its dependencies self.cell_reset(cell) # set the value cell.value = val for vol in self.pointers_to_reset: # reset all pointers self.cell_reset(self.cellmap[vol]) except KeyError: raise Exception('Cell %s not in cellmap' % address)
def set_value(self, address, val): self.reset_buffer = set() if address not in self.cellmap: raise Exception("Address not present in graph.") address = address.replace('$', '') cell = self.cellmap[address] # when you set a value on cell, its should_eval flag is set to 'never' so its formula is not used until set free again => sp.activate_formula() self.fix_cell(address) # case where the address refers to a range if self.cellmap[address].is_range: cells_to_set = [] # for a in self.cellmap[address].range.addresses: # if a in self.cellmap: # cells_to_set.append(self.cellmap[a]) # self.fix_cell(a) if type(val) != list: val = [val] * len(cells_to_set) self.reset(cell) cell.range.values = val # case where the address refers to a single value else: if address in self.named_ranges: # if the cell is a named range, we need to update and fix the reference cell ref_address = self.named_ranges[address] if ref_address in self.cellmap: ref_cell = self.cellmap[ref_address] else: ref_cell = Cell(ref_address, None, value=val, formula=None, is_range=False, is_named_range=False) self.add_cell(ref_cell) # self.fix_cell(ref_address) ref_cell.value = val if cell.value != val: if cell.value is None: cell.value = 'notNone' # hack to avoid the direct return in reset() when value is None # reset the node + its dependencies self.reset(cell) # set the value cell.value = val for vol in self.pointers_to_reset: # reset all pointers self.reset(self.cellmap[vol])
def set_value(self, address, val): self.reset_buffer = set() if address not in self.cellmap: raise Exception("Address not present in graph.") address = address.replace('$','') cell = self.cellmap[address] # when you set a value on cell, its should_eval flag is set to 'never' so its formula is not used until set free again => sp.activate_formula() self.fix_cell(address) # case where the address refers to a range if self.cellmap[address].is_range: cells_to_set = [] # for a in self.cellmap[address].range.addresses: # if a in self.cellmap: # cells_to_set.append(self.cellmap[a]) # self.fix_cell(a) if type(val) != list: val = [val]*len(cells_to_set) self.reset(cell) cell.range.values = val # case where the address refers to a single value else: if address in self.named_ranges: # if the cell is a named range, we need to update and fix the reference cell ref_address = self.named_ranges[address] if ref_address in self.cellmap: ref_cell = self.cellmap[ref_address] else: ref_cell = Cell(ref_address, None, value = val, formula = None, is_range = False, is_named_range = False ) self.add_cell(ref_cell) # self.fix_cell(ref_address) ref_cell.value = val if cell.value != val: if cell.value is None: cell.value = 'notNone' # hack to avoid the direct return in reset() when value is None # reset the node + its dependencies self.reset(cell) # set the value cell.value = val for vol_range in self.volatiles: # reset all volatiles self.reset(self.cellmap[vol_range])