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.
- openpyxl_enhanced-3.2.0b3/AUTHORS.rst +98 -0
- openpyxl_enhanced-3.2.0b3/LICENCE.rst +23 -0
- openpyxl_enhanced-3.2.0b3/MANIFEST.in +8 -0
- openpyxl_enhanced-3.2.0b3/PKG-INFO +142 -0
- openpyxl_enhanced-3.2.0b3/PUBLISHING.md +143 -0
- openpyxl_enhanced-3.2.0b3/README.md +248 -0
- openpyxl_enhanced-3.2.0b3/README.pypi.md +95 -0
- openpyxl_enhanced-3.2.0b3/README.ru.md +248 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/__init__.py +19 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/_constants.py +12 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/__init__.py +5 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/_writer.py +121 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/cell.py +417 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/coordinate.py +32 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/read_only.py +98 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/rich_text.py +188 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/cell/text.py +168 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/_3d.py +85 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/__init__.py +20 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/_chart.py +194 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/area_chart.py +81 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/axis.py +389 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/bar_chart.py +144 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/bubble_chart.py +61 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/chartspace.py +194 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/data_source.py +175 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/descriptors.py +34 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/error_bar.py +69 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/label.py +134 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/layout.py +68 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/legend.py +58 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/line_chart.py +129 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/marker.py +89 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/picture.py +38 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/pie_chart.py +136 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/pivot.py +52 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/plotarea.py +151 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/print_settings.py +46 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/radar_chart.py +44 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/reader.py +28 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/reference.py +101 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/scatter_chart.py +53 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/series.py +239 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/series_factory.py +47 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/shapes.py +103 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/stock_chart.py +46 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/surface_chart.py +85 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/text.py +57 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/title.py +70 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/trendline.py +110 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chart/updown_bars.py +20 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/chartsheet.py +109 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/custom.py +50 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/properties.py +19 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/protection.py +44 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/publish.py +63 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/relation.py +95 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/chartsheet/views.py +42 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/comments/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/comments/author.py +13 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/comments/comment_sheet.py +188 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/comments/comments.py +56 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/comments/shape_writer.py +111 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/compat/__init__.py +49 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/compat/abc.py +9 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/compat/numbers.py +43 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/compat/product.py +16 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/compat/singleton.py +38 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/compat/strings.py +24 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/connection/__init__.py +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/connection/connections.py +449 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/__init__.py +55 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/base.py +249 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/container.py +34 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/excel.py +101 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/namespace.py +11 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/nested.py +116 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/sequence.py +127 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/serialisable.py +208 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/descriptors/slots.py +18 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/anchor.py +166 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/colors.py +681 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/connector.py +121 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/drawing.py +78 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/effect.py +364 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/fill.py +456 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/geometry.py +764 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/graphic.py +140 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/image.py +95 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/legacy.py +24 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/line.py +142 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/picture.py +126 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/properties.py +158 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/relation.py +13 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/spreadsheet_drawing.py +269 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/text.py +767 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/drawing/xdr.py +30 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formatting/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formatting/formatting.py +95 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formatting/rule.py +383 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formula/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formula/structural.py +178 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formula/tokenizer.py +444 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/formula/translate.py +179 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/__init__.py +3 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/core.py +120 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/custom.py +236 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/extended.py +131 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/interface.py +49 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/manifest.py +196 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/relationship.py +148 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/packaging/workbook.py +189 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/pivot/__init__.py +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/pivot/cache.py +920 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/pivot/fields.py +280 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/pivot/record.py +81 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/pivot/table.py +1297 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/reader/__init__.py +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/reader/drawings.py +73 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/reader/excel.py +486 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/reader/strings.py +38 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/reader/workbook.py +121 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/__init__.py +15 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/alignment.py +79 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/borders.py +133 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/builtins.py +1362 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/cell_style.py +203 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/colors.py +213 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/differential.py +81 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/fills.py +228 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/fonts.py +146 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/named_styles.py +255 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/numbers.py +181 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/protection.py +17 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/proxy.py +56 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/styleable.py +217 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/stylesheet.py +263 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/styles/table.py +100 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/__init__.py +12 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/bound_dictionary.py +24 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/cell.py +229 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/dataframe.py +73 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/datetime.py +147 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/escape.py +37 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/exceptions.py +56 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/formulas.py +380 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/indexed_list.py +49 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/inference.py +66 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/protection.py +22 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/utils/units.py +116 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/volatile/__init__.py +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/volatile/volatile.py +79 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/_writer.py +185 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/child.py +147 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/defined_name.py +185 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/external_link/__init__.py +2 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/external_link/external.py +135 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/external_reference.py +11 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/function_group.py +24 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/properties.py +143 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/protection.py +180 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/smart_tags.py +37 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/views.py +142 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/web.py +98 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/workbook/workbook.py +428 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/__init__.py +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_read_only.py +173 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_reader.py +482 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_structural_edit.py +428 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_write_only.py +138 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/_writer.py +384 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/cell_range.py +497 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/cell_watch.py +23 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/controls.py +323 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/copier.py +57 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/custom.py +23 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/datavalidation.py +211 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/dimensions.py +315 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/drawing.py +11 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/errors.py +74 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/filters.py +558 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/formula.py +47 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/header_footer.py +260 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/hyperlink.py +40 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/merge.py +150 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/ole.py +126 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/page.py +167 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/pagebreak.py +75 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/picture.py +8 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/print_settings.py +165 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/properties.py +91 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/protection.py +148 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/related.py +13 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/scenario.py +80 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/smart_tag.py +57 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/table.py +360 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/views.py +145 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/worksheet/worksheet.py +982 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/writer/__init__.py +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/writer/excel.py +351 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/writer/theme.py +310 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/xml/__init__.py +44 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/xml/constants.py +121 -0
- openpyxl_enhanced-3.2.0b3/openpyxl/xml/functions.py +80 -0
- openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/PKG-INFO +142 -0
- openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/SOURCES.txt +214 -0
- openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/dependency_links.txt +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/requires.txt +1 -0
- openpyxl_enhanced-3.2.0b3/openpyxl_enhanced.egg-info/top_level.txt +1 -0
- openpyxl_enhanced-3.2.0b3/pyproject.toml +3 -0
- openpyxl_enhanced-3.2.0b3/setup.cfg +7 -0
- 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,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.
|