Beispiel #1
0
    def set_columns_width(self, begin, end, start_cell):
        """
        Копирование ширины колонок
        :param begin: начало секции, пример ('A', 1)
        :type begin: 2-tuple
        :param end: конец секции, пример ('E', 6)
        :type end: 2-tuple
        :param start_cell: ячейка с которой выводилась секция
        :type start_cell: 2-tuple
        """
        # определим интервал столбцов из которых надо взять ширину
        end = self.get_cell_end(end)
        cols = list(ColumnHelper.get_range(begin[0], end[0]))

        # определим интервал столбцов, начинаемый со столбца начальной ячейки, куда надо прописать ширину
        end_col = ColumnHelper.add(start_cell[0],
                                   ColumnHelper.difference(end[0], begin[0]))
        new_cols = list(ColumnHelper.get_range(start_cell[0], end_col))

        # запишем ширину столбцов в интервал
        for index, src_col in enumerate(cols):
            dst_col = new_cols[index]
            src_col_el = self._create_or_get_output_col(src_col)
            # если нет исходной колонки, то не надо копировать
            if not src_col_el is None:
                # копируем данные
                attrib_col = dict(src_col_el.items())
                dst_col_el = self._create_or_get_output_col(
                    dst_col, attrib_col)
                # записываем в новую колонку
                self._set_new_column_width(dst_col, src_col_el, dst_col_el)
Beispiel #2
0
        def cell_dimensions(section, merge_cell, start_cell):
            """
            Получение координаты ячейки после смещения из-за
            объединения ячеек
            
            :param section: начало секции
            :type section: 2-tuple
            :param merge_cell: начало объединенной ячейки
            :type merge_cell: 2-tuple
            :param start_cell: стартовая ячейка
            :type start_cell: 2-tuple
            """

            section_begin_col, section_begin_row = section

            start_col, start_row = start_cell

            begin_col, begin_row = merge_cell

            new_begin_row = start_row + begin_row - section_begin_row
            new_begin_col = ColumnHelper.add(
                start_col, ColumnHelper.difference(begin_col,
                                                   section_begin_col))

            return new_begin_col + str(new_begin_row)
Beispiel #3
0
    def get_width(self):
        u"""
        Получение ширины секции
        """

        begin_col, begin_row = self.begin
        end_col, end_row = self.sheet_data.get_cell_end(self.end)

        return ColumnHelper.difference(end_col, begin_col) + 1
Beispiel #4
0
    def get_next_column(self, current_col, end_col, begin_col):
        """
        Получение следующей колонки

        :param current_col: текущая колонка
        :type current_col: str
        :param end_col: конечная колонка
        :type end_col: str
        :param begin_col: начальная колонка
        :type begin_col: str
        """

        return ColumnHelper.add(
            current_col,
            ColumnHelper.difference(end_col, begin_col) + 1)
Beispiel #5
0
    def get_next_formula(self, row, column):
        """
        Изменяем формулу и отдаём
        """

        diff_row = row - self._last_row
        self._last_row = row

        diff_column = ColumnHelper.difference(column, self._last_column)
        self._last_column = column

        if not self.first:

            formula = self.formula

            for start, end in self._get_cell_coord():
                # Подстрока с адресом ячейки
                cell_coord = self.formula[start:end]

                change_column, change_row = self._change_analyze(cell_coord)

                column_index = self._get_next_index(cell_coord,
                                                    change_column,
                                                    diff_column,
                                                    is_column=True)
                row_index = self._get_next_index(cell_coord,
                                                 change_row,
                                                 diff_row,
                                                 is_column=False)
                # Сцепляем индекс колонки и индекс ячейки
                new_cell_coord = ''.join([column_index, row_index])

                # Заменяем подстроку в формуле
                formula = formula.replace(cell_coord, new_cell_coord)

            self.formula = formula
        else:
            self.first = False

        return self.formula
Beispiel #6
0
    def flush(self,
              params,
              oriented=ISpreadsheetSection.LEFT_DOWN,
              used_formulas=None):
        """
        Вывод. Имеется два механизма вывода.
        Для использования старого не передавать direction
        
        :param params: параметры замены
        :type params: dict
        :param oriented: направление ориентации
        :type oriented: ISpreadsheetSection
        :param used_formulas: использованные формулы
        :type used_formulas: dict
        """
        assert isinstance(params, dict)
        assert oriented in (Section.VERTICAL, Section.HORIZONTAL,
                            Section.LEFT_DOWN, Section.RIGHT_UP, Section.RIGHT,
                            Section.HIERARCHICAL)

        # Тут смещение курсора, копирование данных из листа и общих строк
        # Генерация новых данных и новых общих строк

        cursor = self.sheet_data.cursor

        begin_col, begin_row = self.begin
        end_col, end_row = self.sheet_data.get_cell_end(self.end)

        current_col, current_row = CalculateNextCursorXLSX().get_next_cursor(
            cursor, (begin_col, begin_row), (end_col, end_row), oriented, self)

        self.sheet_data.last_section.row = (current_col, current_row)
        self.sheet_data.last_section.column = (ColumnHelper.add(
            current_col, ColumnHelper.difference(
                end_col, begin_col)), current_row + end_row - begin_row)

        self.sheet_data.flush(self.begin, self.end, (current_col, current_row),
                              params, used_formulas)