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.
Files changed (230) hide show
  1. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/PKG-INFO +4 -2
  2. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/README.md +3 -1
  3. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/pyproject.toml +1 -1
  4. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/__init__.py +1 -1
  5. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_host.py +5 -1
  6. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_references.py +45 -1
  7. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/__init__.py +485 -493
  8. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_excel_addin.xlam +0 -0
  9. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_workbook.xlsb +0 -0
  10. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_workbook.xlsm +0 -0
  11. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/.gitignore +0 -0
  12. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/LICENSE.md +0 -0
  13. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/architecture.md +0 -0
  14. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/excel_checklist.csv +0 -0
  15. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/host_completeness.md +0 -0
  16. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/ms-ovba-implementation-guide_v2.md +0 -0
  17. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/power_query.md +0 -0
  18. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_complex/README.md +0 -0
  19. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_designs/README.md +0 -0
  20. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_macros/README.md +0 -0
  21. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/access_write/README.md +0 -0
  22. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/research/pcode/README.md +0 -0
  23. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/roadmap.md +0 -0
  24. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/docs/vba_runtime.md +0 -0
  25. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/__main__.py +0 -0
  26. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_a1.py +0 -0
  27. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_deflate.py +0 -0
  28. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_new_project.py +0 -0
  29. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_oforms_pages.py +0 -0
  30. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_oforms_records.py +0 -0
  31. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_package_signature.py +0 -0
  32. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_ppt_container.py +0 -0
  33. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_database.accdb +0 -0
  34. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_database_module.accdb +0 -0
  35. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_document.docm +0 -0
  36. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_presentation.pptm +0 -0
  37. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/blank_workbook.xlsx +0 -0
  38. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/engine_skeleton.accdb +0 -0
  39. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/blank_files/engine_skeleton.mdb +0 -0
  40. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.blob +0 -0
  41. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.lvprop +0 -0
  42. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.propdata +0 -0
  43. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.prototypes +0 -0
  44. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/form.typeinfo +0 -0
  45. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.blob +0 -0
  46. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.lvprop +0 -0
  47. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.propdata +0 -0
  48. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.prototypes +0 -0
  49. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_templates/designs/report.typeinfo +0 -0
  50. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/_xml.py +0 -0
  51. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/__init__.py +0 -0
  52. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_alloc.py +0 -0
  53. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_btree.py +0 -0
  54. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_collation.py +0 -0
  55. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_collation_general_legacy.py +0 -0
  56. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_compact.py +0 -0
  57. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_complex.py +0 -0
  58. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_datapage.py +0 -0
  59. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_ddl.py +0 -0
  60. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_designs.py +0 -0
  61. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_facade.py +0 -0
  62. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_format.py +0 -0
  63. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_index.py +0 -0
  64. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_lval.py +0 -0
  65. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_macros.py +0 -0
  66. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_pages.py +0 -0
  67. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_props.py +0 -0
  68. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_queries.py +0 -0
  69. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_rows.py +0 -0
  70. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_schema.py +0 -0
  71. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_sql.py +0 -0
  72. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_storage.py +0 -0
  73. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_tdef.py +0 -0
  74. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_validate.py +0 -0
  75. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/_vba.py +0 -0
  76. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access/database.py +0 -0
  77. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/access_read.py +0 -0
  78. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/__init__.py +0 -0
  79. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/__init__.py +0 -0
  80. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_arrays.py +0 -0
  81. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_autofill.py +0 -0
  82. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_autofilter.py +0 -0
  83. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_bridge.py +0 -0
  84. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_calc.py +0 -0
  85. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_clipboard.py +0 -0
  86. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_control_refs.py +0 -0
  87. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_controls.py +0 -0
  88. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_copy_names.py +0 -0
  89. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_dimensions.py +0 -0
  90. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_duplicates.py +0 -0
  91. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_dynamic_file.py +0 -0
  92. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_editing.py +0 -0
  93. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_engine_book.py +0 -0
  94. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_evaluate.py +0 -0
  95. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_events.py +0 -0
  96. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_find.py +0 -0
  97. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_font_rows.py +0 -0
  98. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_formats.py +0 -0
  99. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_formula_format.py +0 -0
  100. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_io.py +0 -0
  101. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_merges.py +0 -0
  102. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_model.py +0 -0
  103. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_named_api.py +0 -0
  104. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_names.py +0 -0
  105. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_notes.py +0 -0
  106. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_notes_file.py +0 -0
  107. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_number_format.py +0 -0
  108. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_protection.py +0 -0
  109. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_radios.py +0 -0
  110. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_refresh.py +0 -0
  111. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_region.py +0 -0
  112. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_row_formats.py +0 -0
  113. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_shape_api.py +0 -0
  114. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_shapes.py +0 -0
  115. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_shared.py +0 -0
  116. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_sheet_copy.py +0 -0
  117. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_sheet_move.py +0 -0
  118. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_sort.py +0 -0
  119. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_special_cells.py +0 -0
  120. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_spills.py +0 -0
  121. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_styles.py +0 -0
  122. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_table_edits.py +0 -0
  123. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_tables.py +0 -0
  124. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_typing.py +0 -0
  125. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_validation.py +0 -0
  126. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_visible.py +0 -0
  127. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_windows.py +0 -0
  128. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/excel/_worksheet_functions.py +0 -0
  129. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/__init__.py +0 -0
  130. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/_bridge.py +0 -0
  131. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/_io.py +0 -0
  132. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/powerpoint/_model.py +0 -0
  133. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/__init__.py +0 -0
  134. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/_bridge.py +0 -0
  135. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/_io.py +0 -0
  136. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/apps/word/_model.py +0 -0
  137. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/cfb.py +0 -0
  138. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/excel.py +0 -0
  139. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/exceptions.py +0 -0
  140. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/forms.py +0 -0
  141. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/__init__.py +0 -0
  142. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_arity.py +0 -0
  143. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/__init__.py +0 -0
  144. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/catalog.py +0 -0
  145. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/cells.py +0 -0
  146. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/collate.py +0 -0
  147. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/dates.py +0 -0
  148. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/evaluator.py +0 -0
  149. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/__init__.py +0 -0
  150. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/aggregate.py +0 -0
  151. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/arithmetic.py +0 -0
  152. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/arrays.py +0 -0
  153. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/common.py +0 -0
  154. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/conditional.py +0 -0
  155. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/database.py +0 -0
  156. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/dates.py +0 -0
  157. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/distributions.py +0 -0
  158. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/engineering.py +0 -0
  159. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/financial.py +0 -0
  160. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/information.py +0 -0
  161. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/lambdas.py +0 -0
  162. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/logical.py +0 -0
  163. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/lookup.py +0 -0
  164. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/matrix.py +0 -0
  165. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/statistics.py +0 -0
  166. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/subtotal.py +0 -0
  167. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/functions/text.py +0 -0
  168. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/host.py +0 -0
  169. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/lexer.py +0 -0
  170. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/nodes.py +0 -0
  171. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/numbers.py +0 -0
  172. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/parser.py +0 -0
  173. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/precise.py +0 -0
  174. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/reference.py +0 -0
  175. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/registry.py +0 -0
  176. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/special.py +0 -0
  177. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_calc/values.py +0 -0
  178. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_deep.py +0 -0
  179. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_display.py +0 -0
  180. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_formula2.py +0 -0
  181. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_inventory.py +0 -0
  182. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_parse.py +0 -0
  183. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_prefixes.py +0 -0
  184. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_r1c1.py +0 -0
  185. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_spell.py +0 -0
  186. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_structured.py +0 -0
  187. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/formula/_values.py +0 -0
  188. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/__init__.py +0 -0
  189. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_ast.py +0 -0
  190. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_constants_data.py +0 -0
  191. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_intrinsics.py +0 -0
  192. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_inventory.py +0 -0
  193. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_inventory_data.py +0 -0
  194. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_lex.py +0 -0
  195. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_objects.py +0 -0
  196. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_parse.py +0 -0
  197. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_preprocess.py +0 -0
  198. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_runtime.py +0 -0
  199. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_scripting.py +0 -0
  200. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/interpreter/_values.py +0 -0
  201. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/__init__.py +0 -0
  202. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_eval.py +0 -0
  203. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_inventory.py +0 -0
  204. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_inventory_data.py +0 -0
  205. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_library.py +0 -0
  206. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_parse.py +0 -0
  207. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/mlang/_values.py +0 -0
  208. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerpoint.py +0 -0
  209. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/__init__.py +0 -0
  210. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_binary.py +0 -0
  211. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_files.py +0 -0
  212. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_mashup.py +0 -0
  213. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_metadata.py +0 -0
  214. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_opc.py +0 -0
  215. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_package.py +0 -0
  216. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_refresh.py +0 -0
  217. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_section.py +0 -0
  218. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/_sheets.py +0 -0
  219. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/powerquery/workbook.py +0 -0
  220. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/__init__.py +0 -0
  221. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_docx.py +0 -0
  222. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_docx_text.py +0 -0
  223. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_drawingml.py +0 -0
  224. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_pptx.py +0 -0
  225. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_values.py +0 -0
  226. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/shapes/_xlsx.py +0 -0
  227. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/vba.py +0 -0
  228. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/vba_pcode.py +0 -0
  229. {pyopenvba-6.1.0 → pyopenvba-6.1.2}/src/pyopenvba/word.py +0 -0
  230. {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.0
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:
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "pyOpenVBA"
7
- version = "6.1.0"
7
+ version = "6.1.2"
8
8
  description = "Read and write VBA macros and Excel Power Query in pure Python, no dependencies."
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -293,4 +293,4 @@ def push_power_query(
293
293
  """
294
294
  return _push_queries(src_dir, workbook, out=out, encoding=encoding, remove_missing=remove_missing)
295
295
 
296
- __version__ = "6.1.0"
296
+ __version__ = "6.1.2"
@@ -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(s.reference.name.lower() == "msforms" or s.reference.guid.upper() == MSFORMS_GUID for s in cuts):
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):