Skip to content

Commit 8fb9050

Browse files
wolfieschclaude
andcommitted
bench: refresh fidelity + perf results with 15 adapters
Full benchmark run with phase breakdown across all 15 available adapters (19 features). WolfXL scores 102/108 fidelity (94% of openpyxl) at 4-9x faster throughput. Includes updated heatmap, scatter plots, and HTML dashboard. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent f7a64e0 commit 8fb9050

13 files changed

Lines changed: 32722 additions & 25577 deletions

‎results/DASHBOARD.md‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ExcelBench Dashboard
22

3-
*Profile: xlsx | Generated: 2026-02-14T15:25:20.758972+00:00*
3+
*Profile: xlsx | Generated: 2026-02-16T02:40:41.595881+00:00*
44

55
> Combined fidelity and performance view. Fidelity shows correctness;
66
> throughput shows speed. Use this to find the right library for your needs.
@@ -10,17 +10,18 @@
1010
| Library | Caps | Green Features | Pass Rate | Best For |
1111
|---------|:----:|:--------------:|:---------:|----------|
1212
| openpyxl | R+W | 18/18 | 100% | Full-fidelity read + write |
13+
| calamine-styled | R | 17/18 | 98% | General use |
14+
| rust_xlsxwriter | W | 17/18 | 98% | General use |
15+
| wolfxl | R+W | 17/18 | 98% | General use |
1316
| xlsxwriter | W | 16/18 | 90% | High-fidelity write-only workflows |
14-
| umya-spreadsheet | R+W | 15/18 | 92% | General use |
1517
| xlsxwriter-constmem | W | 13/18 | 85% | Large file writes with memory limits |
16-
| rust_xlsxwriter | W | 8/18 | 68% | General use |
1718
| xlwt | W | 4/18 | 58% | Legacy .xls file writes |
1819
| openpyxl-readonly | R | 3/18 | 22% | Streaming reads when formatting isn't needed |
1920
| pandas | R+W | 3/18 | 19% | Data analysis pipelines (accept NaN coercion) |
2021
| pyexcel | R+W | 3/18 | 20% | Multi-format compatibility layer |
2122
| tablib | R+W | 3/18 | 20% | Dataset export/import workflows |
23+
| calamine | R | 2/18 | 18% | General use |
2224
| pylightxl | R+W | 2/18 | 18% | Lightweight value extraction |
23-
| calamine | R | 1/18 | 18% | General use |
2425
| python-calamine | R | 1/18 | 16% | Fast bulk value reads |
2526
| polars | R | 0/18 | 14% | High-performance DataFrames (values only) |
2627

‎results/README.md‎

Lines changed: 3402 additions & 4 deletions
Large diffs are not rendered by default.

‎results/dashboard.html‎

Lines changed: 17635 additions & 0 deletions
Large diffs are not rendered by default.

‎results/history.jsonl‎

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

‎results/matrix.csv‎

Lines changed: 47 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ library,feature,read_score,write_score
22
openpyxl,cell_values,3,3
33
xlsxwriter,cell_values,,3
44
python-calamine,cell_values,1,
5-
calamine,cell_values,1,
6-
rust_xlsxwriter,cell_values,,1
7-
umya-spreadsheet,cell_values,3,3
8-
pyumya,cell_values,3,3
5+
calamine-styled,cell_values,3,
6+
rust_xlsxwriter,cell_values,,3
7+
wolfxl,cell_values,3,3
98
pylightxl,cell_values,3,1
109
xlrd,cell_values,,
1110
pyexcel,cell_values,3,3
@@ -18,10 +17,9 @@ tablib,cell_values,3,3
1817
openpyxl,formulas,3,3
1918
xlsxwriter,formulas,,3
2019
python-calamine,formulas,0,
21-
calamine,formulas,0,
20+
calamine-styled,formulas,3,
2221
rust_xlsxwriter,formulas,,3
23-
umya-spreadsheet,formulas,3,3
24-
pyumya,formulas,3,3
22+
wolfxl,formulas,3,3
2523
pylightxl,formulas,0,3
2624
xlrd,formulas,,
2725
pyexcel,formulas,0,3
@@ -34,10 +32,9 @@ tablib,formulas,0,3
3432
openpyxl,text_formatting,3,3
3533
xlsxwriter,text_formatting,,3
3634
python-calamine,text_formatting,0,
37-
calamine,text_formatting,0,
35+
calamine-styled,text_formatting,3,
3836
rust_xlsxwriter,text_formatting,,3
39-
umya-spreadsheet,text_formatting,3,3
40-
pyumya,text_formatting,3,3
37+
wolfxl,text_formatting,3,3
4138
pylightxl,text_formatting,0,0
4239
xlrd,text_formatting,,
4340
pyexcel,text_formatting,0,0
@@ -50,10 +47,9 @@ tablib,text_formatting,0,0
5047
openpyxl,background_colors,3,3
5148
xlsxwriter,background_colors,,3
5249
python-calamine,background_colors,0,
53-
calamine,background_colors,0,
50+
calamine-styled,background_colors,3,
5451
rust_xlsxwriter,background_colors,,3
55-
umya-spreadsheet,background_colors,3,3
56-
pyumya,background_colors,3,3
52+
wolfxl,background_colors,3,3
5753
pylightxl,background_colors,0,0
5854
xlrd,background_colors,,
5955
pyexcel,background_colors,0,0
@@ -66,10 +62,9 @@ tablib,background_colors,0,0
6662
openpyxl,number_formats,3,3
6763
xlsxwriter,number_formats,,3
6864
python-calamine,number_formats,0,
69-
calamine,number_formats,0,
65+
calamine-styled,number_formats,3,
7066
rust_xlsxwriter,number_formats,,3
71-
umya-spreadsheet,number_formats,3,3
72-
pyumya,number_formats,3,3
67+
wolfxl,number_formats,3,3
7368
pylightxl,number_formats,0,0
7469
xlrd,number_formats,,
7570
pyexcel,number_formats,0,1
@@ -82,10 +77,9 @@ tablib,number_formats,0,1
8277
openpyxl,alignment,3,3
8378
xlsxwriter,alignment,,3
8479
python-calamine,alignment,1,
85-
calamine,alignment,1,
80+
calamine-styled,alignment,3,
8681
rust_xlsxwriter,alignment,,3
87-
umya-spreadsheet,alignment,1,1
88-
pyumya,alignment,1,0
82+
wolfxl,alignment,3,3
8983
pylightxl,alignment,0,1
9084
xlrd,alignment,,
9185
pyexcel,alignment,1,1
@@ -98,10 +92,9 @@ tablib,alignment,1,1
9892
openpyxl,borders,3,3
9993
xlsxwriter,borders,,3
10094
python-calamine,borders,0,
101-
calamine,borders,0,
95+
calamine-styled,borders,3,
10296
rust_xlsxwriter,borders,,3
103-
umya-spreadsheet,borders,1,1
104-
pyumya,borders,1,0
97+
wolfxl,borders,3,3
10598
pylightxl,borders,0,0
10699
xlrd,borders,,
107100
pyexcel,borders,0,0
@@ -114,10 +107,9 @@ tablib,borders,0,0
114107
openpyxl,dimensions,3,3
115108
xlsxwriter,dimensions,,3
116109
python-calamine,dimensions,0,
117-
calamine,dimensions,0,
110+
calamine-styled,dimensions,3,
118111
rust_xlsxwriter,dimensions,,3
119-
umya-spreadsheet,dimensions,1,3
120-
pyumya,dimensions,3,3
112+
wolfxl,dimensions,3,3
121113
pylightxl,dimensions,0,0
122114
xlrd,dimensions,,
123115
pyexcel,dimensions,0,0
@@ -130,10 +122,9 @@ tablib,dimensions,0,0
130122
openpyxl,multiple_sheets,3,3
131123
xlsxwriter,multiple_sheets,,3
132124
python-calamine,multiple_sheets,3,
133-
calamine,multiple_sheets,3,
125+
calamine-styled,multiple_sheets,3,
134126
rust_xlsxwriter,multiple_sheets,,3
135-
umya-spreadsheet,multiple_sheets,3,3
136-
pyumya,multiple_sheets,3,3
127+
wolfxl,multiple_sheets,3,3
137128
pylightxl,multiple_sheets,3,3
138129
xlrd,multiple_sheets,,
139130
pyexcel,multiple_sheets,3,3
@@ -146,10 +137,9 @@ tablib,multiple_sheets,3,3
146137
openpyxl,merged_cells,3,3
147138
xlsxwriter,merged_cells,,3
148139
python-calamine,merged_cells,0,
149-
calamine,merged_cells,0,
150-
rust_xlsxwriter,merged_cells,,0
151-
umya-spreadsheet,merged_cells,3,3
152-
pyumya,merged_cells,3,3
140+
calamine-styled,merged_cells,3,
141+
rust_xlsxwriter,merged_cells,,3
142+
wolfxl,merged_cells,3,3
153143
pylightxl,merged_cells,0,0
154144
xlrd,merged_cells,,
155145
pyexcel,merged_cells,0,0
@@ -162,10 +152,9 @@ tablib,merged_cells,0,0
162152
openpyxl,conditional_formatting,3,3
163153
xlsxwriter,conditional_formatting,,3
164154
python-calamine,conditional_formatting,0,
165-
calamine,conditional_formatting,0,
166-
rust_xlsxwriter,conditional_formatting,,0
167-
umya-spreadsheet,conditional_formatting,3,0
168-
pyumya,conditional_formatting,3,3
155+
calamine-styled,conditional_formatting,3,
156+
rust_xlsxwriter,conditional_formatting,,3
157+
wolfxl,conditional_formatting,3,3
169158
pylightxl,conditional_formatting,0,0
170159
xlrd,conditional_formatting,,
171160
pyexcel,conditional_formatting,0,0
@@ -178,10 +167,9 @@ tablib,conditional_formatting,0,0
178167
openpyxl,data_validation,3,3
179168
xlsxwriter,data_validation,,3
180169
python-calamine,data_validation,0,
181-
calamine,data_validation,0,
182-
rust_xlsxwriter,data_validation,,0
183-
umya-spreadsheet,data_validation,3,3
184-
pyumya,data_validation,3,3
170+
calamine-styled,data_validation,3,
171+
rust_xlsxwriter,data_validation,,3
172+
wolfxl,data_validation,3,3
185173
pylightxl,data_validation,0,0
186174
xlrd,data_validation,,
187175
pyexcel,data_validation,0,0
@@ -194,10 +182,9 @@ tablib,data_validation,0,0
194182
openpyxl,hyperlinks,3,3
195183
xlsxwriter,hyperlinks,,3
196184
python-calamine,hyperlinks,0,
197-
calamine,hyperlinks,0,
198-
rust_xlsxwriter,hyperlinks,,0
199-
umya-spreadsheet,hyperlinks,0,0
200-
pyumya,hyperlinks,3,3
185+
calamine-styled,hyperlinks,3,
186+
rust_xlsxwriter,hyperlinks,,3
187+
wolfxl,hyperlinks,3,3
201188
pylightxl,hyperlinks,0,0
202189
xlrd,hyperlinks,,
203190
pyexcel,hyperlinks,0,0
@@ -210,10 +197,9 @@ tablib,hyperlinks,0,0
210197
openpyxl,images,3,3
211198
xlsxwriter,images,,3
212199
python-calamine,images,0,
213-
calamine,images,0,
200+
calamine-styled,images,0,
214201
rust_xlsxwriter,images,,0
215-
umya-spreadsheet,images,0,3
216-
pyumya,images,3,3
202+
wolfxl,images,0,0
217203
pylightxl,images,0,0
218204
xlrd,images,,
219205
pyexcel,images,0,0
@@ -226,10 +212,9 @@ tablib,images,0,0
226212
openpyxl,pivot_tables,,
227213
xlsxwriter,pivot_tables,,
228214
python-calamine,pivot_tables,,
229-
calamine,pivot_tables,,
215+
calamine-styled,pivot_tables,,
230216
rust_xlsxwriter,pivot_tables,,
231-
umya-spreadsheet,pivot_tables,,
232-
pyumya,pivot_tables,,
217+
wolfxl,pivot_tables,,
233218
pylightxl,pivot_tables,,
234219
xlrd,pivot_tables,,
235220
pyexcel,pivot_tables,,
@@ -242,10 +227,9 @@ tablib,pivot_tables,,
242227
openpyxl,comments,3,3
243228
xlsxwriter,comments,,3
244229
python-calamine,comments,0,
245-
calamine,comments,0,
246-
rust_xlsxwriter,comments,,0
247-
umya-spreadsheet,comments,3,3
248-
pyumya,comments,3,3
230+
calamine-styled,comments,3,
231+
rust_xlsxwriter,comments,,3
232+
wolfxl,comments,3,3
249233
pylightxl,comments,0,0
250234
xlrd,comments,,
251235
pyexcel,comments,0,0
@@ -258,10 +242,9 @@ tablib,comments,0,0
258242
openpyxl,freeze_panes,3,3
259243
xlsxwriter,freeze_panes,,3
260244
python-calamine,freeze_panes,0,
261-
calamine,freeze_panes,0,
262-
rust_xlsxwriter,freeze_panes,,0
263-
umya-spreadsheet,freeze_panes,3,3
264-
pyumya,freeze_panes,3,3
245+
calamine-styled,freeze_panes,3,
246+
rust_xlsxwriter,freeze_panes,,3
247+
wolfxl,freeze_panes,3,3
265248
pylightxl,freeze_panes,0,0
266249
xlrd,freeze_panes,,
267250
pyexcel,freeze_panes,0,0
@@ -274,10 +257,9 @@ tablib,freeze_panes,0,0
274257
openpyxl,named_ranges,3,3
275258
xlsxwriter,named_ranges,,0
276259
python-calamine,named_ranges,0,
277-
calamine,named_ranges,0,
278-
rust_xlsxwriter,named_ranges,,0
279-
umya-spreadsheet,named_ranges,3,3
280-
pyumya,named_ranges,0,0
260+
calamine-styled,named_ranges,3,
261+
rust_xlsxwriter,named_ranges,,3
262+
wolfxl,named_ranges,3,3
281263
pylightxl,named_ranges,0,0
282264
xlrd,named_ranges,,
283265
pyexcel,named_ranges,0,0
@@ -290,10 +272,9 @@ tablib,named_ranges,0,0
290272
openpyxl,tables,3,3
291273
xlsxwriter,tables,,0
292274
python-calamine,tables,0,
293-
calamine,tables,0,
294-
rust_xlsxwriter,tables,,0
295-
umya-spreadsheet,tables,2,3
296-
pyumya,tables,0,0
275+
calamine-styled,tables,3,
276+
rust_xlsxwriter,tables,,3
277+
wolfxl,tables,3,3
297278
pylightxl,tables,0,0
298279
xlrd,tables,,
299280
pyexcel,tables,0,0

0 commit comments

Comments
 (0)