openpyxl-enhanced 3.2.0b3__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 (215) hide show
  1. openpyxl_enhanced-3.2.0b3/AUTHORS.rst +98 -0
  2. openpyxl_enhanced-3.2.0b3/LICENCE.rst +23 -0
  3. openpyxl_enhanced-3.2.0b3/MANIFEST.in +8 -0
  4. openpyxl_enhanced-3.2.0b3/PKG-INFO +142 -0
  5. openpyxl_enhanced-3.2.0b3/PUBLISHING.md +143 -0
  6. openpyxl_enhanced-3.2.0b3/README.md +248 -0
  7. openpyxl_enhanced-3.2.0b3/README.pypi.md +95 -0
  8. openpyxl_enhanced-3.2.0b3/README.ru.md +248 -0
  9. openpyxl_enhanced-3.2.0b3/openpyxl/__init__.py +19 -0
  10. openpyxl_enhanced-3.2.0b3/openpyxl/_constants.py +12 -0
  11. openpyxl_enhanced-3.2.0b3/openpyxl/cell/__init__.py +5 -0
  12. openpyxl_enhanced-3.2.0b3/openpyxl/cell/_writer.py +121 -0
  13. openpyxl_enhanced-3.2.0b3/openpyxl/cell/cell.py +417 -0
  14. openpyxl_enhanced-3.2.0b3/openpyxl/cell/coordinate.py +32 -0
  15. openpyxl_enhanced-3.2.0b3/openpyxl/cell/read_only.py +98 -0
  16. openpyxl_enhanced-3.2.0b3/openpyxl/cell/rich_text.py +188 -0
  17. openpyxl_enhanced-3.2.0b3/openpyxl/cell/text.py +168 -0
  18. openpyxl_enhanced-3.2.0b3/openpyxl/chart/_3d.py +85 -0
  19. openpyxl_enhanced-3.2.0b3/openpyxl/chart/__init__.py +20 -0
  20. openpyxl_enhanced-3.2.0b3/openpyxl/chart/_chart.py +194 -0
  21. openpyxl_enhanced-3.2.0b3/openpyxl/chart/area_chart.py +81 -0
  22. openpyxl_enhanced-3.2.0b3/openpyxl/chart/axis.py +389 -0
  23. openpyxl_enhanced-3.2.0b3/openpyxl/chart/bar_chart.py +144 -0
  24. openpyxl_enhanced-3.2.0b3/openpyxl/chart/bubble_chart.py +61 -0
  25. openpyxl_enhanced-3.2.0b3/openpyxl/chart/chartspace.py +194 -0
  26. openpyxl_enhanced-3.2.0b3/openpyxl/chart/data_source.py +175 -0
  27. openpyxl_enhanced-3.2.0b3/openpyxl/chart/descriptors.py +34 -0
  28. openpyxl_enhanced-3.2.0b3/openpyxl/chart/error_bar.py +69 -0
  29. openpyxl_enhanced-3.2.0b3/openpyxl/chart/label.py +134 -0
  30. openpyxl_enhanced-3.2.0b3/openpyxl/chart/layout.py +68 -0
  31. openpyxl_enhanced-3.2.0b3/openpyxl/chart/legend.py +58 -0
  32. openpyxl_enhanced-3.2.0b3/openpyxl/chart/line_chart.py +129 -0
  33. openpyxl_enhanced-3.2.0b3/openpyxl/chart/marker.py +89 -0
  34. openpyxl_enhanced-3.2.0b3/openpyxl/chart/picture.py +38 -0
  35. openpyxl_enhanced-3.2.0b3/openpyxl/chart/pie_chart.py +136 -0
  36. openpyxl_enhanced-3.2.0b3/openpyxl/chart/pivot.py +52 -0
  37. openpyxl_enhanced-3.2.0b3/openpyxl/chart/plotarea.py +151 -0
  38. openpyxl_enhanced-3.2.0b3/openpyxl/chart/print_settings.py +46 -0
  39. openpyxl_enhanced-3.2.0b3/openpyxl/chart/radar_chart.py +44 -0
  40. openpyxl_enhanced-3.2.0b3/openpyxl/chart/reader.py +28 -0
  41. openpyxl_enhanced-3.2.0b3/openpyxl/chart/reference.py +101 -0
  42. openpyxl_enhanced-3.2.0b3/openpyxl/chart/scatter_chart.py +53 -0
  43. openpyxl_enhanced-3.2.0b3/openpyxl/chart/series.py +239 -0
  44. openpyxl_enhanced-3.2.0b3/openpyxl/chart/series_factory.py +47 -0
  45. openpyxl_enhanced-3.2.0b3/openpyxl/chart/shapes.py +103 -0
  46. openpyxl_enhanced-3.2.0b3/openpyxl/chart/stock_chart.py +46 -0
  47. openpyxl_enhanced-3.2.0b3/openpyxl/chart/surface_chart.py +85 -0
  48. openpyxl_enhanced-3.2.0b3/openpyxl/chart/text.py +57 -0
  49. openpyxl_enhanced-3.2.0b3/openpyxl/chart/title.py +70 -0
  50. openpyxl_enhanced-3.2.0b3/openpyxl/chart/trendline.py +110 -0
  51. openpyxl_enhanced-3.2.0b3/openpyxl/chart/updown_bars.py +20 -0
  52. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/__init__.py +2 -0
  53. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/chartsheet.py +109 -0
  54. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/custom.py +50 -0
  55. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/properties.py +19 -0
  56. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/protection.py +44 -0
  57. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/publish.py +63 -0
  58. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/relation.py +95 -0
  59. openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/views.py +42 -0
  60. openpyxl_enhanced-3.2.0b3/openpyxl/comments/__init__.py +2 -0
  61. openpyxl_enhanced-3.2.0b3/openpyxl/comments/author.py +13 -0
  62. openpyxl_enhanced-3.2.0b3/openpyxl/comments/comment_sheet.py +188 -0
  63. openpyxl_enhanced-3.2.0b3/openpyxl/comments/comments.py +56 -0
  64. openpyxl_enhanced-3.2.0b3/openpyxl/comments/shape_writer.py +111 -0
  65. openpyxl_enhanced-3.2.0b3/openpyxl/compat/__init__.py +49 -0
  66. openpyxl_enhanced-3.2.0b3/openpyxl/compat/abc.py +9 -0
  67. openpyxl_enhanced-3.2.0b3/openpyxl/compat/numbers.py +43 -0
  68. openpyxl_enhanced-3.2.0b3/openpyxl/compat/product.py +16 -0
  69. openpyxl_enhanced-3.2.0b3/openpyxl/compat/singleton.py +38 -0
  70. openpyxl_enhanced-3.2.0b3/openpyxl/compat/strings.py +24 -0
  71. openpyxl_enhanced-3.2.0b3/openpyxl/connection/__init__.py +1 -0
  72. openpyxl_enhanced-3.2.0b3/openpyxl/connection/connections.py +449 -0
  73. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/__init__.py +55 -0
  74. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/base.py +249 -0
  75. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/container.py +34 -0
  76. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/excel.py +101 -0
  77. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/namespace.py +11 -0
  78. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/nested.py +116 -0
  79. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/sequence.py +127 -0
  80. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/serialisable.py +208 -0
  81. openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/slots.py +18 -0
  82. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/__init__.py +2 -0
  83. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/anchor.py +166 -0
  84. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/colors.py +681 -0
  85. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/connector.py +121 -0
  86. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/drawing.py +78 -0
  87. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/effect.py +364 -0
  88. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/fill.py +456 -0
  89. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/geometry.py +764 -0
  90. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/graphic.py +140 -0
  91. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/image.py +95 -0
  92. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/legacy.py +24 -0
  93. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/line.py +142 -0
  94. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/picture.py +126 -0
  95. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/properties.py +158 -0
  96. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/relation.py +13 -0
  97. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/spreadsheet_drawing.py +269 -0
  98. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/text.py +767 -0
  99. openpyxl_enhanced-3.2.0b3/openpyxl/drawing/xdr.py +30 -0
  100. openpyxl_enhanced-3.2.0b3/openpyxl/formatting/__init__.py +2 -0
  101. openpyxl_enhanced-3.2.0b3/openpyxl/formatting/formatting.py +95 -0
  102. openpyxl_enhanced-3.2.0b3/openpyxl/formatting/rule.py +383 -0
  103. openpyxl_enhanced-3.2.0b3/openpyxl/formula/__init__.py +2 -0
  104. openpyxl_enhanced-3.2.0b3/openpyxl/formula/structural.py +178 -0
  105. openpyxl_enhanced-3.2.0b3/openpyxl/formula/tokenizer.py +444 -0
  106. openpyxl_enhanced-3.2.0b3/openpyxl/formula/translate.py +179 -0
  107. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/__init__.py +3 -0
  108. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/core.py +120 -0
  109. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/custom.py +236 -0
  110. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/extended.py +131 -0
  111. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/interface.py +49 -0
  112. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/manifest.py +196 -0
  113. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/relationship.py +148 -0
  114. openpyxl_enhanced-3.2.0b3/openpyxl/packaging/workbook.py +189 -0
  115. openpyxl_enhanced-3.2.0b3/openpyxl/pivot/__init__.py +1 -0
  116. openpyxl_enhanced-3.2.0b3/openpyxl/pivot/cache.py +920 -0
  117. openpyxl_enhanced-3.2.0b3/openpyxl/pivot/fields.py +280 -0
  118. openpyxl_enhanced-3.2.0b3/openpyxl/pivot/record.py +81 -0
  119. openpyxl_enhanced-3.2.0b3/openpyxl/pivot/table.py +1297 -0
  120. openpyxl_enhanced-3.2.0b3/openpyxl/reader/__init__.py +1 -0
  121. openpyxl_enhanced-3.2.0b3/openpyxl/reader/drawings.py +73 -0
  122. openpyxl_enhanced-3.2.0b3/openpyxl/reader/excel.py +486 -0
  123. openpyxl_enhanced-3.2.0b3/openpyxl/reader/strings.py +38 -0
  124. openpyxl_enhanced-3.2.0b3/openpyxl/reader/workbook.py +121 -0
  125. openpyxl_enhanced-3.2.0b3/openpyxl/styles/__init__.py +15 -0
  126. openpyxl_enhanced-3.2.0b3/openpyxl/styles/alignment.py +79 -0
  127. openpyxl_enhanced-3.2.0b3/openpyxl/styles/borders.py +133 -0
  128. openpyxl_enhanced-3.2.0b3/openpyxl/styles/builtins.py +1362 -0
  129. openpyxl_enhanced-3.2.0b3/openpyxl/styles/cell_style.py +203 -0
  130. openpyxl_enhanced-3.2.0b3/openpyxl/styles/colors.py +213 -0
  131. openpyxl_enhanced-3.2.0b3/openpyxl/styles/differential.py +81 -0
  132. openpyxl_enhanced-3.2.0b3/openpyxl/styles/fills.py +228 -0
  133. openpyxl_enhanced-3.2.0b3/openpyxl/styles/fonts.py +146 -0
  134. openpyxl_enhanced-3.2.0b3/openpyxl/styles/named_styles.py +255 -0
  135. openpyxl_enhanced-3.2.0b3/openpyxl/styles/numbers.py +181 -0
  136. openpyxl_enhanced-3.2.0b3/openpyxl/styles/protection.py +17 -0
  137. openpyxl_enhanced-3.2.0b3/openpyxl/styles/proxy.py +56 -0
  138. openpyxl_enhanced-3.2.0b3/openpyxl/styles/styleable.py +217 -0
  139. openpyxl_enhanced-3.2.0b3/openpyxl/styles/stylesheet.py +263 -0
  140. openpyxl_enhanced-3.2.0b3/openpyxl/styles/table.py +100 -0
  141. openpyxl_enhanced-3.2.0b3/openpyxl/utils/__init__.py +12 -0
  142. openpyxl_enhanced-3.2.0b3/openpyxl/utils/bound_dictionary.py +24 -0
  143. openpyxl_enhanced-3.2.0b3/openpyxl/utils/cell.py +229 -0
  144. openpyxl_enhanced-3.2.0b3/openpyxl/utils/dataframe.py +73 -0
  145. openpyxl_enhanced-3.2.0b3/openpyxl/utils/datetime.py +147 -0
  146. openpyxl_enhanced-3.2.0b3/openpyxl/utils/escape.py +37 -0
  147. openpyxl_enhanced-3.2.0b3/openpyxl/utils/exceptions.py +56 -0
  148. openpyxl_enhanced-3.2.0b3/openpyxl/utils/formulas.py +380 -0
  149. openpyxl_enhanced-3.2.0b3/openpyxl/utils/indexed_list.py +49 -0
  150. openpyxl_enhanced-3.2.0b3/openpyxl/utils/inference.py +66 -0
  151. openpyxl_enhanced-3.2.0b3/openpyxl/utils/protection.py +22 -0
  152. openpyxl_enhanced-3.2.0b3/openpyxl/utils/units.py +116 -0
  153. openpyxl_enhanced-3.2.0b3/openpyxl/volatile/__init__.py +1 -0
  154. openpyxl_enhanced-3.2.0b3/openpyxl/volatile/volatile.py +79 -0
  155. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/__init__.py +2 -0
  156. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/_writer.py +185 -0
  157. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/child.py +147 -0
  158. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/defined_name.py +185 -0
  159. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/external_link/__init__.py +2 -0
  160. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/external_link/external.py +135 -0
  161. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/external_reference.py +11 -0
  162. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/function_group.py +24 -0
  163. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/properties.py +143 -0
  164. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/protection.py +180 -0
  165. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/smart_tags.py +37 -0
  166. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/views.py +142 -0
  167. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/web.py +98 -0
  168. openpyxl_enhanced-3.2.0b3/openpyxl/workbook/workbook.py +428 -0
  169. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/__init__.py +1 -0
  170. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_read_only.py +173 -0
  171. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_reader.py +482 -0
  172. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_structural_edit.py +428 -0
  173. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_write_only.py +138 -0
  174. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_writer.py +384 -0
  175. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/cell_range.py +497 -0
  176. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/cell_watch.py +23 -0
  177. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/controls.py +323 -0
  178. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/copier.py +57 -0
  179. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/custom.py +23 -0
  180. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/datavalidation.py +211 -0
  181. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/dimensions.py +315 -0
  182. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/drawing.py +11 -0
  183. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/errors.py +74 -0
  184. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/filters.py +558 -0
  185. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/formula.py +47 -0
  186. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/header_footer.py +260 -0
  187. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/hyperlink.py +40 -0
  188. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/merge.py +150 -0
  189. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/ole.py +126 -0
  190. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/page.py +167 -0
  191. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/pagebreak.py +75 -0
  192. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/picture.py +8 -0
  193. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/print_settings.py +165 -0
  194. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/properties.py +91 -0
  195. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/protection.py +148 -0
  196. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/related.py +13 -0
  197. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/scenario.py +80 -0
  198. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/smart_tag.py +57 -0
  199. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/table.py +360 -0
  200. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/views.py +145 -0
  201. openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/worksheet.py +982 -0
  202. openpyxl_enhanced-3.2.0b3/openpyxl/writer/__init__.py +1 -0
  203. openpyxl_enhanced-3.2.0b3/openpyxl/writer/excel.py +351 -0
  204. openpyxl_enhanced-3.2.0b3/openpyxl/writer/theme.py +310 -0
  205. openpyxl_enhanced-3.2.0b3/openpyxl/xml/__init__.py +44 -0
  206. openpyxl_enhanced-3.2.0b3/openpyxl/xml/constants.py +121 -0
  207. openpyxl_enhanced-3.2.0b3/openpyxl/xml/functions.py +80 -0
  208. openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/PKG-INFO +142 -0
  209. openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/SOURCES.txt +214 -0
  210. openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/dependency_links.txt +1 -0
  211. openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/requires.txt +1 -0
  212. openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/top_level.txt +1 -0
  213. openpyxl_enhanced-3.2.0b3/pyproject.toml +3 -0
  214. openpyxl_enhanced-3.2.0b3/setup.cfg +7 -0
  215. openpyxl_enhanced-3.2.0b3/setup.py +105 -0
@@ -0,0 +1,98 @@
1
+ This project was started by Eric Gazoni. In 2013 Charlie Clark became
2
+ co-maintainer of the project.
3
+
4
+ It was initially *heavily* inspired by the PHPExcel library:
5
+ http://www.phpexcel.net/
6
+
7
+ Thanks to all those who participate in the project (in alphabetical order):
8
+
9
+ * aceMueller
10
+ * Adam Lofts
11
+ * Adam Morris
12
+ * Alessandro Cucci
13
+ * Alex Gronholm
14
+ * Alexander Ley
15
+ * Alexandre Fayolle
16
+ * Amin Mirzaee
17
+ * Anders Chrigstrom
18
+ * Anthony Hayward
19
+ * Bernt R. Brenna
20
+ * Brent Hoover
21
+ * Brice Gelineau
22
+ * ccoacley
23
+ * Chi Ho Kwok
24
+ * Cory Kramer
25
+ * Day Barr
26
+ * Detlef Lannert
27
+ * Dieter Vandenbussche
28
+ * Dmitriy Chernyshov
29
+ * Dominik Geldmacher
30
+ * Don Freeman
31
+ * Eirikur Fannar Torfason
32
+ * Elias Rabel
33
+ * Eric Chlebek
34
+ * Eric Gazoni
35
+ * Eric Hurkman
36
+ * Etienne Desautels
37
+ * Felipe Ochoa
38
+ * Felix Siebeneicker
39
+ * Fumito Hamamura
40
+ * Gabi Nagy
41
+ * Gar Thompson
42
+ * Gerald Van Huffelen
43
+ * Greg Lehmann
44
+ * Heikki Junes
45
+ * Israel Barth Rubio
46
+ * Jacob Middag
47
+ * James Smagala
48
+ * JarekPS
49
+ * Jean Pierre Huart
50
+ * Jeff Holman
51
+ * John Woltman IV
52
+ * Jonathan Peirce
53
+ * Joseph Tate
54
+ * Josh Haywood
55
+ * Jun Omae
56
+ * Kay Webber
57
+ * Khchine Hamza
58
+ * Klaus Bremer
59
+ * Koert van der Veer
60
+ * Laurent Laporte
61
+ * Laurent Vasseur
62
+ * Liam Sanders
63
+ * Maarten De Paepe
64
+ * Magnus Schieder
65
+ * Mark Gemmill
66
+ * Marko Loparic
67
+ * Masato Yoshida
68
+ * Max Bolingbroke
69
+ * Nicholas Laver
70
+ * Nis Martensen
71
+ * Paul Joyce
72
+ * Paul Van Der Linden
73
+ * Philip Roche
74
+ * Primoz Godec
75
+ * ramn_se
76
+ * René Neumann
77
+ * Rick Rankin
78
+ * Samuel Loretan
79
+ * Sergey Pikhovkin
80
+ * Shekhar Gyanwali
81
+ * Shibukawa Yoshiki
82
+ * Stefan Behnel
83
+ * Stephane Bard
84
+ * Stephen Rauch
85
+ * Sven Burk
86
+ * Ted Pollari
87
+ * Thomas Nygards
88
+ * Victor Korobkovsky
89
+ * Waldemar Osuch
90
+ * Wojciech Rola
91
+ * Wolfgane Scherer
92
+ * Yaroslav Halchenko
93
+ * Yash Jhunjhunwala
94
+ * Yingjie Lan
95
+ * Leetao
96
+
97
+ Project logo designed by Eric Gazoni, font by claudeserieux
98
+ (http://www.dafont.com/profile.php?user=337503)
@@ -0,0 +1,23 @@
1
+ This software is under the MIT Licence
2
+ ======================================
3
+
4
+ Copyright (c) 2010 openpyxl
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a
7
+ copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included
15
+ in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,8 @@
1
+ prune openpyxl/sample
2
+ prune openpyxl/benchmarks
3
+ prune openpyxl/develop
4
+ prune scratchpad
5
+ prune doc
6
+
7
+ include *.rst
8
+ include README.md README.ru.md README.pypi.md PUBLISHING.md
@@ -0,0 +1,142 @@
1
+ Metadata-Version: 2.4
2
+ Name: openpyxl-enhanced
3
+ Version: 3.2.0b3
4
+ Summary: An openpyxl fork for Excel xlsx/xlsm files with formula-aware row/column edits and merged-cell formatting fixes
5
+ Home-page: https://github.com/EugeneRymarev/openpyxl-enhanced
6
+ Author: See AUTHORS
7
+ Maintainer: EugeneRymarev
8
+ License: MIT
9
+ Project-URL: Documentation, https://github.com/EugeneRymarev/openpyxl-enhanced#readme
10
+ Project-URL: Source, https://github.com/EugeneRymarev/openpyxl-enhanced
11
+ Project-URL: Tracker, https://github.com/EugeneRymarev/openpyxl-enhanced/issues
12
+ Project-URL: Upstream, https://foss.heptapod.net/openpyxl/openpyxl
13
+ Keywords: openpyxl,excel,xlsx,xlsm,spreadsheet,formulas,merged cells
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Classifier: Operating System :: MacOS :: MacOS X
19
+ Classifier: Operating System :: Microsoft :: Windows
20
+ Classifier: Operating System :: POSIX
21
+ Classifier: License :: OSI Approved :: MIT License
22
+ Classifier: Programming Language :: Python
23
+ Classifier: Programming Language :: Python :: 3.8
24
+ Classifier: Programming Language :: Python :: 3.9
25
+ Classifier: Programming Language :: Python :: 3.10
26
+ Classifier: Programming Language :: Python :: 3.11
27
+ Classifier: Programming Language :: Python :: 3.12
28
+ Classifier: Programming Language :: Python :: 3.13
29
+ Classifier: Programming Language :: Python :: 3.14
30
+ Requires-Python: >=3.8
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENCE.rst
33
+ Requires-Dist: et_xmlfile
34
+ Dynamic: author
35
+ Dynamic: classifier
36
+ Dynamic: description
37
+ Dynamic: description-content-type
38
+ Dynamic: home-page
39
+ Dynamic: keywords
40
+ Dynamic: license
41
+ Dynamic: license-file
42
+ Dynamic: maintainer
43
+ Dynamic: project-url
44
+ Dynamic: requires-dist
45
+ Dynamic: requires-python
46
+ Dynamic: summary
47
+
48
+ # openpyxl-enhanced
49
+
50
+ **openpyxl-enhanced** is an independent fork of
51
+ [openpyxl](https://foss.heptapod.net/openpyxl/openpyxl), a Python library for
52
+ reading and writing Excel `.xlsx`, `.xlsm`, `.xltx` and `.xltm` files.
53
+ It is based on the upstream 3.2 development line. This release is **3.2.0b3**
54
+ (beta), for Python **3.8 or newer**.
55
+
56
+ The distribution is named **openpyxl-enhanced**; the Python import remains **openpyxl**.
57
+ This fork is maintained separately from the original openpyxl project.
58
+
59
+ Previously published as `openpyxl2`. The distribution and GitHub repository
60
+ are now named `openpyxl-enhanced`; existing `openpyxl` imports stay the same.
61
+
62
+ ## Installation
63
+
64
+ Use a fresh virtual environment:
65
+
66
+ ```sh
67
+ python -m venv .venv
68
+ # Windows: .venv\Scripts\activate
69
+ # Linux/macOS: source .venv/bin/activate
70
+ python -m pip install openpyxl-enhanced==3.2.0b3
71
+ ```
72
+
73
+ Do not install `openpyxl` and `openpyxl-enhanced` together: they provide the same
74
+ `openpyxl` module and can overwrite each other's files. `pip install openpyxl`
75
+ installs the original project. Dependencies that explicitly require the
76
+ `openpyxl` distribution are **not** satisfied by `openpyxl-enhanced`; check your
77
+ application's dependencies before switching.
78
+
79
+ If upgrading from the previous `openpyxl2` distribution, remove it before
80
+ installing this package, or create a fresh environment. Both distributions
81
+ provide the same `openpyxl` module:
82
+
83
+ ```sh
84
+ python -m pip uninstall openpyxl2
85
+ python -m pip install openpyxl-enhanced==3.2.0b3
86
+ ```
87
+
88
+ ## What this fork changes
89
+
90
+ - Inserting and deleting rows or columns updates supported formula references,
91
+ merged ranges, defined names, print areas and row/column dimensions.
92
+ - Partially deleted merged ranges retain the surviving anchor's value and style.
93
+ - Styles assigned after merging propagate through the merged range, with borders
94
+ applied to its perimeter. Stored merged-cell styles survive save/load cycles.
95
+ - Additional fixes cover named styles, XML backends and workbook resource handling.
96
+
97
+ ```python
98
+ from openpyxl import Workbook, load_workbook
99
+
100
+ workbook = Workbook()
101
+ sheet = workbook.active
102
+ sheet.append(["Item", "Units"])
103
+ sheet.append(["Pens", 10])
104
+ sheet.append(["Folders", 20])
105
+ sheet["B4"] = "=SUM(B2:B3)"
106
+ sheet.insert_rows(2)
107
+ assert sheet["B5"].value == "=SUM(B3:B4)"
108
+ workbook.save("sales.xlsx")
109
+
110
+ restored = load_workbook("sales.xlsx")
111
+ assert restored.active["B5"].value == "=SUM(B3:B4)"
112
+ restored.close()
113
+ ```
114
+
115
+ ## Scope and compatibility
116
+
117
+ Structural edits support direct A1 formula references, including absolute and
118
+ mixed references. They do not update every Excel feature: tables, charts, pivot
119
+ tables, validation, conditional formatting and external workbook references
120
+ require separate handling. Unsupported formula constructs can raise
121
+ `FormulaTranslationError` before an edit is applied. The library rewrites
122
+ formulas but does not calculate their results.
123
+
124
+ The fork removes the `openpyxl.open` alias; use `openpyxl.load_workbook`.
125
+ Named-style equality compares names. See the
126
+ [full feature list and limitations](https://github.com/EugeneRymarev/openpyxl-enhanced#readme)
127
+ and the [Russian README](https://github.com/EugeneRymarev/openpyxl-enhanced/blob/master/README.ru.md)
128
+ for details and examples.
129
+
130
+ `et_xmlfile` is a required dependency and is installed automatically. Optional
131
+ packages include `lxml` for XML processing, `Pillow` for images and `defusedxml`
132
+ for XML protection when handling untrusted files.
133
+
134
+ ## Project and license
135
+
136
+ - [Source and examples](https://github.com/EugeneRymarev/openpyxl-enhanced)
137
+ - [Report a fork issue](https://github.com/EugeneRymarev/openpyxl-enhanced/issues)
138
+ - [Upstream API documentation](https://openpyxl.pages.heptapod.net/openpyxl/)
139
+ - [Original authors and contributors](https://github.com/EugeneRymarev/openpyxl-enhanced/blob/master/AUTHORS.rst)
140
+
141
+ Distributed under the MIT license. The original openpyxl copyright notice and
142
+ license are preserved in `LICENCE.rst` in the distribution.
@@ -0,0 +1,143 @@
1
+ # Публикация openpyxl-enhanced в PyPI
2
+
3
+ Подготовлены следующие данные:
4
+
5
+ | Поле | Значение |
6
+ | --- | --- |
7
+ | Имя дистрибутива в PyPI | `openpyxl-enhanced` |
8
+ | Версия | `3.2.0b3` — бета с обновлёнными поисковыми метаданными |
9
+ | Импорт в Python | `import openpyxl` |
10
+ | Python | `>=3.8` |
11
+ | Лицензия | MIT, исходный текст в `LICENCE.rst` |
12
+ | Авторы | `See AUTHORS`, оригинальный список в `AUTHORS.rst` |
13
+ | Сопровождающий форка | `EugeneRymarev` — имя владельца GitHub-репозитория |
14
+ | Репозиторий | https://github.com/EugeneRymarev/openpyxl-enhanced |
15
+ | Трекер | https://github.com/EugeneRymarev/openpyxl-enhanced/issues |
16
+ | Описание для страницы PyPI | `README.pypi.md` |
17
+ | Обязательная зависимость | `et_xmlfile` |
18
+ | Форматы | универсальный wheel `py3-none-any` и sdist `.tar.gz` |
19
+
20
+ Публичный email сопровождающего не указан. Адреса авторов upstream не
21
+ используются как контакты поддержки форка. Владельцем проекта на PyPI станет
22
+ аккаунт, который выполнит первую разрешённую загрузку; поле `maintainer` не
23
+ выдаёт права доступа.
24
+
25
+ Проект опубликован в PyPI: https://pypi.org/project/openpyxl-enhanced/.
26
+ Дистрибутив переименован из `openpyxl2` в `openpyxl-enhanced`; версия
27
+ осталась `3.2.0b3`. Импорт `openpyxl` и поведение библиотеки сохранены.
28
+
29
+ ## 1. Собрать и проверить
30
+
31
+ Команды ниже рассчитаны на PowerShell из корня репозитория. Для сборки удобно
32
+ использовать Python 3.12 или новее, независимо от минимальной версии библиотеки.
33
+
34
+ ```powershell
35
+ py -3.12 -m venv .tox/pypi-build
36
+ $publishPython = '.\.tox\pypi-build\Scripts\python.exe'
37
+ & $publishPython -m pip install --upgrade pip build twine
38
+ & $publishPython -m build --outdir dist/pypi/openpyxl-enhanced/3.2.0b3
39
+ & $publishPython -m twine check --strict dist/pypi/openpyxl-enhanced/3.2.0b3/openpyxl_enhanced-3.2.0b3*
40
+ ```
41
+
42
+ Результат:
43
+
44
+ - `dist/pypi/openpyxl-enhanced/3.2.0b3/openpyxl_enhanced-3.2.0b3-py3-none-any.whl`
45
+ - `dist/pypi/openpyxl-enhanced/3.2.0b3/openpyxl_enhanced-3.2.0b3.tar.gz`
46
+
47
+ Проверка установленного wheel отдельно от исходников и необязательных зависимостей:
48
+
49
+ ```powershell
50
+ py -3.12 -m venv .tox/enhanced-smoke
51
+ $smokePython = '.\.tox\enhanced-smoke\Scripts\python.exe'
52
+ & $smokePython -m pip install dist/pypi/openpyxl-enhanced/3.2.0b3/openpyxl_enhanced-3.2.0b3-py3-none-any.whl
53
+ & $smokePython -m pip check
54
+ & $smokePython -I .github/scripts/check_wheel.py
55
+ ```
56
+
57
+ Если эти окружения уже использовались для других пакетов, создайте новые с
58
+ другими именами. Не устанавливайте оригинальный `openpyxl` в окружение форка:
59
+ файлы модулей пересекаются. Требования сторонних библиотек вида `openpyxl>=...`
60
+ не удовлетворяются пакетом `openpyxl-enhanced`, и pip может дополнительно поставить
61
+ оригинал. Учитывайте это при выборе зависимостей приложения.
62
+
63
+ Локальный `.pypirc` содержит настройки и токены PyPI/TestPyPI и исключён
64
+ из Git. Команды загрузки ниже читают его через `--config-file .pypirc`.
65
+ Не включайте этот файл в архивы или коммиты.
66
+
67
+ ## 2. Проверить загрузку через TestPyPI
68
+
69
+ Зарегистрируйте отдельный аккаунт на https://test.pypi.org/account/register/,
70
+ подтвердите email, настройте двухфакторную аутентификацию и создайте API token.
71
+ Для первой загрузки нового проекта нужен токен с областью `Entire account`.
72
+ TestPyPI и PyPI имеют отдельные аккаунты и токены.
73
+
74
+ ```powershell
75
+ & $publishPython -m twine upload --config-file .pypirc --repository testpypi --username __token__ dist/pypi/openpyxl-enhanced/3.2.0b3/openpyxl_enhanced-3.2.0b3*
76
+ ```
77
+
78
+ При запросе пароля вставьте токен целиком, включая префикс `pypi-`.
79
+ Не записывайте токен в исходники или команду. Откройте страницу
80
+ https://test.pypi.org/project/openpyxl-enhanced/3.2.0b3/ и проверьте описание и ссылки.
81
+
82
+ Проверка установки с TestPyPI в новом окружении:
83
+
84
+ ```powershell
85
+ py -3.12 -m venv .tox/testpypi-smoke
86
+ $testPython = '.\.tox\testpypi-smoke\Scripts\python.exe'
87
+ & $testPython -m pip install --index-url https://pypi.org/simple et_xmlfile
88
+ & $testPython -m pip install --index-url https://test.pypi.org/simple/ --no-deps openpyxl-enhanced==3.2.0b3
89
+ & $testPython -m pip check
90
+ & $testPython -I .github/scripts/check_wheel.py
91
+ ```
92
+
93
+ Зависимость ставится отдельно из основного PyPI: в TestPyPI её может не быть.
94
+
95
+ ## 3. Опубликовать в основном PyPI
96
+
97
+ Создайте аккаунт на https://pypi.org/account/register/, подтвердите email,
98
+ настройте 2FA и создайте API token с областью `Entire account` для первой
99
+ публикации. Используйте токен основного PyPI, а не TestPyPI.
100
+
101
+ Загрузите те же два проверенных файла:
102
+
103
+ ```powershell
104
+ & $publishPython -m twine upload --config-file .pypirc --repository pypi --username __token__ dist/pypi/openpyxl-enhanced/3.2.0b3/openpyxl_enhanced-3.2.0b3*
105
+ ```
106
+
107
+ Эта команда публикует пакет для всех пользователей. После первой публикации
108
+ создайте токен только для проекта `openpyxl-enhanced` и отзовите использованный токен
109
+ с областью всего аккаунта, если он больше не нужен.
110
+
111
+ Для установки опубликованной беты:
112
+
113
+ ```powershell
114
+ python -m pip install openpyxl-enhanced==3.2.0b3
115
+ ```
116
+
117
+ Явная версия выбирает бету предсказуемо. Для получения подходящих предварительных
118
+ версий можно использовать `python -m pip install --pre openpyxl-enhanced`.
119
+
120
+ ## Следующие релизы
121
+
122
+ Версия берётся из `openpyxl/_constants.py`. Для следующей беты используйте,
123
+ например, `3.2.0b4`; версию `3.2.0` выбирайте, когда готовы объявить стабильный
124
+ релиз. Обновите примеры версий в README и этой инструкции вместе с константой.
125
+ PyPI не позволяет заменить уже загруженные файлы; удаление релиза не разрешает
126
+ повторное использование тех же имён файлов. Перед новой загрузкой собирайте
127
+ в отдельный каталог и выбирайте файлы нужной версии явно.
128
+
129
+ Существующий `.github/workflows/pytest.yml` проверяет Python 3.8–3.14, собирает
130
+ wheel и sdist, запускает `twine check --strict` и smoke-тест wheel. На событие
131
+ GitHub Release он прикрепляет файлы к релизу, но не отправляет их в PyPI.
132
+ Изменения workflow начнут действовать после отправки коммита на GitHub.
133
+
134
+ ## Официальные инструкции
135
+
136
+ - [Сборка и публикация пакетов](https://packaging.python.org/en/latest/tutorials/packaging-projects/)
137
+ - [Работа с TestPyPI](https://packaging.python.org/en/latest/guides/using-testpypi/)
138
+ - [API tokens PyPI](https://pypi.org/help/#apitoken)
139
+ - [Почему имя может быть недоступно](https://pypi.org/help/#project-name)
140
+
141
+ Для будущей автоматизации можно настроить
142
+ [Trusted Publishing](https://docs.pypi.org/trusted-publishers/adding-a-publisher/)
143
+ через GitHub Actions. Текущая подготовка использует ручную загрузку через Twine.