exstruct 0.2.80__tar.gz → 0.2.90__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.
- {exstruct-0.2.80 → exstruct-0.2.90}/PKG-INFO +22 -11
- {exstruct-0.2.80 → exstruct-0.2.90}/README.md +21 -10
- {exstruct-0.2.80 → exstruct-0.2.90}/pyproject.toml +1 -1
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/__init__.py +8 -1
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/cli/main.py +20 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/core/cells.py +759 -332
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/core/integrate.py +66 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/engine.py +53 -1
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/models/__init__.py +4 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/LICENSE +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/cli/availability.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/core/__init__.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/core/charts.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/core/shapes.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/errors.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/io/__init__.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/models/maps.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/models/types.py +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/py.typed +0 -0
- {exstruct-0.2.80 → exstruct-0.2.90}/src/exstruct/render/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: exstruct
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.90
|
|
4
4
|
Summary: Excel to structured JSON (tables, shapes, charts) for LLM/RAG pipelines
|
|
5
5
|
Keywords: excel,structure,data,exstruct
|
|
6
6
|
Author: harumiWeb
|
|
@@ -61,12 +61,12 @@ Description-Content-Type: text/markdown
|
|
|
61
61
|
|
|
62
62
|
ExStruct reads Excel workbooks and outputs structured data (cells, table candidates, shapes, charts, print areas/views, auto page-break areas, hyperlinks) as JSON by default, with optional YAML/TOON formats. It targets both COM/Excel environments (rich extraction) and non-COM environments (cells + table candidates + print areas), with tunable detection heuristics and multiple output modes to fit LLM/RAG pipelines.
|
|
63
63
|
|
|
64
|
-
[日本版README](README.ja.md)
|
|
64
|
+
[日本版 README](README.ja.md)
|
|
65
65
|
|
|
66
66
|
## Features
|
|
67
67
|
|
|
68
68
|
- **Excel → Structured JSON**: cells, shapes, charts, table candidates, print areas/views, and auto page-break areas per sheet.
|
|
69
|
-
- **Output modes**: `light` (cells + table candidates + print areas; no COM, shapes/charts empty), `standard` (texted shapes + arrows, charts, print areas), `verbose` (all shapes with width/height, charts with size, print areas). Verbose also emits cell hyperlinks
|
|
69
|
+
- **Output modes**: `light` (cells + table candidates + print areas; no COM, shapes/charts empty), `standard` (texted shapes + arrows, charts, print areas), `verbose` (all shapes with width/height, charts with size, print areas). Verbose also emits cell hyperlinks and `colors_map`. Size output is flag-controlled.
|
|
70
70
|
- **Auto page-break export (COM only)**: capture Excel-computed auto page breaks and write per-area JSON/YAML/TOON when requested (CLI option appears only when COM is available).
|
|
71
71
|
- **Formats**: JSON (compact by default, `--pretty` available), YAML, TOON (optional dependencies).
|
|
72
72
|
- **Table detection tuning**: adjust heuristics at runtime via API.
|
|
@@ -189,7 +189,7 @@ Use higher thresholds to reduce false positives; lower them if true tables are m
|
|
|
189
189
|
|
|
190
190
|
- **light**: cells + table candidates (no COM needed).
|
|
191
191
|
- **standard**: texted shapes + arrows, charts (COM if available), table candidates. Hyperlinks are off unless `include_cell_links=True`.
|
|
192
|
-
- **verbose**: all shapes (with width/height), charts, table candidates,
|
|
192
|
+
- **verbose**: all shapes (with width/height), charts, table candidates, cell hyperlinks, and `colors_map`.
|
|
193
193
|
|
|
194
194
|
## Error Handling / Fallbacks
|
|
195
195
|
|
|
@@ -274,12 +274,14 @@ Below is a **shortened JSON output example** from parsing this Excel workbook.
|
|
|
274
274
|
],
|
|
275
275
|
"shapes": [
|
|
276
276
|
{
|
|
277
|
+
"id": 1,
|
|
277
278
|
"text": "開始",
|
|
278
279
|
"l": 148,
|
|
279
280
|
"t": 220,
|
|
280
281
|
"type": "AutoShape-FlowchartProcess"
|
|
281
282
|
},
|
|
282
283
|
{
|
|
284
|
+
"id": 2,
|
|
283
285
|
"text": "入力データ読み込み",
|
|
284
286
|
"l": 132,
|
|
285
287
|
"t": 282,
|
|
@@ -291,6 +293,8 @@ Below is a **shortened JSON output example** from parsing this Excel workbook.
|
|
|
291
293
|
"type": "AutoShape-Mixed",
|
|
292
294
|
"begin_arrow_style": 1,
|
|
293
295
|
"end_arrow_style": 2,
|
|
296
|
+
"begin_id": 1,
|
|
297
|
+
"end_id": 2,
|
|
294
298
|
"direction": "N"
|
|
295
299
|
},
|
|
296
300
|
...
|
|
@@ -374,14 +378,14 @@ flowchart TD
|
|
|
374
378
|
|
|
375
379
|
A --> B
|
|
376
380
|
B --> C
|
|
377
|
-
C
|
|
378
|
-
C
|
|
381
|
+
C -->|yes| D
|
|
382
|
+
C --> H
|
|
383
|
+
D --> E
|
|
379
384
|
E --> F
|
|
380
|
-
F
|
|
381
|
-
|
|
382
|
-
G
|
|
383
|
-
H
|
|
384
|
-
H -- no --> J
|
|
385
|
+
F --> G
|
|
386
|
+
G -->|yes| I
|
|
387
|
+
G -->|no| J
|
|
388
|
+
H --> J
|
|
385
389
|
I --> J
|
|
386
390
|
```
|
|
387
391
|
````
|
|
@@ -390,6 +394,12 @@ From this we can see:
|
|
|
390
394
|
|
|
391
395
|
**exstruct's JSON is already in a format that AI can read and reason over directly.**
|
|
392
396
|
|
|
397
|
+
Other LLM inference samples using this library can be found in the following directory:
|
|
398
|
+
|
|
399
|
+
- [Basic Excel](sample/basic/)
|
|
400
|
+
- [Flowchart](sample/flowchart/)
|
|
401
|
+
- [Gantt Chart](sample/gantt_chart/)
|
|
402
|
+
|
|
393
403
|
### 4. Summary
|
|
394
404
|
|
|
395
405
|
This benchmark confirms exstruct can:
|
|
@@ -414,6 +424,7 @@ ExStruct is used primarily as a **library**, not a service.
|
|
|
414
424
|
- Forking and internal modification are expected in enterprise use
|
|
415
425
|
|
|
416
426
|
This project is suitable for teams that:
|
|
427
|
+
|
|
417
428
|
- need transparency over black-box tools
|
|
418
429
|
- are comfortable maintaining internal forks if necessary
|
|
419
430
|
|
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
ExStruct reads Excel workbooks and outputs structured data (cells, table candidates, shapes, charts, print areas/views, auto page-break areas, hyperlinks) as JSON by default, with optional YAML/TOON formats. It targets both COM/Excel environments (rich extraction) and non-COM environments (cells + table candidates + print areas), with tunable detection heuristics and multiple output modes to fit LLM/RAG pipelines.
|
|
8
8
|
|
|
9
|
-
[日本版README](README.ja.md)
|
|
9
|
+
[日本版 README](README.ja.md)
|
|
10
10
|
|
|
11
11
|
## Features
|
|
12
12
|
|
|
13
13
|
- **Excel → Structured JSON**: cells, shapes, charts, table candidates, print areas/views, and auto page-break areas per sheet.
|
|
14
|
-
- **Output modes**: `light` (cells + table candidates + print areas; no COM, shapes/charts empty), `standard` (texted shapes + arrows, charts, print areas), `verbose` (all shapes with width/height, charts with size, print areas). Verbose also emits cell hyperlinks
|
|
14
|
+
- **Output modes**: `light` (cells + table candidates + print areas; no COM, shapes/charts empty), `standard` (texted shapes + arrows, charts, print areas), `verbose` (all shapes with width/height, charts with size, print areas). Verbose also emits cell hyperlinks and `colors_map`. Size output is flag-controlled.
|
|
15
15
|
- **Auto page-break export (COM only)**: capture Excel-computed auto page breaks and write per-area JSON/YAML/TOON when requested (CLI option appears only when COM is available).
|
|
16
16
|
- **Formats**: JSON (compact by default, `--pretty` available), YAML, TOON (optional dependencies).
|
|
17
17
|
- **Table detection tuning**: adjust heuristics at runtime via API.
|
|
@@ -134,7 +134,7 @@ Use higher thresholds to reduce false positives; lower them if true tables are m
|
|
|
134
134
|
|
|
135
135
|
- **light**: cells + table candidates (no COM needed).
|
|
136
136
|
- **standard**: texted shapes + arrows, charts (COM if available), table candidates. Hyperlinks are off unless `include_cell_links=True`.
|
|
137
|
-
- **verbose**: all shapes (with width/height), charts, table candidates,
|
|
137
|
+
- **verbose**: all shapes (with width/height), charts, table candidates, cell hyperlinks, and `colors_map`.
|
|
138
138
|
|
|
139
139
|
## Error Handling / Fallbacks
|
|
140
140
|
|
|
@@ -219,12 +219,14 @@ Below is a **shortened JSON output example** from parsing this Excel workbook.
|
|
|
219
219
|
],
|
|
220
220
|
"shapes": [
|
|
221
221
|
{
|
|
222
|
+
"id": 1,
|
|
222
223
|
"text": "開始",
|
|
223
224
|
"l": 148,
|
|
224
225
|
"t": 220,
|
|
225
226
|
"type": "AutoShape-FlowchartProcess"
|
|
226
227
|
},
|
|
227
228
|
{
|
|
229
|
+
"id": 2,
|
|
228
230
|
"text": "入力データ読み込み",
|
|
229
231
|
"l": 132,
|
|
230
232
|
"t": 282,
|
|
@@ -236,6 +238,8 @@ Below is a **shortened JSON output example** from parsing this Excel workbook.
|
|
|
236
238
|
"type": "AutoShape-Mixed",
|
|
237
239
|
"begin_arrow_style": 1,
|
|
238
240
|
"end_arrow_style": 2,
|
|
241
|
+
"begin_id": 1,
|
|
242
|
+
"end_id": 2,
|
|
239
243
|
"direction": "N"
|
|
240
244
|
},
|
|
241
245
|
...
|
|
@@ -319,14 +323,14 @@ flowchart TD
|
|
|
319
323
|
|
|
320
324
|
A --> B
|
|
321
325
|
B --> C
|
|
322
|
-
C
|
|
323
|
-
C
|
|
326
|
+
C -->|yes| D
|
|
327
|
+
C --> H
|
|
328
|
+
D --> E
|
|
324
329
|
E --> F
|
|
325
|
-
F
|
|
326
|
-
|
|
327
|
-
G
|
|
328
|
-
H
|
|
329
|
-
H -- no --> J
|
|
330
|
+
F --> G
|
|
331
|
+
G -->|yes| I
|
|
332
|
+
G -->|no| J
|
|
333
|
+
H --> J
|
|
330
334
|
I --> J
|
|
331
335
|
```
|
|
332
336
|
````
|
|
@@ -335,6 +339,12 @@ From this we can see:
|
|
|
335
339
|
|
|
336
340
|
**exstruct's JSON is already in a format that AI can read and reason over directly.**
|
|
337
341
|
|
|
342
|
+
Other LLM inference samples using this library can be found in the following directory:
|
|
343
|
+
|
|
344
|
+
- [Basic Excel](sample/basic/)
|
|
345
|
+
- [Flowchart](sample/flowchart/)
|
|
346
|
+
- [Gantt Chart](sample/gantt_chart/)
|
|
347
|
+
|
|
338
348
|
### 4. Summary
|
|
339
349
|
|
|
340
350
|
This benchmark confirms exstruct can:
|
|
@@ -359,6 +369,7 @@ ExStruct is used primarily as a **library**, not a service.
|
|
|
359
369
|
- Forking and internal modification are expected in enterprise use
|
|
360
370
|
|
|
361
371
|
This project is suitable for teams that:
|
|
372
|
+
|
|
362
373
|
- need transparency over black-box tools
|
|
363
374
|
- are comfortable maintaining internal forks if necessary
|
|
364
375
|
|
|
@@ -7,6 +7,7 @@ from typing import Literal, TextIO
|
|
|
7
7
|
from .core.cells import set_table_detection_params
|
|
8
8
|
from .core.integrate import extract_workbook
|
|
9
9
|
from .engine import (
|
|
10
|
+
ColorsOptions,
|
|
10
11
|
DestinationOptions,
|
|
11
12
|
ExStructEngine,
|
|
12
13
|
FilterOptions,
|
|
@@ -76,6 +77,7 @@ __all__ = [
|
|
|
76
77
|
"OutputOptions",
|
|
77
78
|
"FilterOptions",
|
|
78
79
|
"DestinationOptions",
|
|
80
|
+
"ColorsOptions",
|
|
79
81
|
"serialize_workbook",
|
|
80
82
|
"export_auto_page_breaks",
|
|
81
83
|
]
|
|
@@ -110,8 +112,13 @@ def extract(file_path: str | Path, mode: ExtractionMode = "standard") -> Workboo
|
|
|
110
112
|
['A1:B5']
|
|
111
113
|
"""
|
|
112
114
|
include_links = True if mode == "verbose" else False
|
|
115
|
+
include_colors_map = True if mode == "verbose" else None
|
|
113
116
|
engine = ExStructEngine(
|
|
114
|
-
options=StructOptions(
|
|
117
|
+
options=StructOptions(
|
|
118
|
+
mode=mode,
|
|
119
|
+
include_cell_links=include_links,
|
|
120
|
+
include_colors_map=include_colors_map,
|
|
121
|
+
)
|
|
115
122
|
)
|
|
116
123
|
return engine.extract(file_path, mode=mode)
|
|
117
124
|
|
|
@@ -2,11 +2,30 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import argparse
|
|
4
4
|
from pathlib import Path
|
|
5
|
+
import sys
|
|
5
6
|
|
|
6
7
|
from exstruct import process_excel
|
|
7
8
|
from exstruct.cli.availability import ComAvailability, get_com_availability
|
|
8
9
|
|
|
9
10
|
|
|
11
|
+
def _ensure_utf8_stdout() -> None:
|
|
12
|
+
"""Reconfigure stdout to UTF-8 when supported.
|
|
13
|
+
|
|
14
|
+
Windows consoles default to cp932 and can raise encoding errors when piping
|
|
15
|
+
non-ASCII characters. Reconfiguring prevents failures without affecting
|
|
16
|
+
environments that already default to UTF-8.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
stdout = sys.stdout
|
|
20
|
+
if not hasattr(stdout, "reconfigure"):
|
|
21
|
+
return
|
|
22
|
+
reconfigure = stdout.reconfigure
|
|
23
|
+
try:
|
|
24
|
+
reconfigure(encoding="utf-8", errors="replace")
|
|
25
|
+
except (AttributeError, ValueError):
|
|
26
|
+
return
|
|
27
|
+
|
|
28
|
+
|
|
10
29
|
def _add_auto_page_breaks_argument(
|
|
11
30
|
parser: argparse.ArgumentParser, availability: ComAvailability
|
|
12
31
|
) -> None:
|
|
@@ -102,6 +121,7 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
102
121
|
Returns:
|
|
103
122
|
Exit code (0 for success, 1 for failure).
|
|
104
123
|
"""
|
|
124
|
+
_ensure_utf8_stdout()
|
|
105
125
|
parser = build_parser()
|
|
106
126
|
args = parser.parse_args(argv)
|
|
107
127
|
|