コード例 #1
0
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))
コード例 #2
0
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
コード例 #3
0
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