initial commit

This commit is contained in:
2025-09-10 23:43:41 +03:00
commit 32954fcd59
5 changed files with 355 additions and 0 deletions

81
coord.py Normal file
View File

@@ -0,0 +1,81 @@
import xlrd
class Coord:
def __init__(self, row, col):
self.row = row
self.col = col
def shift(self, down=0, right=0, up=0, left=0) -> "Coord":
return Coord(self.row + down - up,
self.col + right - left)
def replace(self, row=None, col=None) -> "Coord":
return Coord(self.row if row is None else row,
self.col if col is None else col)
def cell(self, sh) -> "xlrd.sheet.Cell":
return sh.cell(self.row, self.col)
def __repr__(self):
import utils
return utils.excel_coordinate(self.row, self.col)
def as_numbers(self):
return self.row, self.col
def __hash__(self):
return hash((self.row, self.col))
def __eq__(self, other):
if not isinstance(other, Coord):
# don't attempt to compare against unrelated types
return NotImplemented
return self.row == other.row and self.col == other.col
class Merged:
def __init__(self, coord1, coord2):
self.low: Coord = coord1
self.high: Coord = coord2
def height(self):
return self.high.row - self.low.row + 1
def width(self):
return self.high.col - self.low.col + 1
def cell(self, sh) -> "xlrd.sheet.Cell":
return sh.cell(self.low.row, self.low.col)
def is_pseudo_merged(self):
"""Псевдо-мержнутая значит размеом 1x1, оно же если начало совпадает с концом"""
return self.low == self.high
def as_numbers(self):
low = self.low.as_numbers()
high = self.high.as_numbers()
return low[0], low[1], high[0], high[1] # rlo, clo, rhi, chi
def __hash__(self):
return hash((self.low, self.high))
def __eq__(self, other):
if not isinstance(other, Merged):
# don't attempt to compare against unrelated types
return NotImplemented
return self.low == other.low and self.high == other.high
def __contains__(self, key):
if not isinstance(key, Coord):
return NotImplemented
row = key.row
col = key.col
return (self.low.row <= row <= self.high.row) and (self.low.col <= col <= self.high.col)