Пример #1
0
    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)
Пример #2
0
    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])
Пример #3
0
    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])