pyOpenVBA 6.1.0__tar.gz → 6.1.2__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.
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/PKG-INFO +4 -2
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/README.md +3 -1
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/pyproject.toml +1 -1
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/__init__.py +1 -1
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_host.py +5 -1
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_references.py +45 -1
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/__init__.py +485 -493
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_excel_addin.xlam +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_workbook.xlsb +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_workbook.xlsm +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/.gitignore +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/LICENSE.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/architecture.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/excel_checklist.csv +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/host_completeness.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/ms-ovba-implementation-guide_v2.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/power_query.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_complex/README.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_designs/README.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_macros/README.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_write/README.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/pcode/README.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/roadmap.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/vba_runtime.md +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/__main__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_a1.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_deflate.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_new_project.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_oforms_pages.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_oforms_records.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_package_signature.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_ppt_container.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_database.accdb +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_database_module.accdb +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_document.docm +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_presentation.pptm +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_workbook.xlsx +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/engine_skeleton.accdb +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/engine_skeleton.mdb +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.blob +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.lvprop +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.propdata +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.prototypes +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.typeinfo +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.blob +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.lvprop +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.propdata +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.prototypes +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.typeinfo +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_xml.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_alloc.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_btree.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_collation.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_collation_general_legacy.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_compact.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_complex.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_datapage.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_ddl.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_designs.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_facade.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_format.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_index.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_lval.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_macros.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_pages.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_props.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_queries.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_rows.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_schema.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_sql.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_storage.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_tdef.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_validate.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_vba.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/database.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access_read.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_arrays.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_autofill.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_autofilter.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_bridge.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_calc.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_clipboard.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_control_refs.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_controls.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_copy_names.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_dimensions.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_duplicates.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_dynamic_file.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_editing.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_engine_book.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_evaluate.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_events.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_find.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_font_rows.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_formats.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_formula_format.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_io.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_merges.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_model.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_named_api.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_names.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_notes.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_notes_file.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_number_format.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_protection.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_radios.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_refresh.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_region.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_row_formats.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_shape_api.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_shapes.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_shared.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_sheet_copy.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_sheet_move.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_sort.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_special_cells.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_spills.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_styles.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_table_edits.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_tables.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_typing.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_validation.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_visible.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_windows.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_worksheet_functions.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/_bridge.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/_io.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/_model.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/_bridge.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/_io.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/_model.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/cfb.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/excel.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/exceptions.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/forms.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_arity.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/catalog.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/cells.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/collate.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/dates.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/evaluator.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/aggregate.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/arithmetic.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/arrays.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/common.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/conditional.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/database.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/dates.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/distributions.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/engineering.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/financial.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/information.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/lambdas.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/logical.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/lookup.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/matrix.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/statistics.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/subtotal.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/text.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/host.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/lexer.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/nodes.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/numbers.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/parser.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/precise.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/reference.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/registry.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/special.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/values.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_deep.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_display.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_formula2.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_inventory.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_parse.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_prefixes.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_r1c1.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_spell.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_structured.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_values.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_ast.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_constants_data.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_intrinsics.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_inventory.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_inventory_data.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_lex.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_objects.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_parse.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_preprocess.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_runtime.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_scripting.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_values.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_eval.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_inventory.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_inventory_data.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_library.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_parse.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_values.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerpoint.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_binary.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_files.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_mashup.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_metadata.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_opc.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_package.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_refresh.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_section.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_sheets.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/workbook.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/__init__.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_docx.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_docx_text.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_drawingml.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_pptx.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_values.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_xlsx.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/vba.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/vba_pcode.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/word.py +0 -0
- {pyopenvba-6.1.0 → pyopenvba-6.1.2}/tests/fuzz_corpus/README.md +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pyOpenVBA
|
|
3
|
-
Version: 6.1.
|
|
3
|
+
Version: 6.1.2
|
|
4
4
|
Summary: Read and write VBA macros and Excel Power Query in pure Python, no dependencies.
|
|
5
5
|
Project-URL: Homepage, https://github.com/WilliamSmithEdward/pyOpenVBA
|
|
6
6
|
Project-URL: Repository, https://github.com/WilliamSmithEdward/pyOpenVBA
|
|
@@ -361,7 +361,9 @@ form.remove_page("Page2", multipage="Wizard")
|
|
|
361
361
|
```
|
|
362
362
|
|
|
363
363
|
A form can be built from nothing. `add_form` creates the designer storage
|
|
364
|
-
and the code-behind module together
|
|
364
|
+
and the code-behind module together. A project with no Microsoft Forms
|
|
365
|
+
reference gets the one the editor adds with a first form, so code that
|
|
366
|
+
names `MSForms` types compiles:
|
|
365
367
|
|
|
366
368
|
```python
|
|
367
369
|
with pyopenvba.ExcelFile("book.xlsm") as wb:
|
|
@@ -324,7 +324,9 @@ form.remove_page("Page2", multipage="Wizard")
|
|
|
324
324
|
```
|
|
325
325
|
|
|
326
326
|
A form can be built from nothing. `add_form` creates the designer storage
|
|
327
|
-
and the code-behind module together
|
|
327
|
+
and the code-behind module together. A project with no Microsoft Forms
|
|
328
|
+
reference gets the one the editor adds with a first form, so code that
|
|
329
|
+
names `MSForms` types compiles:
|
|
328
330
|
|
|
329
331
|
```python
|
|
330
332
|
with pyopenvba.ExcelFile("book.xlsm") as wb:
|
|
@@ -289,7 +289,9 @@ class VBAHostFile(ReferenceManager):
|
|
|
289
289
|
a storage without a module is not a component the host will show,
|
|
290
290
|
and a module without a storage is a class rather than a form.
|
|
291
291
|
Geometry is in points; the defaults are the size Excel gives a new
|
|
292
|
-
form.
|
|
292
|
+
form. A project that does not reference Microsoft Forms yet gets
|
|
293
|
+
the reference the editor adds with a first form, so code naming
|
|
294
|
+
``MSForms`` types compiles.
|
|
293
295
|
|
|
294
296
|
The form is returned ready to edit -- ``add_control`` and friends
|
|
295
297
|
work on it straight away -- and lands on disk at :meth:`save`.
|
|
@@ -305,6 +307,8 @@ class VBAHostFile(ReferenceManager):
|
|
|
305
307
|
code_page=project.code_page,
|
|
306
308
|
)
|
|
307
309
|
project.add_module(name, header, kind=VBAModuleKind.other)
|
|
310
|
+
# The editor declares Microsoft Forms with a project's first form, and code naming its types needs it.
|
|
311
|
+
self._ensure_forms_reference()
|
|
308
312
|
# The cache was read before this form existed.
|
|
309
313
|
self._forms = None
|
|
310
314
|
return next(f for f in self.forms() if f.name == name)
|
|
@@ -9,6 +9,12 @@ from pyopenvba.exceptions import VBAProjectError
|
|
|
9
9
|
from pyopenvba.vba import VBAReference, encoding_for_codepage
|
|
10
10
|
|
|
11
11
|
MSFORMS_GUID = "{0D452EE1-E08F-101A-852E-02608C4D0BB4}"
|
|
12
|
+
#: The Microsoft Forms library as the editor's reference names it, path included, whatever FM20.DLL's real
|
|
13
|
+
#: location: the host resolves the library by GUID and version (tests/fixtures/form_reference.json).
|
|
14
|
+
MSFORMS_LIBID = ("*\\G{0D452EE1-E08F-101A-852E-02608C4D0BB4}#2.0#0#C:\\WINDOWS\\system32\\FM20.DLL"
|
|
15
|
+
"#Microsoft Forms 2.0 Object Library")
|
|
16
|
+
#: A control reference's twiddled libid, which is the null one.
|
|
17
|
+
_NULL_LIBID = "*\\G{00000000-0000-0000-0000-000000000000}#0.0#0##"
|
|
12
18
|
VBA_GUID = "{000204EF-0000-0000-C000-000000000046}"
|
|
13
19
|
|
|
14
20
|
|
|
@@ -114,6 +120,32 @@ def registered_block(reference: VBAReference, code_page: int) -> bytes:
|
|
|
114
120
|
+ record(0xD, struct.pack("<I", len(libid)) + libid + bytes(6)))
|
|
115
121
|
|
|
116
122
|
|
|
123
|
+
def is_msforms(reference: VBAReference) -> bool:
|
|
124
|
+
"""Whether ``reference`` is the Microsoft Forms library, by name or GUID."""
|
|
125
|
+
return reference.name.lower() == "msforms" or reference.guid.upper() == MSFORMS_GUID
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def msforms_block(code_page: int) -> bytes:
|
|
129
|
+
"""The Microsoft Forms reference the editor declares with a project's first UserForm.
|
|
130
|
+
|
|
131
|
+
Excel, Word and PowerPoint write the same control reference
|
|
132
|
+
(tests/fixtures/form_reference.json): the name, the original libid,
|
|
133
|
+
the null twiddled libid, the name again, and the extended record
|
|
134
|
+
with the type library's GUID and cookie 1. Their extended libid
|
|
135
|
+
names the .exd cache the editor keeps in the saving user's Temp
|
|
136
|
+
folder, under a GUID of that cache's own; here it repeats the
|
|
137
|
+
original libid, which the editor compiles against and Excel keeps
|
|
138
|
+
when it saves the file again, so no user's folder is written.
|
|
139
|
+
"""
|
|
140
|
+
encoding = encoding_for_codepage(code_page)
|
|
141
|
+
name = record(0x16, "MSForms".encode(encoding)) + record(0x3E, "MSForms".encode("utf-16-le"))
|
|
142
|
+
original, twiddled = MSFORMS_LIBID.encode(encoding), _NULL_LIBID.encode(encoding)
|
|
143
|
+
extended = (struct.pack("<I", len(original)) + original + bytes(6) + UUID(MSFORMS_GUID).bytes_le
|
|
144
|
+
+ struct.pack("<I", 1))
|
|
145
|
+
return (name + record(0x33, original) + record(0x2F, struct.pack("<I", len(twiddled)) + twiddled + bytes(6))
|
|
146
|
+
+ name + record(0x30, extended))
|
|
147
|
+
|
|
148
|
+
|
|
117
149
|
class ReferenceManager:
|
|
118
150
|
"""One public reference surface; subclasses supply only storage hooks."""
|
|
119
151
|
|
|
@@ -190,7 +222,7 @@ class ReferenceManager:
|
|
|
190
222
|
if span.reference.name.lower() == wanted or (guid and span.reference.guid.lower() == guid)]
|
|
191
223
|
if not cuts:
|
|
192
224
|
return False
|
|
193
|
-
if any(
|
|
225
|
+
if any(is_msforms(s.reference) for s in cuts):
|
|
194
226
|
forms = self._reference_forms()
|
|
195
227
|
if forms:
|
|
196
228
|
raise self._reference_error(f"Microsoft Forms is required by UserForms: {', '.join(forms)}")
|
|
@@ -203,6 +235,18 @@ class ReferenceManager:
|
|
|
203
235
|
self._write_reference_data(b"".join(parts))
|
|
204
236
|
return True
|
|
205
237
|
|
|
238
|
+
def _ensure_forms_reference(self) -> None:
|
|
239
|
+
"""Declare Microsoft Forms as the editor does with a project's first UserForm, unless it is declared.
|
|
240
|
+
|
|
241
|
+
remove_reference refuses to take the library out while a form is
|
|
242
|
+
there; this is the other half of that rule.
|
|
243
|
+
"""
|
|
244
|
+
raw, code_page = self._reference_data()
|
|
245
|
+
if any(is_msforms(span.reference) for span in reference_spans(raw)):
|
|
246
|
+
return
|
|
247
|
+
at = module_offset(raw)
|
|
248
|
+
self._write_reference_data(raw[:at] + msforms_block(code_page) + raw[at:])
|
|
249
|
+
|
|
206
250
|
def drop_reference(self, name: str) -> None:
|
|
207
251
|
"""Compatibility spelling: remove, raising when the reference is absent."""
|
|
208
252
|
if not self.remove_reference(name):
|