added openpyxl support
This commit is contained in:
46
utils.py
46
utils.py
@@ -2,30 +2,14 @@
|
||||
# gemini generated
|
||||
import xlrd
|
||||
from coord import Coord, Merged
|
||||
from translations import ExcelSheetReader
|
||||
|
||||
EMPTY_CTYPES = [xlrd.XL_CELL_EMPTY, xlrd.XL_CELL_BLANK]
|
||||
|
||||
def border(sh, coord):
|
||||
cell = sh.cell(coord.row, coord.col)
|
||||
xf_style: "xlrd.formatting.XF" = sh.book.xf_list[cell.xf_index]
|
||||
return xf_style.border
|
||||
def has_no_bottom_border(reader: "ExcelSheetReader", coord):
|
||||
return reader.get_border_style(coord, 'bottom') == 0 and reader.get_border_style(coord.shift(down=1), 'top') == 0
|
||||
|
||||
def border_right(sh, cell):
|
||||
return border(sh, cell).right_line_style
|
||||
|
||||
def border_left(sh, cell):
|
||||
return border(sh, cell).left_line_style
|
||||
|
||||
def border_bottom(sh, cell):
|
||||
return border(sh, cell).bottom_line_style
|
||||
|
||||
def border_top(sh, cell):
|
||||
return border(sh, cell).top_line_style
|
||||
|
||||
def has_no_bottom_border(sh, coord):
|
||||
return border_bottom(sh, coord) == 0 and border_top(sh, coord.shift(down=1)) == 0
|
||||
|
||||
def parse_all_dirt(sh, min_pos, right, down):
|
||||
def parse_all_dirt(reader: "ExcelSheetReader", min_pos, right, down):
|
||||
RET = set()
|
||||
|
||||
row = min_pos.row
|
||||
@@ -33,7 +17,7 @@ def parse_all_dirt(sh, min_pos, right, down):
|
||||
col = min_pos.col
|
||||
while col < min_pos.col + right:
|
||||
#print(excel_coordinate(row, col))
|
||||
value = str(sh.cell(row, col).value)
|
||||
value = str(reader.get_cell_value(row, col))
|
||||
if value is not None and len(value) > 0:
|
||||
RET.add(value)
|
||||
col += 1
|
||||
@@ -116,24 +100,6 @@ def excel_coordinate(row, col):
|
||||
|
||||
return col_str + str(row + 1) # Добавляем номер строки (Excel начинается с 1)
|
||||
|
||||
|
||||
def get_merged(sh, rowx, colx):
|
||||
"""Даём ей координаты ячейки таблицы а она выдаёт её границы если переданные координаты находятся 'внутри' объединённой ячейки"""
|
||||
for crange in sh.merged_cells:
|
||||
rlo, rhi, clo, chi = crange
|
||||
chi -= 1
|
||||
rhi -= 1
|
||||
if rlo <= rowx <= rhi and chi >= colx >= clo:
|
||||
return rlo, clo, rhi, chi
|
||||
|
||||
# если ячейка не часть объединённых то начала и концы у неё равны.
|
||||
return rowx, colx, rowx, colx
|
||||
|
||||
def get_merged_coord(sh, coord):
|
||||
merged = get_merged(sh, coord.row, coord.col)
|
||||
return Merged(coord1=Coord(merged[0], merged[1]), coord2=Coord(merged[2], merged[3]))
|
||||
|
||||
|
||||
def merged_humanize(crange):
|
||||
"""Получить из 4 цифр границ AA:BB координаты как в Excel"""
|
||||
row_low, col_low, row_high, col_high = crange # see order!
|
||||
@@ -141,6 +107,8 @@ def merged_humanize(crange):
|
||||
|
||||
def unspace(s: str):
|
||||
"""Убрать пробелы из текста"""
|
||||
if s is None:
|
||||
return "!!!Python None!!!"
|
||||
return s.strip().replace(" ", "").replace("\t", "")
|
||||
|
||||
def find(sh, query = None):
|
||||
|
||||
Reference in New Issue
Block a user