Größenänderungs-Verhalten der Tabellenmodi vertauscht

Der SE-Griff-Effekt war genau falsch herum zugeordnet: "Automatisch"-
Tabellen (Größe folgt immer dem Inhalt) sollen beim Ziehen die Zeilen-/
Spaltenzahl ändern, "Feste Größe"-Tabellen (expliziter, unabhängig
wählbarer Scroll-Viewport) sollen unverändert nur den Pixel-Viewport
ändern.

- "Automatisch": Ziehen zeigt ein gestricheltes Vorschau-Rechteck (die
  eigentliche Zeilen-/Spaltenänderung ist teuer -- voller Workbook-Rebuild
  -- und committet daher erst beim Loslassen, nicht live). Wachsen fügt
  leere Zeilen/Spalten hinzu, Schrumpfen entfernt sie nie über echten
  Zellinhalt hinweg (gleicher Inhaltsschutz wie zuvor, nur am richtigen
  Modus).
- "Feste Größe": zurück auf reines Pixel-Viewport-Resize, unabhängig von
  der Zeilen-/Spaltenzahl -- das ursprüngliche Verhalten.
- Die dadurch tot gewordene alte "Automatisch"-Funktion (proportionale
  Spaltenbreiten-Skalierung beim Ziehen) entfernt (scaleTableColumns),
  keine andere Stelle rief sie noch auf.

vue-tsc/eslint/build sauber, Playwright-live-verifiziert (Automatisch:
Wachsen 12×8→19×11, hartes Schrumpfen klemmt auf 6×5 mit erhaltenem
Inhalt; Feste Größe: Zeilen-/Spaltenzahl bleibt bei Viewport-Resize
unverändert).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
wkh
2026-09-08 23:26:54 +02:00
co-authored by Claude Sonnet 5
parent 8a7fafcd7a
commit 3594b12615
3 changed files with 81 additions and 59 deletions
+17 -15
View File
@@ -32,20 +32,22 @@ scroll- und zoombare Fläche, die **Objekte** trägt:
eindeutig ist (siehe „Formelgrammatik" unten für Bezüge über mehrere Blätter
mit demselben Tabellennamen). Frei positionierbar (Ziehen an der
Kopfleiste). Zwei Darstellungen:
- **Automatisch** — so groß wie die Zellen, alle Zeilen sichtbar; der SE-Griff
skaliert die Spaltenbreiten proportional.
- **Feste Größe** — mit frei wählbarer Zahl **fixierter Kopfzeilen und
fixierter Spalten** (`position: sticky` gegen den Scroll-Container, falls
der Inhalt doch mal über die Boxgröße hinauswächst — etwa durch Tippen
über den Rand hinaus). Der SE-Griff zieht hier **direkt an Zeilen-/
Spaltenzahl**: Vergrößern fügt leere Zeilen/Spalten hinzu, Verkleinern
entfernt sie — aber **nie** über echten Zellinhalt hinweg. Beim Loslassen
wird auf die kleinste Größe geklemmt, die den vorhandenen Inhalt noch
vollständig zeigt; die Box passt sich exakt an (kein Leerraum, kein
Scrollen nötig, solange nicht direkt über die Boxgröße hinaus getippt
wird). Die Breiten-/Höhenfelder im Einstellungen-Panel (⚙, s. u.) bleiben
davon unabhängig — reine Pixelmaße, ohne Rückwirkung auf Zeilen-/
Spaltenzahl.
- **Automatisch** — so groß wie die Zellen, alle Zeilen sichtbar. Der
SE-Griff zieht hier **direkt an Zeilen-/Spaltenzahl**: Vergrößern fügt
leere Zeilen/Spalten hinzu, Verkleinern entfernt sie — aber **nie** über
echten Zellinhalt hinweg. Während des Ziehens zeigt ein gestricheltes
Vorschau-Rechteck die Zielgröße (die eigentliche Änderung ist teuer —
ein voller Neuaufbau der Engine — und committet daher erst beim
Loslassen, nicht bei jeder Mausbewegung); dann wird auf die kleinste
Größe geklemmt, die den vorhandenen Inhalt noch vollständig zeigt.
- **Feste Größe** — ein fester, unabhängig wählbarer **Pixel-Viewport**
mit frei wählbarer Zahl **fixierter Kopfzeilen und fixierter Spalten**
(`position: sticky` gegen den Scroll-Container) — für eine große
Tabelle, die nur einen kleinen Ausschnitt auf dem Canvas belegen soll,
mit internem Scrollen für den Rest. Der SE-Griff zieht hier **nur den
Viewport**, unabhängig von der Zeilen-/Spaltenzahl (die bleibt exakt wie
sie ist) — dieselben Breiten-/Höhenfelder im Einstellungen-Panel (⚙, s.
u.) steuern denselben Wert.
Spaltenbreite per Drag am Spaltenkopf (ab **24 px**), **Zeilenhöhe** per Drag
an der Unterkante des Zeilenkopfs (Standard + je Zeile).
- **Diagramm-Objekt** — Chart.js (Balken/Linie), frei positionier- **und**
@@ -1081,7 +1083,7 @@ Grundrechenarten: `Übersicht!B2 = =SUM(Umsatz!B2:E2)`, `D2 = =B2-C2`,
`OFFSET`/`INDEX`-Äquivalent — ein `#REF`, das aus einer gelöschten Zeile
entsteht, muss von Hand korrigiert werden, es gibt keine „nächstbeste
Zelle"-Heuristik.
- **Größenänderung einer „Feste Größe"-Tabelle** (SE-Griff → Zeilen-/
- **Größenänderung einer „Automatisch"-Tabelle** (SE-Griff → Zeilen-/
Spaltenzahl, s. o. „Das Canvas-Modell") ist rein UI-seitig (`CanvasObject.vue`)
implementiert, ohne eigene Unit-Tests — das Projekt hat (noch) kein
Komponenten-Test-Setup (z. B. Vue Test Utils), nur Engine-/Store-Tests.