Alles aus der Excel-Datei -- und der Fund, der alles blockiert haette

Filipe: "ich will dass alles von der excel datei genommen wird.
perfektionnier das, aber wenn ich dir runter lade soll alles notiert
und angezeigt werden." Dazu eine echte Ausgabe als Vorlage.

DER SCHWERSTE FUND STECKTE VOR DEN DATEN, NICHT IN IHNEN.

Seine Ausgabe "Creator_innendaten" hat DREI Spalten, die nach Person
aussehen: "Creator*in-ID", "Creator*innen-Anmeldename" und "Agent".
`personSpaltenRaten` nahm die erste mit dem Wort "creator" darin --
die ID. Danach wurde nach einem Creator namens "700001" gesucht.
Nachgemessen an seiner echten Kopfzeile: handle = KEINE, name =
"Creator*in-ID". Diese Datei haette KEINE EINZIGE Zeile zugeordnet,
mit einem Hinweis ("steht bei keinem Creator im Feld TikTok"), der in
die voellig falsche Richtung zeigt.

Jetzt ist "Anmeldename" der Handle, eine Kennnummer ist fuer beide
Spalten ausgeschlossen, und "creator" allein reicht nicht mehr als
Namensspalte -- sonst haette weiter hinten "Neue*r LIVE-Creator*innen"
(Wert: "Nein") die Stelle uebernommen. An fuenf Kopfzeilen gemessen.

UND DANN: NICHTS FAELLT MEHR WEG.

41 Spalten in der Datei, acht werden gedeutet. Die restlichen 33 --
letzter Monat, fuenf Prozentwerte, Matches, Multi-Gast-LIVEs, Fanclub,
Graduierungs- und Stufenstatus -- wurden lautlos weggeworfen.

KEINE 33 NEUEN SPALTEN, sondern eine Zeile je Spalte mit dem NAMEN als
Schluessel. Eine abgeschriebene Spaltenliste hat in diesem Haus schon
zweimal Daten gekostet und waere beim naechsten Backstage-Update
falsch. Gegenprobe in der Pruefung: eine erfundene Spalte
("Sternenstaub pro Woche") kommt genauso durch -- es wird also keine
Liste gepflegt, die Datei entscheidet.

An SEINER echten Datei gemessen, ohne sie irgendwo hineinzuschreiben:
40 von 41 Spalten gespeichert (die 41. ist leer), Zeitraum 01.09.-
13.09. erkannt, 32 als Zahl, 8 als Text.

UND EIN MESSFEHLER, DER LEHRREICH IST: Meine erste Pruefung meldete
"zugeklappt ist die Liste 141 px hoch", im Bildschirmfoto war dort
nichts. An einem Miniaturfall nachgemessen: getBoundingClientRect,
offsetHeight, offsetParent und getClientRects liefern bei einem
<details> in BEIDEN Zustaenden identische Werte -- Chromium verbirgt
den Inhalt mit content-visibility:hidden, und das behaelt die letzte
Ausmessung. Nur checkVisibility() kann es unterscheiden. Die Messung
log, nicht die Seite.

pruef-backstage-import 160 (war 133), pruef-xlsx 75,
pruef-leistung-optik 59, pruef-leistung, pruef-css-klassen und
pruef-auskunft (46, DSGVO -- die neue Tabelle ist automatisch dabei,
weil die Auskunft ihre Liste aus PRAGMA foreign_key_list ableitet):
alle gruen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-16 01:46:07 +02:00
co-authored by Claude Opus 5
parent 984f0dd7a9
commit 8fc1ac7a7a
35 changed files with 999 additions and 369 deletions
+51 -1
View File
@@ -633,6 +633,7 @@
const teile = [];
if (r.geschrieben) teile.push(`${r.geschrieben} Tag${r.geschrieben === 1 ? '' : 'e'}`);
if (r.zeitraeume) teile.push(`${r.zeitraeume} Zeitraum${r.zeitraeume === 1 ? '' : 'e'}`);
if (r.felder) teile.push(`${r.felder} Werte aus der Datei`);
melde(teile.length ? `${teile.join(' und ')} übernommen.` : 'Nichts zu übernehmen.');
setTimeout(() => melde(''), 5000);
} catch { /* umgeleitet */ } finally { knopf.disabled = false; }
@@ -746,6 +747,38 @@
zeig('Neue Follower', z.follower_neu, zahl);
if (werte.children.length) karte.append(werte);
/* ---- UND ALLES ANDERE, WAS IN DER DATEI STAND (16.09.2026) ----
Filipe: "ich will dass alles von der excel datei genommen wird.
... wenn ich dir runter lade soll alles notiert und angezeigt
werden."
Seine Ausgabe hat 41 Spalten; oben stehen die sechs, die das
System deutet. Der Rest -- letzter Monat, fünf Prozentwerte,
Matches, Multi-Gast-LIVEs, Fanclub, Graduierungs- und
Stufenstatus -- steht hier, WÖRTLICH wie in der Datei.
IN DER REIHENFOLGE DER DATEI, nicht in einer eigenen: Backstage
gruppiert seine Spalten schon sinnvoll, und jede Ordnung, die
ich erfinde, ist beim nächsten Backstage-Update falsch.
ZUGEKLAPPT, ABER MIT DER ZAHL IM DECKEL. Achtunddreißig Zeilen
offen unter jedem Zeitraum wären die Karte nicht mehr lesbar --
und genau die Lesbarkeit war gestern sein Thema. Im Deckel
steht, wie viele es sind; damit sieht man ohne Öffnen, dass
nichts fehlt. */
if (Array.isArray(z.felder) && z.felder.length) {
const alles = el('details', 'spanne__alles');
alles.append(el('summary', 'spanne__alles-kopf',
`Alle ${z.felder.length} Werte aus Backstage`));
const liste = el('dl', 'spanne__alles-liste');
for (const f of z.felder) {
liste.append(el('dt', 'spanne__alles-name', f.name));
liste.append(el('dd', 'spanne__alles-wert', f.text));
}
alles.append(liste);
karte.append(alles);
}
ziel.append(karte);
}
}
@@ -873,6 +906,20 @@
zeile(`Erkannte Spalten: ${Object.keys(d.spalten).join(', ') || 'keine'}`
+ (d.aus_tabelle ? ' · Datum aus der Tabelle' : ' · Datum aus dem Feld oben'));
/* WAS MIT DEM REST PASSIERT -- und das ist seit dem 16.09. die
Zeile, auf die es Filipe ankommt: "ich will dass alles von der
excel datei genommen wird."
Die Zeile darueber nennt nur die ACHT Spalten, die das System
deutet. Seine echte Ausgabe hat 41. Ohne diese Zeile sieht es
aus, als fielen 33 davon weg -- sie werden aber vollstaendig
mitgeschrieben und stehen danach auf der Karte. */
if (d.spalten_gesamt) {
zeile(`Alle ${d.spalten_gesamt} Spalten der Datei werden übernommen`
+ (d.felder ? ` · ${d.felder} davon tragen einen Wert` : '')
+ ' · sie stehen danach unter „Alle Werte aus Backstage“', 'gut');
}
/* DIE UNBEKANNTEN SIND DER WICHTIGE TEIL. Wer sie übersieht, hat
stillschweigend Leute ausgelassen -- und merkt es erst, wenn die
Zahlen nicht stimmen. Deshalb stehen sie mit Namen da und nicht
@@ -889,7 +936,10 @@
}
for (const b of d.beispiele) {
const zahlen = Object.entries(b)
.filter(([k]) => !['creator_id', 'name', 'tag'].includes(k))
/* `felder` ist eine LISTE und gehoert nicht in diese Zeile --
ohne diesen Ausschluss stand hier woertlich
"felder [object Object],[object Object]". */
.filter(([k]) => !['creator_id', 'name', 'tag', 'felder'].includes(k))
.filter(([, w]) => w !== null && w !== undefined)
.map(([k, w]) => `${k} ${w}`).join(' · ');
zeile(`${b.name} · ${b.tag} · ${zahlen}`, 'still');