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:
@@ -456,6 +456,41 @@
|
||||
$('vorschau').hidden = true;
|
||||
$('import-los').disabled = true;
|
||||
|
||||
/* WAS IST DAS UEBERHAUPT FUER EINE DATEI? (11.09.2026)
|
||||
|
||||
Filipe: "meine excel datei kann ich nicht auswaehlen wieso??"
|
||||
|
||||
Bis heute stand im Auswahlfeld nur `.csv` -- eine .xlsx war
|
||||
ausgegraut, ohne ein Wort dazu. Eine Sackgasse ohne Wegweiser
|
||||
ist schlimmer als eine Absage mit Begruendung: Man sucht den
|
||||
Fehler bei sich.
|
||||
|
||||
Jetzt laesst sich jede Datei waehlen, und WAS sie ist, sagt der
|
||||
INHALT -- nicht die Endung. Eine umbenannte Datei ist keine
|
||||
andere Datei. Eine .xlsx ist in Wahrheit ein ZIP-Archiv und
|
||||
beginnt mit "PK"; die alte .xls beginnt mit dem
|
||||
OLE-Kennzeichen D0 CF 11 E0.
|
||||
|
||||
WARUM WIR SIE NICHT EINFACH LESEN: Der Leser dahinter versteht
|
||||
Text (Komma, Semikolon, Tabulator). Ein ZIP-Archiv als Text
|
||||
gelesen ergibt Zeichensalat -- und der schlimmste Ausgang waere
|
||||
nicht "geht nicht", sondern eine Vorschau mit Zahlen, die
|
||||
irgendwo aus dem Dateikopf stammen. */
|
||||
const anfang = new Uint8Array(await datei.slice(0, 8).arrayBuffer());
|
||||
const beginnt = (...b) => b.every((x, i) => anfang[i] === x);
|
||||
if (beginnt(0x50, 0x4b) || beginnt(0xd0, 0xcf, 0x11, 0xe0)) {
|
||||
$('import-fehler').innerHTML =
|
||||
'Das ist eine <strong>Excel-Datei</strong>. Hier passt eine Text-Tabelle '
|
||||
+ '(CSV) hinein. Zwei Wege, beide dauern keine Minute:<br>'
|
||||
+ '<strong>1.</strong> In Excel alles markieren (Strg+A), kopieren (Strg+C) – '
|
||||
+ 'und statt hier den Knopf <strong>„Backstage-Tabelle einfügen"</strong> nehmen. '
|
||||
+ 'Dort einfügen, fertig.<br>'
|
||||
+ '<strong>2.</strong> Oder in Excel: <em>Datei → Speichern unter</em> und als '
|
||||
+ 'Dateityp <em>CSV UTF-8 (durch Trennzeichen getrennt)</em> wählen.';
|
||||
$('datei').value = '';
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
importText = await datei.text();
|
||||
} catch {
|
||||
@@ -463,6 +498,13 @@
|
||||
return;
|
||||
}
|
||||
|
||||
/* Eine leere Datei ist kein Lesefehler, sieht aber wie einer aus. */
|
||||
if (!importText.trim()) {
|
||||
$('import-fehler').textContent = 'Die Datei ist leer.';
|
||||
$('datei').value = '';
|
||||
return;
|
||||
}
|
||||
|
||||
/* ERST DIE VORSCHAU. Ein Import, der sofort schreibt, ist bei
|
||||
einer falsch zugeordneten Spalte nicht mehr zurückzuholen. */
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user