def test_range_cols(self): section_range = list(ColumnHelper.get_range(('ALC'), ('AVB'))) self.assertIn('ALC', section_range) self.assertIn('AVB', section_range) self.assertIn('AVA', section_range) self.assertNotIn('ALA', section_range) self.assertNotIn('AVC', section_range) section_range = list(ColumnHelper.get_range(('X'), ('AB'))) self.assertIn('X', section_range) self.assertIn('Y', section_range) self.assertIn('AA', section_range) self.assertNotIn('Q', section_range) self.assertNotIn('AC', section_range) self.assertEqual(len(section_range), 5) section_range = list(ColumnHelper.get_range(('B'), ('CBD'))) self.assertIn('B', section_range) self.assertIn('C', section_range) self.assertIn('AAA', section_range) self.assertIn('ZZ', section_range) self.assertIn('ABA', section_range) self.assertIn('CBD', section_range) self.assertIn('CAA', section_range) self.assertIn('BZZ', section_range) self.assertNotIn('CBE', section_range) section_range = list(ColumnHelper.get_range(('BCCC'), ('BCCD'))) self.assertIn('BCCC', section_range) self.assertIn('BCCD', section_range) self.assertNotIn('A', section_range) self.assertNotIn('BCCE', section_range) self.assertEqual(len(section_range), 2)
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)
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)
def _addr_in_range(self, addr, begin, end): u""" Проверяет, попадает ли адрес в диапазон :param addr: адрес ячейки :type addr: 2-tuple :param begin: начальная ячейка диапазона :type begin: 2-tuple :param end: конечная ячейка диапазона :type end: 2-tuple """ col, row = addr rows = xrange(begin[1], end[1] + 1) cols = list(ColumnHelper.get_range(begin[0], end[0])) return all([col in cols, row in rows])
def _range(self, begin, end): u""" Диапазон строк, колонок :param begin: начальная ячейка :type begin: 2-tuple :param end: конечная ячейка :type end: 2-tuple """ # Если есть объединенная ячейка, и она попадает на конец секции, то адресс конца секции записывается как конец # объединенной ячейки end = self.get_cell_end(end) rows = begin[1], end[1] + 1 cols = begin[0], end[0] range_rows = xrange(*rows) range_cols = list(ColumnHelper.get_range(*cols)) return range_rows, range_cols