Excel-Dateien: keine Sackgasse mehr im Auswahlfenster
Filipe: "wenn ich auf screen1 druecke geht mein ordner auf aber meine
excel datei kann ich nicht auswaehlen wieso??"
Im Feld stand accept=".csv,text/csv,text/plain". Die .xlsx war damit
ausgegraut -- ohne ein Wort dazu. Eine Sackgasse ohne Wegweiser ist
schlimmer als eine Absage mit Begruendung: Man sucht den Fehler bei
sich.
WARUM SIE NICHT EINFACH GELESEN WIRD: Der Leser dahinter (csvZerlegen)
versteht Text -- Komma, Semikolon, Tabulator. Eine .xlsx ist in
Wahrheit ein ZIP-Archiv. Als Text gelesen ergibt sie Zeichensalat, und
der schlimmste Ausgang waere nicht "geht nicht", sondern eine Vorschau
mit Zahlen aus dem Dateikopf. Das Feld einfach zu oeffnen, ohne den
Fall zu behandeln, haette aus einer klaren Sperre einen unklaren
Fehlschlag gemacht.
Jetzt laesst sich jede Datei waehlen, und WAS sie ist, sagt der INHALT
-- die ersten Bytes, nicht die Endung. Eine umbenannte Datei ist keine
andere Datei. .xlsx beginnt mit "PK" (ZIP), die alte .xls mit dem
OLE-Kennzeichen D0 CF 11 E0.
Und dann steht da, was stattdessen zu tun ist, mit ZWEI Wegen:
1. In Excel markieren, Strg+C, und den Knopf "Backstage-Tabelle
einfuegen" nehmen -- der versteht TAB-getrennte Zeilen, also genau
das, was beim Kopieren aus Excel in der Zwischenablage liegt. Das
geht sofort und ohne Umspeichern.
2. Oder in Excel als "CSV UTF-8" speichern.
Der erste Weg funktionierte schon vorher -- er stand nur nirgends.
Nebenbei: Eine leere Datei meldet jetzt "Die Datei ist leer" statt
durch die Vorschau zu laufen, und eine abgewiesene Datei bleibt nicht
im Feld stehen.
pruef-backstage-import 66 -> 72. Geprueft wird an einem echten
ZIP-Kopf, nicht an der Endung: Die Testdatei heisst .xlsx UND traegt
das Kennzeichen -- eine Pruefung ueber den Namen waere gruen, ohne die
Erkennung je zu beruehren. Mit Gegenprobe, dass eine echte CSV
denselben Weg weiterhin durchlaeuft; sonst hiesse das nur, dass gar
nichts mehr eingelesen wird.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -397,6 +397,65 @@ console.log("\n=== Die Seite ===");
|
||||
ok(/Backstage/.test(netzSatz),
|
||||
"unter den Knöpfen steht dauerhaft, woher die Zahlen kommen");
|
||||
|
||||
/* ---- EINE EXCEL-DATEI IST EINE SACKGASSE MIT WEGWEISER ----------
|
||||
Filipe: "meine excel datei kann ich nicht auswaehlen wieso??"
|
||||
|
||||
Sie liess sich nicht einmal AUSWAEHLEN -- ausgegraut, ohne ein
|
||||
Wort dazu. Jetzt laesst sie sich waehlen und bekommt eine Antwort,
|
||||
die weiterhilft.
|
||||
|
||||
GEPRUEFT WIRD AN EINEM ECHTEN ZIP-KOPF ("PK"), denn genau das ist
|
||||
eine .xlsx. Die Erkennung haengt am INHALT, nicht an der Endung --
|
||||
deshalb heisst die Testdatei hier bewusst ".xlsx" UND traegt den
|
||||
richtigen Kopf; eine Pruefung ueber die Endung waere gruen, ohne
|
||||
die Erkennung je zu beruehren. */
|
||||
await seite.click("#import-oeffnen");
|
||||
await seite.waitForTimeout(300);
|
||||
await seite.setInputFiles("#datei", {
|
||||
name: "backstage.xlsx",
|
||||
mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
buffer: Buffer.from([0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x06, 0x00, 0x08, 0x00]),
|
||||
});
|
||||
await seite.waitForTimeout(600);
|
||||
const xlsx = await seite.evaluate(() => ({
|
||||
text: document.getElementById("import-fehler")?.textContent || "",
|
||||
vorschau: document.getElementById("vorschau")?.hidden,
|
||||
los: document.getElementById("import-los")?.disabled,
|
||||
feld: document.getElementById("datei")?.value || "",
|
||||
}));
|
||||
ok(/Excel/.test(xlsx.text), `es steht da, dass es eine Excel-Datei ist (${xlsx.text.slice(0, 50)}…)`);
|
||||
ok(/Backstage-Tabelle einfügen/.test(xlsx.text),
|
||||
"und welcher Knopf stattdessen hilft");
|
||||
ok(/CSV/.test(xlsx.text), "und wie man sie umspeichert");
|
||||
ok(xlsx.vorschau === true && xlsx.los === true,
|
||||
"es entsteht KEINE Vorschau und der Übernehmen-Knopf bleibt gesperrt");
|
||||
ok(xlsx.feld === "",
|
||||
"und das Feld ist wieder leer -- eine Datei, die nicht geht, bleibt nicht stehen");
|
||||
if (process.env.SCHIRM) {
|
||||
await seite.locator("#import-dialog").screenshot(
|
||||
{ path: join(HIER, "pruef-import-excel.png") });
|
||||
}
|
||||
|
||||
/* GEGENPROBE: Eine echte Text-Tabelle geht durch denselben Weg
|
||||
weiterhin hindurch. Sonst hiesse das oben nur, dass gar nichts
|
||||
mehr eingelesen wird. */
|
||||
await seite.setInputFiles("#datei", {
|
||||
name: "tage.csv",
|
||||
mimeType: "text/csv",
|
||||
buffer: Buffer.from(`Datum;Diamanten;LIVE-Dauer (Minuten)
|
||||
${gestern};1234;90
|
||||
`, "utf8"),
|
||||
});
|
||||
await seite.waitForTimeout(900);
|
||||
const csv = await seite.evaluate(() => ({
|
||||
fehler: document.getElementById("import-fehler")?.textContent || "",
|
||||
vorschau: document.getElementById("vorschau")?.hidden,
|
||||
}));
|
||||
ok(csv.vorschau === false && !/Excel/.test(csv.fehler),
|
||||
`eine CSV kommt weiterhin durch (Vorschau da: ${csv.vorschau === false})`);
|
||||
await seite.click("#import-zu");
|
||||
await seite.waitForTimeout(250);
|
||||
|
||||
/* ---- DER WEG UEBER DIE TIKTOK-DATEI IST WEG (11.09.2026) --------
|
||||
Filipe: "ich will keine daten von denen kriegen, nur wir."
|
||||
|
||||
|
||||
Reference in New Issue
Block a user