pyxllib 0.3.91__tar.gz → 0.3.92__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyxllib-0.3.91/pyxllib.egg-info → pyxllib-0.3.92}/PKG-INFO +1 -1
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/echarts.py +2 -2
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/xlsxlib.py +146 -122
- {pyxllib-0.3.91 → pyxllib-0.3.92/pyxllib.egg-info}/PKG-INFO +1 -1
- {pyxllib-0.3.91 → pyxllib-0.3.92}/setup.py +1 -1
- {pyxllib-0.3.91 → pyxllib-0.3.92}/LICENSE +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/MANIFEST.in +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/README.md +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/disjoint.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/geo.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/intervals.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/matcher.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/newbie.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/pupil.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/shapelylib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/specialist.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/stat.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/treelib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/algo/unitlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/expert.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/imfile.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/imhash.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/pupil.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/rgbfmt.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/trackbartools.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/xlcvlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/cv/xlpillib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/oss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/pglib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/sqlite.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/data/sqllib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/JLineViewer.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/autogui/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/autogui/autogui.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/autogui/virtualkey.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/demolib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/kq5034lib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/old.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/qt.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/seleniumlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/tk.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/unixlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/utools.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/webhook.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/win32lib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/ext/yuquelib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/docxlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/gitlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/movielib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/newbie.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/onenotelib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/packlib/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/packlib/zipfile.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/pdflib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/pupil.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/dirlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/download.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/file/specialist/filelib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/deprecatedlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/ipyexec.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/newbie.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/pupil.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/sitepackages.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/bc.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/browser.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/common.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/datetime.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/tictoc.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/specialist/xllog.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/prog/xlosenv.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/tablepyxl/style.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/stdlib/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/ahocorasick.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/charclasslib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/jiebalib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/jscode.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/latex/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/levenshtein.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/nestenv.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/newbie.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pupil/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pupil/common.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pupil/xlalign.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/pycode.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/specialist/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/specialist/common.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/specialist/ptag.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/spellchecker.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/vbacode.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/text/xmllib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/xl.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib/xlcv.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/SOURCES.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/dependency_links.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/requires.txt +4 -4
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxllib.egg-info/top_level.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/clientlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/specialist.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/torch_app.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/xlpaddle.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ai/xltorch.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/coco.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/datacls.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/datasets.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/gptlib.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/deteval.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/icdar2013.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/iou.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/icdar/rrc_evaluation_funcs_1_1.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/imtextline.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/labelme.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/removeline.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/data/specialist.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/eval/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/paddleocr.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/configs/rec/multi_language/generate_multi_language_configs.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/ColorJitter.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/copy_paste.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/east_process.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/gen_table_mask.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/iaa_augment.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/label_ops.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/make_border_map.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/make_pse_gt.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/make_shrink_map.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/operators.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/pg_process.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/randaugment.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/random_crop_data.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/rec_img_aug.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/sast_process.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/text_image_aug/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/text_image_aug/augment.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/imaug/text_image_aug/warp_mls.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/lmdb_dataset.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/pgnet_dataset.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/pubtab_dataset.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/data/simple_dataset.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/ace_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/basic_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/center_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/cls_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/combined_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_basic_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_db_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_east_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_pse_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/det_sast_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/distillation_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/e2e_pg_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/kie_sdmgr_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_aster_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_att_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_ctc_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_enhanced_ctc_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_nrtr_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_sar_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/rec_srn_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/losses/table_att_loss.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/cls_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/det_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/distillation_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/e2e_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/eval_det_iou.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/kie_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/rec_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/metrics/table_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/architectures/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/architectures/base_model.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/architectures/distillation_model.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/det_mobilenet_v3.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/det_resnet_vd_sast.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/e2e_resnet_vd_pg.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/kie_unet_sdmgr.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_mobilenet_v3.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_mv1_enhance.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_nrtr_mtb.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_31.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_aster.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/backbones/rec_resnet_vd.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/cls_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_db_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_east_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_pse_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/det_sast_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/e2e_pg_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/kie_sdmgr_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/multiheadAttention.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_aster_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_att_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_ctc_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_nrtr_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_sar_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/rec_srn_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/self_attention.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/heads/table_att_head.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/db_fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/east_fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/pg_fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/rnn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/sast_fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/necks/table_fpn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/stn.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/tps.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/modeling/transforms/tps_spatial_transformer.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/learning_rate.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/lr_scheduler.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/optimizer.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/optimizer/regularizer.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/cls_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/db_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/east_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/locality_aware_nms.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pg_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/pse/setup.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/pse_postprocess/pse_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/rec_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/postprocess/sast_postprocess.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/eval.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/export_center.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/export_model.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_cls.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_det.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_e2e.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_rec.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/predict_system.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer/utility.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_cls.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_det.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_e2e.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_kie.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_rec.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/infer_table.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/program.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/test_hubserving.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/train.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/tools/xlprog.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/EN_symbol_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ar_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/arabic_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/be_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/bg_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/chinese_cht_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/cyrillic_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/devanagari_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/en_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/fa_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/french_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/german_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/hi_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/it_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/japan_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ka_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/korean_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/latin_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/mr_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ne_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/oc_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/pu_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/rs_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/rsc_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ru_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ta_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/table_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/table_structure_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/te_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ug_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/uk_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/ur_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict/xi_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/dict90.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_metric/Deteval.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_metric/polygon_fast.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/extract_batchsize.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_fast.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/extract_textpoint_slow.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/pgnet_pp_utils.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/e2e_utils/visual.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/en_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/gen_label.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/ic15_dict.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/iou.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/logging.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/network.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/ppocr_keys_v1.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/profiler.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/save_load.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/stats.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppocr/utils/utility.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/predict_system.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/eval_table.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/matcher.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/predict_structure.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/predict_table.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/table_metric/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/table_metric/parallel.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/table_metric/table_metric.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/tablepyxl/__init__.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/tablepyxl/style.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/table/tablepyxl/tablepyxl.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/ppstructure/utility.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/pyxlpr/xlai.py +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/requirements.txt +0 -0
- {pyxllib-0.3.91 → pyxllib-0.3.92}/setup.cfg +0 -0
@@ -29,7 +29,7 @@ class XlChart(Chart):
|
|
29
29
|
def set_title(self, title):
|
30
30
|
self.set_global_opts(title_opts=pyecharts.options.TitleOpts(title=title))
|
31
31
|
|
32
|
-
def add_series(self, name, data, *, type=None, color=None,
|
32
|
+
def add_series(self, name, data, *, type=None, color=None, labels=None,
|
33
33
|
**kwargs):
|
34
34
|
""" 垃圾pyecharts,毁我青春~~
|
35
35
|
|
@@ -54,7 +54,7 @@ class XlChart(Chart):
|
|
54
54
|
kwargs['label']['formatter'] = fmt
|
55
55
|
|
56
56
|
self._append_color(color)
|
57
|
-
self._append_legend(name
|
57
|
+
self._append_legend(name)
|
58
58
|
|
59
59
|
self.options.get('series').append(
|
60
60
|
{
|
@@ -721,40 +721,58 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
|
|
721
721
|
right=self.max_column, bottom=self.max_row)
|
722
722
|
return raw_used_range
|
723
723
|
|
724
|
-
@run_once('id,str') # 同一个表,同一行不会重复计算
|
725
724
|
def is_empty_row(self, row, start_col, end_col):
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
725
|
+
if not hasattr(self, 'is_empty_row_cache'):
|
726
|
+
self.is_empty_row_cache = {}
|
727
|
+
key = (row, start_col, end_col)
|
728
|
+
|
729
|
+
def is_empty_row_core():
|
730
|
+
cur_col = start_col
|
731
|
+
# 特地提前检查下最后一列的那个单元格
|
732
|
+
if self.cell(row, end_col).value is not None:
|
732
733
|
return False
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
cur_col += 1
|
740
|
-
|
741
|
-
|
734
|
+
while cur_col <= end_col:
|
735
|
+
if self.cell(row, cur_col).value is not None:
|
736
|
+
return False
|
737
|
+
# 步长随着尝试的增加,也逐渐降低采样率
|
738
|
+
n = cur_col - start_col + 1
|
739
|
+
# 在最大值m=16384列情况下,/1000,最多检索3404个单元格,/100,最多检索569次,/50最多检索320次
|
740
|
+
# cur_col += (n // 50) + 1
|
741
|
+
# 再变形,加强前面权重,大大降低后面权重
|
742
|
+
if n <= 100:
|
743
|
+
cur_col += 1
|
744
|
+
else: # 最多54次
|
745
|
+
cur_col += (n // 10)
|
746
|
+
|
747
|
+
return True
|
748
|
+
|
749
|
+
if key not in self.is_empty_row_cache:
|
750
|
+
self.is_empty_row_cache[key] = is_empty_row_core()
|
751
|
+
|
752
|
+
return self.is_empty_row_cache[key]
|
742
753
|
|
743
|
-
return True
|
744
|
-
|
745
|
-
@run_once('id,str') # 同一个表,同一列不会重复计算
|
746
754
|
def is_empty_column(self, col, start_row, end_row):
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
755
|
+
if not hasattr(self, 'is_empty_column_cache'):
|
756
|
+
self.is_empty_column_cache = {}
|
757
|
+
key = (col, start_row, end_row)
|
758
|
+
|
759
|
+
def is_empty_column_core():
|
760
|
+
cur_row = start_row
|
761
|
+
# 特地提前检查下最后一行的那个单元格
|
762
|
+
if self.cell(end_row, col).value is not None:
|
753
763
|
return False
|
754
|
-
|
755
|
-
|
756
|
-
|
757
|
-
|
764
|
+
while cur_row <= end_row:
|
765
|
+
if self.cell(cur_row, col).value is not None:
|
766
|
+
return False
|
767
|
+
n = cur_row - start_row + 1
|
768
|
+
# 在最大值n=1048576行情况下,/1000,最多检索7535个单元格,/100,最多检索987次,/50最多检索530次
|
769
|
+
cur_row += (n // 1000) + 1
|
770
|
+
return True
|
771
|
+
|
772
|
+
if key not in self.is_empty_column_cache:
|
773
|
+
self.is_empty_column_cache[key] = is_empty_column_core()
|
774
|
+
|
775
|
+
return self.is_empty_column_cache[key]
|
758
776
|
|
759
777
|
def find_last_non_empty_row(self, start_row, end_row, start_col, end_col, m=30):
|
760
778
|
# 1 如果剩余行数不多(小于等于m),直接遍历这些行
|
@@ -864,7 +882,6 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
|
|
864
882
|
# 如果所有分割点都是空的,则返回-1
|
865
883
|
return -1
|
866
884
|
|
867
|
-
@run_once('id,str') # 同一个表,同一行不会重复计算
|
868
885
|
def get_usedrange(self):
|
869
886
|
""" 定位有效数据区间。
|
870
887
|
|
@@ -891,48 +908,48 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
|
|
891
908
|
|
892
909
|
:param reset_bounds: 计算出新区域后,是否重置ws的边界值
|
893
910
|
"""
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
|
905
|
-
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
return used_range
|
911
|
+
if not hasattr(self, 'usedrange_cache'):
|
912
|
+
# 初始化边界值
|
913
|
+
left, right, top, bottom = self.min_column, self.max_column, self.min_row, self.max_row
|
914
|
+
|
915
|
+
# start_time = time.time()
|
916
|
+
# 使用优化后的函数找到最下方的行和最右边的列
|
917
|
+
bottom = self.find_last_non_empty_row(top, bottom, left, right)
|
918
|
+
if bottom == -1:
|
919
|
+
return 'A1' # 空表返回A1占位
|
920
|
+
right = self.find_last_non_empty_column(left, right, top, bottom)
|
921
|
+
if right == -1:
|
922
|
+
return 'A1'
|
923
|
+
|
924
|
+
# 使用优化后的函数找到最上方的行和最左边的列
|
925
|
+
top = self.find_first_non_empty_row(top, bottom, left, right)
|
926
|
+
if top == -1:
|
927
|
+
return 'A1'
|
928
|
+
left = self.find_first_non_empty_column(left, right, top, bottom)
|
929
|
+
if left == -1:
|
930
|
+
return 'A1'
|
931
|
+
# get_global_var('get_usedrange_time')[-1] += time.time() - start_time
|
932
|
+
|
933
|
+
# 2 然后还要再扩范围(根据合并单元格情况)
|
934
|
+
# start_time = time.time()
|
935
|
+
top0, bottom0, left0, right0 = top, bottom, left, right
|
936
|
+
for merged_range in self.merged_cells.ranges:
|
937
|
+
l, t, r, b = merged_range.bounds
|
938
|
+
if top0 <= b <= bottom0 or top0 <= t <= bottom0:
|
939
|
+
if left0 <= r and l < left:
|
940
|
+
left = l
|
941
|
+
if l <= right0 and r > right:
|
942
|
+
right = r
|
943
|
+
if left0 <= r <= right0 or left0 <= l <= right0:
|
944
|
+
if top0 <= b and t < top:
|
945
|
+
top = t
|
946
|
+
if t <= bottom0 and b > bottom:
|
947
|
+
bottom = b
|
948
|
+
# get_global_var('expandrange_time')[-1] += time.time() - start_time
|
949
|
+
|
950
|
+
self.used_range = build_range_address(left=left, top=top, right=right, bottom=bottom)
|
951
|
+
|
952
|
+
return self.used_range
|
936
953
|
|
937
954
|
def copy_worksheet(self, dst_ws):
|
938
955
|
"""跨工作薄时复制表格内容的功能
|
@@ -967,7 +984,6 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
|
|
967
984
|
else:
|
968
985
|
yield tuple(cells)
|
969
986
|
|
970
|
-
@run_once('id,str')
|
971
987
|
def search(self, pattern, min_row=None, max_row=None, min_col=None, max_col=None, order=None, direction=0):
|
972
988
|
""" 查找满足pattern正则表达式的单元格
|
973
989
|
|
@@ -987,40 +1003,50 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
|
|
987
1003
|
>> ws.search('年段')
|
988
1004
|
<Cell '预算总表'.B2>
|
989
1005
|
"""
|
990
|
-
|
991
|
-
|
992
|
-
|
993
|
-
|
994
|
-
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
999
|
-
|
1000
|
-
|
1001
|
-
|
1002
|
-
|
1003
|
-
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1007
|
-
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1006
|
+
if not hasattr(self, 'search_cache'):
|
1007
|
+
self.search_cache = {}
|
1008
|
+
key = (pattern, min_row, max_row, min_col, max_col, order, direction)
|
1009
|
+
|
1010
|
+
def get_search_core():
|
1011
|
+
# 1 定界
|
1012
|
+
x1, x2 = max(min_row or 1, 1), min(max_row or self.max_row, self.max_row)
|
1013
|
+
y1, y2 = max(min_col or 1, 1), min(max_col or self.max_column, self.max_column)
|
1014
|
+
|
1015
|
+
# 2 遍历
|
1016
|
+
if isinstance(pattern, datetime.date):
|
1017
|
+
pattern = f'^{(pattern - datetime.date(1899, 12, 30)).days}$'
|
1018
|
+
|
1019
|
+
if isinstance(pattern, (list, tuple)):
|
1020
|
+
cel = None
|
1021
|
+
for p in pattern:
|
1022
|
+
cel = self.search(p, x1, x2, y1, y2, order)
|
1023
|
+
if cel:
|
1024
|
+
# up, down, left, right 找到的单元格四边界
|
1025
|
+
l, u, r, d = getattr(cel.in_range(), 'bounds', (cel.column, cel.row, cel.column, cel.row))
|
1026
|
+
if direction == 0:
|
1027
|
+
x1, x2, y1, y2 = max(x1, d + 1), x2, max(y1, l), min(y2, r)
|
1028
|
+
elif direction == 1:
|
1029
|
+
x1, x2, y1, y2 = max(x1, u), min(x2, d), max(y1, r + 1), y2
|
1030
|
+
elif direction == 2:
|
1031
|
+
x1, x2, y1, y2 = x1, min(x2, u - 1), max(y1, l), min(y2, r)
|
1032
|
+
elif direction == 3:
|
1033
|
+
x1, x2, y1, y2 = max(x1, u), min(x2, d), y1, min(y2, l - 1)
|
1034
|
+
else:
|
1035
|
+
raise ValueError(f'direction参数值错误{direction}')
|
1013
1036
|
else:
|
1014
|
-
|
1015
|
-
|
1016
|
-
|
1017
|
-
|
1018
|
-
|
1019
|
-
|
1020
|
-
|
1021
|
-
|
1022
|
-
|
1023
|
-
|
1037
|
+
return None
|
1038
|
+
return cel
|
1039
|
+
else:
|
1040
|
+
if isinstance(pattern, str): pattern = re.compile(pattern)
|
1041
|
+
for x, y in product(range(x1, x2 + 1), range(y1, y2 + 1), order=order):
|
1042
|
+
cell = self.cell(x, y)
|
1043
|
+
if cell.celltype() == 1: continue # 过滤掉合并单元格位置
|
1044
|
+
if pattern.search(str(cell.value)): return cell # 返回满足条件的第一个值
|
1045
|
+
|
1046
|
+
if key not in self.search_cache:
|
1047
|
+
self.search_cache[key] = get_search_core()
|
1048
|
+
|
1049
|
+
return self.search_cache[key]
|
1024
1050
|
|
1025
1051
|
findcel = search
|
1026
1052
|
|
@@ -1571,12 +1597,12 @@ class XlWorksheet(openpyxl.worksheet.worksheet.Worksheet):
|
|
1571
1597
|
current_alignment_dict.pop('wrapText', None)
|
1572
1598
|
cell.alignment = Alignment(wrapText=True, **current_alignment_dict)
|
1573
1599
|
|
1574
|
-
@run_once('id,str')
|
1575
1600
|
def get_sorted_merged_cells(self):
|
1576
1601
|
""" 将合并单元格按照行列顺序排列。
|
1577
1602
|
"""
|
1578
|
-
|
1579
|
-
|
1603
|
+
if not hasattr(self, 'sorted_merged_cells'):
|
1604
|
+
self.sorted_merged_cells = list(sorted(self.merged_cells.ranges, key=lambda x: (x.min_row, x.min_col)))
|
1605
|
+
return self.sorted_merged_cells
|
1580
1606
|
|
1581
1607
|
|
1582
1608
|
inject_members(XlWorksheet, openpyxl.worksheet.worksheet.Worksheet, white_list=['_cells_by_row'])
|
@@ -2390,7 +2416,8 @@ def extract_workbook_summary2(file_path, *,
|
|
2390
2416
|
if mode == 1:
|
2391
2417
|
ws = wb.active
|
2392
2418
|
res['ActiveSheet'] = ws.title
|
2393
|
-
|
2419
|
+
if hasattr(ws, 'selected_cell'):
|
2420
|
+
res['Selection'] = ws.selected_cell
|
2394
2421
|
|
2395
2422
|
# res = convert_to_json_compatible(res)
|
2396
2423
|
|
@@ -2845,7 +2872,8 @@ class WorkbookSummary3:
|
|
2845
2872
|
'sheets': x['sheets'],
|
2846
2873
|
'mode': 'Complete information',
|
2847
2874
|
'ActiveSheet': x['ActiveSheet'], # 当期激活的工作表
|
2848
|
-
|
2875
|
+
# 最多截取250个字符。(一般情况下这个很小的,只是在很极端情况,比如离散选中了非常多区域,这个可能就会太长
|
2876
|
+
'Selection': x['Selection'][:250],
|
2849
2877
|
}
|
2850
2878
|
|
2851
2879
|
# 处理前确保下cells字段存在,避免后续很多处理过程要特判
|
@@ -2876,6 +2904,7 @@ def extract_workbook_summary3b(file_path,
|
|
2876
2904
|
summary_limit_len=4000,
|
2877
2905
|
timeout_seconds=60,
|
2878
2906
|
return_mode=0,
|
2907
|
+
debug=False,
|
2879
2908
|
**kwargs):
|
2880
2909
|
"""
|
2881
2910
|
|
@@ -2885,17 +2914,9 @@ def extract_workbook_summary3b(file_path,
|
|
2885
2914
|
:param kwargs: 其他是summary2读取文件的时候的参数,其实都不太关键,一般不用特地设置
|
2886
2915
|
"""
|
2887
2916
|
res = {}
|
2888
|
-
res['fileName'] = file_path.name
|
2917
|
+
res['fileName'] = Path(file_path).name
|
2889
2918
|
load_time = summary2_time = summary3_time = -1
|
2890
2919
|
|
2891
|
-
# with Timeout(timeout_seconds):
|
2892
|
-
# start_time = time.time()
|
2893
|
-
# res, load_time = extract_workbook_summary2(file_path, mode=1, return_mode=1, **kwargs)
|
2894
|
-
# summary2_time = time.time() - start_time - load_time
|
2895
|
-
# start_time = time.time()
|
2896
|
-
# res = WorkbookSummary3.summary2_to_summary3b(res, summary_limit_len)
|
2897
|
-
# summary3_time = time.time() - start_time
|
2898
|
-
|
2899
2920
|
try:
|
2900
2921
|
with Timeout(timeout_seconds):
|
2901
2922
|
start_time = time.time()
|
@@ -2905,10 +2926,13 @@ def extract_workbook_summary3b(file_path,
|
|
2905
2926
|
start_time = time.time()
|
2906
2927
|
res = WorkbookSummary3.summary2_to_summary3b(res, summary_limit_len)
|
2907
2928
|
summary3_time = time.time() - start_time
|
2908
|
-
except TimeoutError:
|
2929
|
+
except TimeoutError as e:
|
2930
|
+
if debug:
|
2931
|
+
raise e
|
2909
2932
|
res['error'] = f'超时,未完成摘要提取:{timeout_seconds}秒'
|
2910
2933
|
except Exception as e:
|
2911
|
-
|
2934
|
+
if debug:
|
2935
|
+
raise e
|
2912
2936
|
res['error'] = f'提取摘要时发生错误:{format_exception(e, 2)}'
|
2913
2937
|
|
2914
2938
|
if return_mode == 1:
|
@@ -30,7 +30,7 @@ _dir = Path(__file__).parent
|
|
30
30
|
|
31
31
|
setup(
|
32
32
|
name='pyxllib', # pip 安装时用的名字
|
33
|
-
version='0.3.
|
33
|
+
version='0.3.92', # 当前版本,每次更新上传到pypi都需要修改; 第4位版本号一般是修紧急bug
|
34
34
|
author='code4101',
|
35
35
|
author_email='877362867@qq.com',
|
36
36
|
url='https://github.com/XLPRUtils/pyxllib',
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|