Commit Graph
1496 Commits
Author SHA1 Message Date
Marco Arnulfo f36bc100d4 AutoFit measures each distinct text once, and quickly on large columns (#1316) 2026-10-14 18:14:09 +02:00
Marco Arnulfo f92b4d30cb AutoFit Column Width measures text in the font the grid draws it with (fixes #1316) 2026-10-14 18:01:11 +02:00
midasmatterhorn 450ef1aea0 engine: refuse removeDuplicates with no valid column instead of deleting all rows 2026-10-14 18:01:42 +03:00
dev-exeandClaude Opus 5.5 2cae3a22b1 Slicers: a table named in table is found on any sheet
insert.slicer and table.insertSlicer looked for the table named by `table` only on the active
sheet. With another sheet active, the call failed with "Select a cell inside a table first, or
pass `table`" although `table` was passed. Other table commands find a table by name in the
whole workbook (Workbook::table).

The named table is now found on any sheet, and the slicer goes on that table's sheet. `at` is
read on that sheet, so "Sheet1!G2" names the table's own sheet. A name that matches no table
gives "no table named `X`".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 20:30:46 +05:30
Pranav Chandra 3177fbe03f ui: show spill-cell formula as greyed out 2026-10-14 20:23:44 +05:30
MarekSpodBiedry 139098e174 Filter: count empty text and ="" results as (Blanks) (#1294) 2026-10-14 15:44:31 +02:00
Harrison BoothandClaude Opus 5.5 efd081acc0 UI parity: form dialogs open ready to type
Column Width, Row Height and the other form dialogs now open with the cursor
in their first field and its value selected, as in Excel: Alt+H, O, W, then
12 and Enter sets the width without clicking into the field first.

- The first text or number field takes focus once it can (a new window's
  first frame is a sizing pass that ignores focus requests), and its value
  is selected so typing replaces it.
- Number fields commit while typing, so Enter or OK in the same frame no
  longer confirms the old value.

Tests: tests/dialog_focus.rs (Column Width and Row Height: type, Enter,
value applied).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:07:59 -05:00
derechopiano 78ffd3b4c3 fix(pdf): preserve exported links and allow CLI PDF conversion (#954) 2026-10-14 13:40:16 +01:00
Marco Arnulfo 39602e6ce1 Filter and Subtotal: a Sheet! prefix on the range works on that sheet, not the active one (refs #1283) 2026-10-14 13:00:17 +02:00
Marco Arnulfo 13691e95e5 Remove Duplicates: a Sheet! prefix on the range works on that sheet, not the active one (refs #1283) 2026-10-14 12:51:05 +02:00
Marco Arnulfo be1af2d6ac Sort: a Sheet! prefix on the range sorts that sheet, not the active one (fixes #1283) 2026-10-14 12:08:41 +02:00
Marco Arnulfo 531d292930 N() converts a computed array element by element, so it works inside SUMPRODUCT (fixes #1279) 2026-10-14 11:46:48 +02:00
RichardandClaude Fable 5.1 34aa98870d Zoom dialog: Excel's layout, current zoom pre-selected, Fit selection (#930)
View > Zoom is now one Magnification column as in Excel: 200%, 100%, 75%,
50%, 25%, Fit selection and Custom with its percentage box. The current zoom
is pre-selected (Custom when it matches no preset), the box shows whole
percentages clamped to 10..400 and typing in it selects Custom. Fit
selection runs view.zoomToSelection with the grid's size, the same answer
as the ribbon's Zoom to Selection. The window is 220 px wide instead of
380; its height is left to the shared dialog sizing work (#978).

Magnification and Fit selection are translated in every catalog.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2bJ3LxrZ6YnmppgrfwHwr
2026-10-14 20:22:00 +11:00
derechopiano 72db972de3 fix(engine): bound Undo history by retained cell storage (#1227) 2026-10-14 08:23:57 +01:00
Marco Arnulfo 89439636d8 Dialogs move by their title bar instead of staying pinned to the centre (fixes #1250) 2026-10-14 08:08:41 +02:00
RichardandClaude Opus 5.5 07f6fe0b0b Headers: mark hidden columns and rows, split cursor and double-click to unhide (#1247)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2bJ3LxrZ6YnmppgrfwHwr
2026-10-14 16:52:24 +11:00
Marco Arnulfo 736cc89b2b Opening an XLSX with a part over 512 MB says how to get the data in (fixes #1242) 2026-10-14 07:44:41 +02:00
Marco Arnulfo d1075c067b BAHTTEXT: a final one after the millions reads เอ็ด (fixes #1234) 2026-10-14 05:46:44 +02:00
allenyllee 938097f5b6 I1231: load Flatpak host fonts for native CJK fallback 2026-10-14 11:44:01 +08:00
Marco Arnulfo 9f11e26e78 Journal: cap by serialized size and keep a recording's start through trims (part of #1228) 2026-10-14 05:10:19 +02:00
Marco Arnulfo f519fd67f6 XLSX: keep a dxf's protection, font size and face, and the font parts it turns off (part of #1209) 2026-10-14 04:49:33 +02:00
RichardandClaude Opus 5.5 b5aacceb11 Sheet tabs: right-clicking a tab activates its sheet
As in Excel, a right-click on an inactive tab now activates that sheet, so
the tab menu's Protect/Unprotect Sheet and Select All Sheets act on the
sheet that was clicked rather than the one that was active.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A2bJ3LxrZ6YnmppgrfwHwr
2026-10-14 13:36:51 +11:00
Marco Arnulfo 3f520a3420 File: Save a Copy asks where to save a bare name instead of writing it to the working directory (fixes #1212) 2026-10-14 03:03:33 +02:00
Marco Arnulfo 5e5e131be7 Grid: an armed Format Painter pastes onto the next cells clicked or dragged (fixes #1211) 2026-10-14 03:03:28 +02:00
RichardandClaude Opus 5.5 d95908f4ba Ribbon tooltips show each platform's shortcuts (#1191)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 10:26:06 +11:00
RichardandClaude Opus 5.5 c74e1a4d99 fix(ui): menu items highlight under the pointer (#1174)
The cell and header right-click menus, the ribbon dropdown menus and the data
validation pick list drew their items with Button::frame(false), which turns
the background off in every state, hover included. frame_when_inactive(false)
keeps them flat at rest and shows the hover background, as Excel's menus do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 09:29:01 +11:00
vangel76andClaude Sonnet 5.5 48696f9bcf XLSX: [Content_Types].xml is the first zip entry, workbook parts precede document properties (#1090)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 21:44:20 +02:00
vangel76andClaude Sonnet 5.5 568dd58264 Charts: a huge trendline forecast no longer collapses the chart (#1148)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 21:13:05 +02:00
vangel76andClaude Sonnet 5.5 1539500b7f Conditional formats: statistics only for rules that read them, borrowed not cloned per cell (#1098)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-13 20:11:02 +02:00
MarekSpodBiedry a0b96d9920 Size the list validation dropdown to up to 8 rows (#1089) 2026-10-13 18:08:45 +02:00
MarekSpodBiedry 2effccc26c fix(ui): commit a pointed formula on the sheet it was started on (#996) 2026-10-13 18:07:23 +02:00
MarekSpodBiedry 71437f23b1 Fix table without header: re-point references when the data moves down (#1030) 2026-10-13 18:06:31 +02:00
MarekSpodBiedry e440c8bdc9 Read date text arguments in the workbook date system (#1038) 2026-10-13 18:06:29 +02:00
MarekSpodBiedry a091fd9b50 CSV export: check the size cap before each field, not after the row (#1023) 2026-10-13 18:05:34 +02:00
MarekSpodBiedry 2c8ff394cc Refuse a cut-paste whose destination does not fit instead of dropping cells (#997) 2026-10-13 18:04:55 +02:00
MarekSpodBiedry 3580a72c0d Respect workbook structure protection in sheet rename, move, copy, hide and unhide (#1049) 2026-10-13 18:04:32 +02:00
MarekSpodBiedry 66be0a8646 Open notice: do not promise to keep macros that were dropped (#1024) 2026-10-13 18:04:22 +02:00
MarekSpodBiedry 8939e7817f Fix xlsx: combine escaped UTF-16 surrogate pairs when decoding strings (#1025) 2026-10-13 18:04:09 +02:00
MarekSpodBiedry 01032e9010 Cap CSV import fields per record at the worksheet column limit (#1037) 2026-10-13 18:03:54 +02:00
MarekSpodBiedry 29c38887de Keep chart cache point positions when a reference has blank edges (#1015) 2026-10-13 18:03:44 +02:00
MarekSpodBiedry 08902d925a xlsx: keep the first group's series kind when importing a combination chart (#1014) 2026-10-13 18:03:35 +02:00
MarekSpodBiedry caa9fd0f48 Fix row keys merging distinct text rows in UNIQUE and grouping (#1012) 2026-10-13 18:02:34 +02:00
jonathanwxh-cell 18092672ee #701: integrate hidden-sheet navigation with current main 2026-10-14 00:01:18 +08:00
ZaxaerithandCodex 2b53301092 fix(grid): keep cursor stable during cell dragging (#936)
Co-Authored-By: Codex <noreply@openai.com>
2026-10-13 23:14:56 +08:00
mbielski1337 694809d6c5 i18n: register Polish (pl) language 2026-10-13 17:02:21 +02:00
mbielski1337 5effeea8fc i18n: add Polish translation table 2026-10-13 17:01:15 +02:00
Lexx143andClaude Fable 5.1 209d2447d9 Charts: multi-level category axes, read, drawn and written back
A category range two or more columns wide beside a column of values (year beside month, Excel's
multiLvlStrRef) was read as one flat list: 36 rows in two columns became 72 categories, the
series sat in the left half of the plot and the years and months shared one row of labels.
Saving wrote the range as a plain strRef, so Excel lost the two-level axis too.

- gridcraft_core::category_levels: the shape of a category range beside its values (levels are
  columns when the points run down the rows, rows when they run along the columns; up to three
  outer levels), shared by the chart and xlsx crates.
- ChartData.category_levels: the outer levels, nearest the labels first, one entry per category,
  non-empty where a group starts. resolve fills it; a single column is unchanged.
- render: the outer levels in rows under the labels, a group's name centred under its categories
  with a separator at each boundary; in bar charts in columns beside the labels.
- xlsx: <c:cat> written as multiLvlStrRef with the level caches (innermost first), so the axis
  survives a round trip.

Tests in core (shapes), chart (resolve and layout for columns, bars and a row of values) and
xlsx (written XML, read-back, stability, a single column stays strRef). chart-parity, gaps § 4
and the ROADMAP progress log updated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-13 17:30:01 +03:00
scottcampbelldata 00fb1147c3 Fix PR 451: integrate main and validate existing behavior 2026-10-13 10:03:52 -04:00
NetterSilver d3cc40ca20 Colour menus: More Colors… and Recent Colors (#928)
The palette every colour menu shares ends with the custom colours last used
(Recent Colors, newest first, ten at most, each once) and a More Colors… button
that opens a picker in the menu: the saturation/value area with its hue bar, egui's
red-green-blue boxes, a hex box (#RRGGBB, RRGGBB, #RGB) with the new colour beside
it, OK and Cancel. OK applies the colour like a swatch and remembers it.

The ribbon's Fill Color and Font Color menus close only on a click outside them or
after a pick, so the picker stays open while it is used; the Format Cells pickers
show it inline. The tab-colour and chart-series menus are sub-menus that close on
any click inside, so they show Recent Colors but not the picker.
2026-10-13 16:02:06 +02:00
Marco Arnulfo 2d0a7a1e42 Ribbon: more currency symbols in the Accounting Number Format menu (fixes #1063) 2026-10-13 14:48:32 +02:00