def walk_columns(xlws: Worksheet, flnm): for colno in range(0, 10): rowno = walk_column_until(xlws, colno, "Díjjegyzék számítás", limit=15) if rowno is not None: header_start = [rowno, colno] break else: raise RuntimeError("'Díjjegyzék számítás' not found in " + flnm) rown, coln = header_start coln += 1 offset = 1 limit = 5 while 1: djname = xlws.cell(row=rown+offset, column=coln).value offset += 1 if (djname is not None) or (offset >= limit): break if djname is None: raise RuntimeError("DJSCRAPE: no valid djname in " + flnm) cells = tuple(xlws.iter_cols(min_col=coln, max_col=coln, min_row=rown+2, max_row=rown+12))[0] mname, akkr = None, None for cell in cells: if cell.value is None: continue cv = str(cell.value) if akkr is None and \ ("Mérési módszer:" == cv[:15] or "NAV SZI" in cv or "NAVSZI" in cv): mname = cv if mname is None and \ ("akkred" in cv): akkr = cv if mname is not None and akkr is not None: break if not mname and "\n" in djname: print(" !!! DJSCRAPE: found newline @", flnm) sentences = djname.split("\n") for i, snt in enumerate(sentences): if "módszer" in snt.lower(): djname = " ".join(sentences[:i]) mname = " ".join(sentences[i:]) break return striters((djname, mname, akkr))
def walk_column_until(ws: Worksheet, coln: int, strval: str, limit=30, limitstr=""): strval = strval.lower() itr = next( ws.iter_cols(min_col=coln + 1, max_col=coln + 1, min_row=0, max_row=limit)) for i, c in enumerate(itr): cval = str(c.value).lower() if strval in cval: return i + 1 if i >= limit: return None if limitstr: if limitstr in cval: return None
def locate_table(ws: Worksheet, flnm): myrow = walk_column_until(ws, 0, "szükséges műszer", limit=120) tablerow = None if myrow is None: print("No <szükséges műszer> header in {}".format(flnm)) return None coln = 0 while tablerow is None: if coln >= 20: return None cells = next( ws.iter_cols(min_col=coln, max_col=coln, min_row=myrow, max_row=myrow + 10)) for i, c in enumerate(cells, start=myrow): if "ráosztott költség" in str(c.value) or i >= myrow + 10: break if c.value is not None: tablerow = i + 1 break coln += 1 return tablerow, coln