Frage von Maisbaer78, 36

Teile eines Dateinamens oder Inhalte externer Variablen automatisch in Exceltabelle einfügen?

Ich habe ein kleines Batch File das beim Start einige Nutzerabfragen tätigt und damit eine Exceldatei öffnet und diese abhängig von einigen der Eingaben an bestimmten Orten und mit bestimmter Namensgebung speichert.

Die Dateinamen schlüsseln sich unter anderem in eine Versionsnummer, eine Kurzbeschreibung und einen Kommentar auf.

Weil mir weitergehende Kenntnisse in Excel fehlen, müssen nach dem automatischen öffnen der Datei noch einige Felder von Hand ausgefüllt werden, eben mit den 3 Schlüsselinformationen "Version" "Beschreibung" und "Kommentar".

Ich bin mir aber ziemlich sicher, dass es einen nicht all zu komplexen Weg geben muss, diese Felder auch automatisch aus dem dann schon kompletten Dateinamen oder den Variablen innerhalb der CMD-Instanz zu befüllen und diese auch entsprechend zu formatieren.

Nur zur Info, auf dem System ist es mir nicht gestattet, VBScripte auszuführen.

Vielen Dank.

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von daCypher, 23

Mit Cmd selbst kannst du soweit ich weiß nichts innerhalb einer Excel-Datei ändern. Außer den üblichen DOS-Befehlen und ein paar Variablenfunktionen kann das Ding quasi nichts.

Du kannst aber mit den Excel-Funktionen den Dateinamen der Excel auslesen. Der Übersicht halber zeig ich dir das mal in mehreren Schritten.

1. Den kompletten Namen des aktuellen Arbeitsblattes auslesen (in Zelle A1):
=ZELLE("Dateiname";$A$1)
Da sollte z.B. sowas wie "C:\meineDateien\[test.xlsx]Tabelle1" rauskommen.

2. Den Dateinamen extrahieren (in Zelle B1):
=TEIL(A1;FINDEN("[";A1)+1; FINDEN("]";A1)- FINDEN("[";A1)-2)
Da bleibt dann noch "test.xlsx" übrig

3. Die Informationen aus dem Dateinamen extrahieren. Da ich nicht weiß, wie deine Dateien heißen, müsstest du an der Stelle selbst was bauen.

Kommentar von Maisbaer78 ,

Danke, genau das habe ich gesucht, mir war nicht bewusst, das es so einfach zu lösen sein soll. Ich werde das morgen mal testweise umsetzen.

Kommentar von Maisbaer78 ,

Mh also mir erschliesst sich die Syntax der Aufschlüsselung soweit, ich bin mir nur nicht ganz sicher, wie die +1 und -1 vorallem aber die -2 zu deuten sind.  Damit ich sicher sein kann, das richtig zu interpretieren, wäre mir mit etwas mehr Info dazu geholfen. 

Ich sehe das so, dass die +1 den Teil nach der "]" in die Zelle schreibt, und die folgende -1 den Teil nach der "]" abschneidet. Allerdings bin ich mir nicht ganz sicher, was die -2 genau bewirkt.

Schneidet diese den String nach den folgenden 2 Teilen ab? Das wäre ja nur "Tabelle1" und sollte doch als ein String erkannt werden oder nicht?

Kann ich zb. auch nach Leerzeichen suchen? Oder den String von hinten an aufklamüsern?

Die korrekte Struktur einer Datei ohne Pfad wäre nämlich in etwa so..

0815 (6660815) Kommentar.XLS

die 0815 wäre die Version, die Zahl in Klammern(könnte aber auch ein Text oder gemischt sein, die Klammern wären aber immer da) ist die Beschreibung und der Kommentar ist der Kommentar....logisch irgendwie.

Zuhaus hab ich leider nur openoffice, das beherrscht die Klarsprache offensichtlich auch, aber gibt das Ergebnis etwas anders Strukturiert aus.

Ich werds wie gesagt morgen noch testen, aber falls da noch Ergänzungen vorzubringen sind, wär ich nicht abgeneigt. Nochmals danke.

Kommentar von Maisbaer78 ,

oh hab grad gesehen, dass ich mich verlesen habe, es gibt ja keine -1

Kommentar von daCypher ,

Hi, ich war gestern nicht mehr hier, deshalb antworte ich jetzt erst.

Um deine Fragen zu beantworten, nehme ich mal die Funktionen aus meinem zweiten Punkt auseinander:

=TEIL(A1;FINDEN("[";A1)+1; FINDEN("]";A1)- FINDEN("[";A1)-2)

Die Funktion "Teil" braucht drei Argumente: Der Text, aus dem was ausgeschnitten werden soll, die Position des ersten Zeichens, was ausgeschnitten werden soll und die Länge des Textes, der ausgeschnitten werden soll.

Die Funktion "Finden" braucht die zwei Argumente: Das Zeichen oder die Zeichenfolge, die gesucht werden soll und der Text, in dem das Zeichen vorkommt.

=TEIL(A1; ... aus dem Text, der in A1 steht, soll was ausgeschnitten werden.

... FINDEN("[";A1) +1; ... das erste Zeichen, was ausgeschnitten werden soll, ist eins nach der eckigen Klammer

danach muss die Länge berechnet werden (was ich immer ziemlich blöd finde, ich würde auch lieber einfach die Position des letzten Zeichens angeben können)

... FINDEN("]";A1) ... es wird also die Position der schließenden Klammer gesucht 

... - FINDEN("[";A1) ... davon wird die Position der öffnenden Klammer abgezogen. Dadurch hätten wir jetzt die Länge des Textes mit den beiden Klammern.

... -2) ... also muss noch 2 abgezogen werden, damit wir die Länge des Textes ohne die Klammern haben.

Nachher schreib ich dir noch, wie du den Beispielpfad auseinander kriegst.

Kommentar von daCypher ,

Hab grad gesehen, dass statt -2 doch -1 drinstehen muss. Oder wenn du das ".XLS" von vornherein weghaben willst, dann -5.

Also in A1 steht: =ZELLE("Dateiname";$A$1)
Ergebnis: C:\meineDateien\[0815 (6660815) Kommentar.XLS]Tabelle1

In B1 steht: =TEIL(A1;FINDEN("[";A1)+1; FINDEN("]";A1)- FINDEN("[";A1)-5)
Ergebnis: 0815 (6660815) Kommentar

Jetzt bleiben nur noch die drei Bereiche vor den Klammern, in den Klammern und hinter den Klammern übrig, die auseinander genommen werden müssen

C1: =LINKS(B1;FINDEN(" (";B1)-1)
Ergebnis: 0815
Das -1 muss rein, weil sonst das Leerzeichen auch mitkopiert wird. (Wir wollen alles kopieren, bis ein Zeichen vor dem Leerzeichen und der öffnenden Klammer)

D1: =TEIL(B1; FINDEN(" (";B1)+2; FINDEN(") ";B1)-FINDEN(" (";B1)-2)
Ergebnis: 6660815
Hier muss +2 bzw. -2 stehen, weil wir hier immer nach zwei Zeichen suchen (Leerzeichen + öffnende Klammer, bzw. schließende Klammer + Leerzeichen). Wie gesagt, das -2 in der ursprünglichen Antwort war nicht richtig.

E1: =RECHTS(B1;LÄNGE(B1)-FINDEN(") ";B1)-1)
Ergebnis: Kommentar
Man kann es auch mit "TEIL" machen, wie bei D1, aber ich will dir gerne mehrere Funktionen zeigen. Die Funktion "RECHTS" funktioniert ähnlich, wie die Funktion "LINKS", nur dass halt vom rechten Ende des Texts was kopiert wird. Die Funktion "LÄNGE" dürfte selbsterklärend sein, die gibt einfach die Länge des Texts in B1 an. Davon wird die Position der schließenden Klammer abgezogen und da nach der schließenden Klammer noch ein Leerzeichen kommt, muss noch ein -1 hinten ran.

Mit diesen -1 und +1 hab ich am Anfang einfach immer so lange rumprobiert, bis es gepasst hat. Mittlerweile hab ich ein Gefühl dafür, was wo abgeschnitten werden muss, aber wie du gesehen hast, hat sich bei mir ja auch ein fehlerhaftes -2 eingeschlichen, wo eigentlich ein -1 hingehört hätte.

Kommentar von Maisbaer78 ,

Danke, es hat ne Weile gedauert, bis ich das kapiert habe, ein "letztes Zeichen" gibt es nicht. Das ist ja kompliziert gemacht :(

Aber jetzt denke ich, ich hab es... vielen vielen Dank. Die Beispiele im Netz sind immer alle recht unpraktisch, weil eben auf solche variablen Wortlängen nicht eingegangen wird.

Kommentar von daCypher ,

Bitteschön, sehr gerne. Ja, dass es keine Funktion für "Von-Bis ausschneiden" gibt, finde ich auch schade. Das könnte man sich höchstens selbst mit VBA zusammenbasteln.

Expertenantwort
von DeeDee07, Community-Experte für Excel, 20

Mit der Formel

=ZELLE("Dateiname")

erhälst du den kompletten Pfad der Datei. Das funktioniert allerdings nur bei bereits gespeicherten Dateien, nicht bei neuen Dokumenten. Wenn die Dateinamen in feste Zeichenbreiten strukturiert ist, kannst du etwa so einen bestimmten Teil extrahieren:

=TEIL(ZELLE("Dateiname");20;10)

D. h: Gib aus dem Pfad beginnend beim 20. Zeichen die nächsten 10 Zeichen wider.

Falls du keine festen Zeichenbreiten hast, kannst du auch die Funktionen TEIL und FINDEN kombinieren. Vielleicht machst du mal ein oder zwei konkrete Beispiele, dann kann man dir genauer helfen.

Kommentar von Maisbaer78 ,

Vielen Dank für die rasche Antwort, ich bin leider erst morgen in der Lage das zu testen. Wenn ich auf Schwierigkeiten stoße, werde ich ein genaueres Beispiel erbringen. :) Vielen Dank.

Keine passende Antwort gefunden?

Fragen Sie die Community