CCR/.venv/lib/python3.12/site-packages/pyxlsb/handlers.py

144 lines
3.6 KiB
Python

from . import biff12
from collections import namedtuple
class Handler(object):
def __init__(self):
super(Handler, self).__init__()
def read(self, reader, recid, reclen):
if reclen > 0:
reader.skip(reclen)
class BasicHandler(Handler):
def __init__(self, name=None):
super(BasicHandler, self).__init__()
self.name = name
def read(self, reader, recid, reclen):
super(BasicHandler, self).read(reader, recid, reclen)
return self.name
class StringTableHandler(Handler):
cls = namedtuple('sst', ['count', 'uniqueCount'])
def __init__(self):
super(StringTableHandler, self).__init__()
def read(self, reader, recid, reclen):
count = reader.read_int()
unique = reader.read_int()
return self.cls._make([count, unique])
class StringInstanceHandler(Handler):
cls = namedtuple('si', ['t'])
def __init__(self):
super(StringInstanceHandler, self).__init__()
def read(self, reader, recid, reclen):
reader.skip(1)
val = reader.read_string()
return self.cls._make([val])
class SheetHandler(Handler):
cls = namedtuple('sheet', ['sheetId', 'rId', 'name'])
def __init__(self):
super(SheetHandler, self).__init__()
def read(self, reader, recid, reclen):
reader.skip(4)
sheetid = reader.read_int()
relid = reader.read_string()
name = reader.read_string()
return self.cls._make([sheetid, relid, name])
class DimensionHandler(Handler):
cls = namedtuple('dimension', ['r', 'c', 'h', 'w'])
def __init__(self):
super(DimensionHandler, self).__init__()
def read(self, reader, recid, reclen):
r1 = reader.read_int()
r2 = reader.read_int()
c1 = reader.read_int()
c2 = reader.read_int()
return self.cls._make([r1, c1, r2 - r1 + 1, c2 - c1 + 1])
class ColumnHandler(Handler):
cls = namedtuple('col', ['c1', 'c2', 'width', 'style'])
def __init__(self):
super(ColumnHandler, self).__init__()
def read(self, reader, recid, reclen):
c1 = reader.read_int()
c2 = reader.read_int()
width = reader.read_int() / 256
style = reader.read_int()
return self.cls._make([c1, c2, width, style])
class RowHandler(Handler):
cls = namedtuple('row', ['r'])
def __init__(self):
super(RowHandler, self).__init__()
def read(self, reader, recid, reclen):
r = reader.read_int()
return self.cls._make([r])
class CellHandler(Handler):
cls = namedtuple('c', ['c', 'v', 'f', 'style'])
def __init__(self):
super(CellHandler, self).__init__()
def read(self, reader, recid, reclen):
col = reader.read_int()
style = reader.read_int()
val = None
if recid == biff12.NUM:
val = reader.read_float()
elif recid == biff12.BOOLERR:
val = hex(reader.read_byte())
elif recid == biff12.BOOL:
val = reader.read_byte() != 0
elif recid == biff12.FLOAT:
val = reader.read_double()
elif recid == biff12.STRING:
val = reader.read_int()
elif recid == biff12.FORMULA_STRING:
val = reader.read_string()
elif recid == biff12.FORMULA_FLOAT:
val = reader.read_double()
elif recid == biff12.FORMULA_BOOL:
val = reader.read_byte() != 0
elif recid == biff12.FORMULA_BOOLERR:
val = hex(reader.read_byte())
return self.cls._make([col, val, None, style])
class HyperlinkHandler(Handler):
cls = namedtuple('hyperlink', ['r', 'c', 'h', 'w', 'rId'])
def __init__(self):
super(HyperlinkHandler, self).__init__()
def read(self, reader, recid, reclen):
r1 = reader.read_int()
r2 = reader.read_int()
c1 = reader.read_int()
c2 = reader.read_int()
rId = reader.read_string()
return self.cls._make([r1, c1, r2 - r1 + 1, c2 - c1 + 1, rId])