| | |
| | | return n - 1 |
| | | |
| | | |
| | | def sheet_merges(path): |
| | | """è¿å {sheet_name: [(rlo, rhi, clo, chi), ...]}ï¼0 åºãå³å¼ï¼ã |
| | | |
| | | ç¨äºè¯å«ã两级表头ãï¼ç»è¡¨å¤´ï¼è·¨å¤åçåå¹¶åå
æ ¼ï¼ä¸è½ç´æ¥å½ææå段çåã |
| | | 读ä¸å°åå¹¶ä¿¡æ¯æ¶è¿å已解æå°çé¨åï¼ä¸æå¼å¸¸ï¼ã |
| | | """ |
| | | with open(path, 'rb') as fh: |
| | | magic = fh.read(4) |
| | | out = {} |
| | | try: |
| | | if magic[:4] == b'PK\x03\x04': |
| | | if openpyxl is None: |
| | | return out |
| | | wb = openpyxl.load_workbook(path, data_only=True) |
| | | for nm in wb.sheetnames: |
| | | ws = wb[nm] |
| | | out[nm] = [(r.min_row - 1, r.max_row, r.min_col - 1, r.max_col) |
| | | for r in ws.merged_cells.ranges] |
| | | wb.close() |
| | | else: |
| | | if xlrd is None: |
| | | return out |
| | | bk = xlrd.open_workbook(path, formatting_info=True) |
| | | for si in range(bk.nsheets): |
| | | sh = bk.sheet_by_index(si) |
| | | out[sh.name] = list(getattr(sh, 'merged_cells', []) or []) |
| | | except Exception: |
| | | return out |
| | | return out |
| | | |
| | | |
| | | def merge_span(merges, row1, col0): |
| | | """该åå
æ ¼ï¼1 åºè¡å·ã0 åºåå·ï¼æå¨åå¹¶åºç (å0èµ·, å0æ¢å³å¼)ï¼ä¸å¨åå¹¶åºè¿å Noneã""" |
| | | for (rlo, rhi, clo, chi) in (merges or ()): |
| | | if rlo <= row1 - 1 < rhi and clo <= col0 < chi: |
| | | return (clo, chi) |
| | | return None |
| | | |
| | | |
| | | def open_sheets(path): |
| | | """è¿å [(sheet_name, nrows, ncols, cell_fn), ...]ã |
| | | |