Dieser Beitrag ist schon älter. Bitte vergewissern Sie sich, dass die Rahmenbedingungen oder der enthaltene Lösungsvorschlag noch dem aktuellen Stand der Technik entspricht.

Mit einer Batch eine Excel Tabelle auslesen.

Mitglied: Hummel85
Hallo,

ich hab schon wieder die nächste Frage zu einer Batch. Ist es möglich bestimmte bereiche aus einer Excel Tabelle mittels batch auszulesen? Also nur zur Info für euch. Ich habe eine Excel Tabelle( es sind immer verschiedene aber der Aufbau an sich ist immer gleich). Will dort einige Daten auslesen die ich dann weiter verarbeiten kann.

Vielen Dank im Voraus.

Content-Key: 32784

Url: https://administrator.de/contentid/32784

Ausgedruckt am: 30.11.2021 um 08:11 Uhr

Mitglied: gogoflash
gogoflash 18.05.2006 um 13:15:45 Uhr
Goto Top
Hi,

mit Excel wirds schwierig, aber als *.csv Datei. Sollte es gehen. Excel bietet das Format an.Spalten werden dann mit Semikon getrennt.
Oder *.prn

Schau Dir mal beides an.


Gruß Miguel
Mitglied: Hummel85
Hummel85 18.05.2006 um 13:41:16 Uhr
Goto Top
Hi gogoflash,

vielen dank für die schnelle Antwort war vor allem sehr hilfreich. also mit *.csv kann ich schon was anfangen aber mit *.prn leider nicht. Aber eines reicht ja auch. Jetzt brauch ich nur noch eine Möglichkeit bestimmte bereiche aus dieser *.csv( ist ja nicht mehr als eine Textdatei) auszulesen und in meine Batch zu übertragen.

Vielen dank noch mal. Wenn jemand ein schnellen weg kennt wie ich die Daten aus der *.csv auszulesen, kann das hier gleich Posten.
Mitglied: gogoflash
gogoflash 18.05.2006 um 13:43:21 Uhr
Goto Top
Hi,

dann musst Du schon sagen, wie zu auf die einzelnen Bereiche zugreifen willst.
Suchen nach Stichwörtern. In Zeile oder Spalte gehen?

Sag mal wie Du es Dir vorstellst.

Als Beispiel:
Für eine Tabelle mit 7 Spalten getrennt durch Semikolons (Auswertung ab der 2 Zeile)

for /f "skip=2 tokens=1,2,3,4,5,6,7 delims=;" %%a in (p.csv) do echo %%a >> excel.txt

Der Inhalt der ersten Spalte wird ausgelesen.

[EDIT: Ed geht auch
for /f "skip=2 tokens=1-7 delims=;" %%a in (p.csv) do echo %%a >> excel.txt

Nur für die erste Spalte
for /f "skip=2 tokens=1 delims=;" %%a in (p.csv) do echo %%a >> excel.txt

]


Gruß Miguel
Mitglied: Hummel85
Hummel85 18.05.2006 um 14:11:48 Uhr
Goto Top
Sorry habe ich vergessen.

Also die Excel Tabelle exestiert schon muss aber noch umgebaut werden.

Ich habe mir das so vorgestellt.

14 Spalten( brauche aber nur 10 Spalten auslesen)
Anzahl der Zeilen kann variieren.( Aber 3 Zeilen gehören immer zusammen die ersten beiden Spalten gehören zu allen 3 Zeilen und die anderen 8 sind unterschiedlich kommen aber nicht Doppelt vor.)

1 2 3 4 5 6 7 8 9 10
* * *
* * * * *
* * * *

Also das ist ein Beispiel.

Die Infos in Spalte 1 & 2 sind immer Identisch ( bei den 3 zusammen hängenden zeilen)
Die restlichen sind immer individuell aber kommen niemals doppelt vor kann aber sein das überhaupt keiner ausgefüllt ist..

Ich hoffe das hilft dir weiter.
Mitglied: gogoflash
gogoflash 18.05.2006 um 14:26:59 Uhr
Goto Top
Hi,

mach es mal etwas konkreter. Du hast jetzt die Tabelle dargestellt. Wie soll es am Ende aussehen.

Etwas plastischer wäre nicht schlecht.


Gruß Miguel
Mitglied: gogoflash
gogoflash 18.05.2006 um 15:15:17 Uhr
Goto Top
Hi,

jetzt hab ich glaub ich gerafft. Wenn Du nachdem die 3er Gruppen ausgewertet wurden (gehören ja zusammen). Soll eine Aktion durchgeführt werden, dann auslesen der nächsten Dreiergruppen bis zum Ende ?


REM Achtung erste Zeile wird nicht ausgelesen, dort können die Tabelleninfos stehen
set /A "skip=1"

:main
set /A "zahl=0"
REM Beginn der für die 3erGruppen wird mit %Skip verschoben

for /f "skip=%skip% tokens=3,4,5,6,7,8,9,10 delims=;" %%a in (p.csv) do call :sub %%a %%b %%c %%d %%e %%f %%g %%h
:goto :eof

:sub

REM Wenn 3er Gruppe ausgewertet wird eine Aktion durchgeführt.
REM Hier eine Info in die Excel.txt

IF %Zahl%==3 goto :bofif
goto :eofif
:bofif

REM mach Irgendwas
echo 3er Gruppe zuende >> excel.txt
goto :main
:eofif

REM Hochzählen
set /A "Zahl+=1"
set /A "skip=skip+Zahl"

echo %1 >> excel.txt

:eof


Ist in erster Näherung zusammengeschrottet, aber als Denkansatz....


Gruß Miguel
Mitglied: Hummel85
Hummel85 19.05.2006 um 07:05:19 Uhr
Goto Top
Guten Morgen gogoflash,

Danke für deine Hilfe. War sehr Hilfreich. Nur es funktioniert noch nicht so ganz( ich weiß sollte nur ein Denkansatz sein aber vielleicht hilfst du mir ja weiter).

Da ich bis jetzt noch nicht mit Schleifen gearbeitet habe( konnte mich jetzt davor drücken) weiß ich leider nicht wie ich die Schleife bearbeiten soll um zum gewünschten Ergebnisse zu kommen.

Hier noch ein paar Infos.

Meine p.csv sieht so aus( mit einem Texteditor geöffnet)

"SW
Typ";"SW-
Art";GS1;"GS2/
LS2";LS3;LS4;LS5;LS6;LS7;LS8
3;30;;;ge/bli;;;;;
;;;;;;gn/bli;;;
;;;;;;;;rt/bli;

Was ich daraus brauche ist.

3
30
ge/bli
gn/bli
rt/bli

Meine Textdatei soll so aussehen:

Typ 3
[Signal_1_Art_30]
ge/bli

[Signal_2_Art_30]
gn/bli

[Signal_3_Art_30]
rt/bli


Also Typ(3) ist klar.
Art(30) ist auch klar.
Farbe(rt/bli z.b.) ist denk ich mal auch klar.
Was ich auch noch brauche ist halt Signal.

Was ich vor allem mal brauch ist ein Tutorial wo Schleifen gut beschrieben sind. Wenn mir das noch jemand geben kann ist mein Tag gerettet.
Mitglied: gogoflash
gogoflash 20.05.2006 um 16:11:02 Uhr
Goto Top
Hi,


erstmal Teilantworten bis am Ende, ein Vorschlag von mir steht.

1) Signal_1 usw werden doch nur hochgezählt oder.

Erzeugt in test.txt

signal_1
signal_2
signal_3

2)

erzeugt:
Typ 3
[Signal_1_Art_30]
[Signal_2_Art_30]
[Signal_3_Art_30]


3) Jetzt kommt es:

Innerhalb der Hochzählschleife, wird mit findstr (ge/bli; gn/bli; rt/bli) gesucht. findstr /N gibt die Zeilenzahl an, getrennt mit Doppelpunkt (ZB 5:) face-smile.
Durch das Hochzählen in der For Schleife wird %zahl% definiert. Diese legt fest welche Zeile zu betrachten ist, stimmt diese Zahl mit dem Überein, was findstr gefunden hat, wird entsprechend ge/bli usw ausgegeben. Es funktioniert auch dann noch wenn zb ge/bli doppelt vorkommt.
Die Spaltenzahl ist hier nicht wichtig, da über findstr durchgeschliffen. Das macht die Sache viel einfacher, da wir nicht mehr mit Spalten arbeiten müssen.
findstr /N "ge/bli" plt.txt' gibt mir die Zeilenzahl in der ge/bli vorkommt. Damit nicht die erstbeste ge/bli genommen wird (kann ja mehrmals vorkommen), wird %zahl% benötigt.

4) Alles Zusammen (es kommt noch schlimmer unter 6):


Erzeugt:
Typ 3
[Signal_1_Art_30]
ge/bli
[Signal_2_Art_30]
gn/bli
[Signal_3_Art_30]
rt/bli

5) Jetzt die Übelste Variante, die Tabelle enthält mehr Typen (1-3 zb)

Sei die Tabelle in der Form


dann ergibt sich:


6) Entfassung Batch:
- Für einen Haufen Typen egal ob sie exisiteren oder nicht. Sie werden dann nicht ausgegeben.
Dafür %test% Variable definiert und test, ob Typ vorhanden.
more +%heradera% %datei% sorgt, dafür das der Kopf der Tabelle irgnoriert wird.
for /F "tokens=1,2 delims=;" %%a in ('more +%headera% %datei%^|find "%1;"') Do set /A "test=%%a" && set Art=%%b
if not %test%==%1 goto :eff

- Es können mehrere Farbwerte pro Zeile vorkommen (rt/bli;ge/bli)

- Spaltenposition für Farbwerte egal


Gruß Miguel
Mitglied: Biber
Biber 20.05.2006 um 21:01:01 Uhr
Goto Top
Moin Hummel85 und Miguel,

kann mich hier aufs Mitlesen beschränken - ist alles in guten Händen, denke ich.
Nur als kleine handwerkliche Tipps (zum vorletzten Schnipsel):

Hier ginge es ohne Sub


@Hummel85
Kann denn immer nur genau EIN Farbwert pro Zeile auftauchen? Und ist die Spaltenposition unwichtig?

Gruß
Biber
Mitglied: Hummel85
Hummel85 22.05.2006 um 10:13:57 Uhr
Goto Top
Guten Morgen,

erstmal vielen dank für die Hilfreichen Antworten.

An gogoflash: Werde die Batch im laufe des Tages testen. Vielen dank schon mal.

An Biber: Es kann nur ein Farbwert pro Zeile geben(rt oder gn oder rt/bli [steht für blinkendes rot Signal]). Und die Spalten Position ist genau so wichtig wie die Zeilen Position.

Die Spalte gibt an welchen LS( Lampenschalter) wir benutzen, und die Zeile gibt an welches Signal das ist[ gilt aber nur innerhalb der dreier Gruppe]. Es kann aber auch sein das nur 1 Signal existiert. Dann steht da natürlich nix.

Gruß Hummel

P.S. Ich melde mich im laufe des Tages wegen der Batch.
Mitglied: gogoflash
gogoflash 22.05.2006, aktualisiert am 18.10.2012 um 17:56:55 Uhr
Goto Top
Hi,

ich bastle gerade an einem Tutorial rum, darin ist die Suche nach Elementen und ausgabe von SPalten und Zeilen enthalten.

https://www.administrator.de/wissen/in-tabellen-rumrechnen-mittels-batch ...

Und ausserdem wäre eine Zuordung von Spaltenzahl und Signalnummer nicht schlecht.


Gruß Miguel
Mitglied: Hummel85
Hummel85 23.05.2006 um 09:05:03 Uhr
Goto Top
Guten Morgen,

Ja das Tutorial sieht nicht schlecht aus. Werde ich mir mal bei gelegenheit durchlesen.

Und zu dem 2. Punkt

"Und ausserdem wäre eine Zuordung von Spaltenzahl und Signalnummer nicht schlecht."

Wie soll ich das verstehen? Was soll ich dir den jetzt schreiben?
Mitglied: Hummel85
Hummel85 30.05.2006 um 13:17:30 Uhr
Goto Top
Hallo Miguel,


ich habe gerade deine Batch ausprobiert.
Leider muss ich sagen das sie mich dem Ziel nur ein wenig näher bringt.

So wie ich das gelesen habe Funktioniert diese Batch nur mit den 3 Farben( ge/bli, rt/gli und gn/bli). Und das erweitern auf alle Farben ist nahezu unmöglich weil es nicht nur Farben sein können sondern auch Buchstaben und so.

Doch nach dem Testen der nächste schock. Sobald ich was an der Tabelle (plt.txt) ändere geht nichts mehr. Die Batch erstellt nicht einmal die Test.txt.

Ich habe die Excel Tabelle ein wenig verändert.
Leider habe ich wenig Zeit um die Batch selber anzupassen. Und außerdem sind mir da wieder zu viele schleifen drin womit ich wieder nicht klar komme. Wäre also nett wenn du mir die Batch anpassen kannst.


Inhalt der plt.txt

Typ ;Art;LS1;LS2;LS3;LS4;LS5;LS6;LS7;LS8
2;1;rt;;gn;vi;;;;
;;;rt;;;gn;;;
;;;;;;;vi;;
2;2;rt;;gn;vi;;;D;
;;;rt;;;gn;;;D
;;;;;;;vi;;
2;3;rt;;;vi;;;D;
;;;;;;;;;M
;;;;gn;;;;;



Vielen dank im Voraus.

Gruß Hummel
Mitglied: gogoflash
gogoflash 30.05.2006 um 14:35:19 Uhr
Goto Top
Hi,

nachdem das Problem immer etwas komplexer wird bzw ständig modifiziert wird,sollten wir uns eine Strategie ausdenken.
Ist nun die letzte plt.txt die Entgültige Fassung?
Wie soll es am Ende aussehen?
Wieso ist jetzt vorne bei "Art" immer das gleiche ?
Jetzt sind auf einmal mehrere Farben in einer Zeile. rt vi D ????

Du solltest deine Fragestellung nicht ständig ändern. Das führt dazu, dass das Skript nicht brachbar ist und eigentlich von Grund auf neu konzipiert werden sollte.

So kann ich auch nicht arbeiten. Sorry.

Aufgabenstellung genauer stellen....

Gruß Miguel
Mitglied: Hummel85
Hummel85 31.05.2006 um 07:05:24 Uhr
Goto Top
Morgen Miguel,

Also die plt.txt sieht ständig anderes aus.
Aber vom Aufbau an sich ändert sich nichts.
Nur der Inhalt.

Ich Schreibe dir einfach unter die Zeile in der plt.txt was in den einzelnen Dateien stehen soll.
(Rot ist der Inhalt der in der INI Datei stehen soll)
Typ ;Art;LS1;LS2;LS3;LS4;LS5;LS6;LS7;LS8
2;1;rt;;gn;vi;;;;
[Signal_2_art1]
LS1=rt
LS3=gn
LS4=vi

;;;rt;;;gn;;;
[Signal_2_art1]
LS2=rt
LS5=gn

;;;;;;;vi;;
[Signal_2_art1]
LS6=vi

2;2;rt;;gn;vi;;;D;
[Signal_2_art2]
LS1=rt
LS3=gn
LS4=vi
LS7=D

;;;rt;;;gn;;;D
[Signal_2_art2]
LS2=rt
LS5=gn
LS8=D

;;;;;;;vi;;
[Signal_2_art2]
LS6=vi

2;3;rt;;;vi;;;D;
[Signal_2_art3]
LS1=rt
LS4=vi
LS7=D

;;;;;;;;;M
[Signal_2_art3]
LS8=M

;;;;gn;;;;;
[Signal_2_art3]
LS3=gn


Um das Ganze aber noch Komplett zu machen. Brauch ich das Ganze nicht in einer INI Datei sondern in 3.

Typ1.ini:
[Signal_2_art1]
LS1=rt
LS3=gn
LS4=vi

[Signal_2_art2]
LS1=rt
LS3=gn
LS4=vi
LS7=D

[Signal_2_art3]
LS1=rt
LS4=vi
LS7=D

Typ2.ini:
[Signal_2_art1]
LS2=rt
LS5=gn

[Signal_2_art2]
LS2=rt
LS5=gn
LS8=D

[Signal_2_art3]
LS8=M

Typ3.ini:
[Signal_2_art1]
LS6=vi

[Signal_2_art2]
LS6=vi

[Signal_2_art3]
LS3=gn


So zu deiner nächsten Frage. Bei Art Steht nicht immer das gleiche. ich denke mal du meinst bei Typ. Das ist aber nur Zufall.

Leider habe ich auch gemerkt dass ich bei einem Beitrag einen Großen Fehler gemacht habe. Aber jetzt ist es wirklich so wie es bleiben wird.

Ja das mehrere Farben in einer Zeile stehen können habe ich aber gesagt aber innerhalb der dreier Gruppe gibt es nur ein Eintrag pro Spalte. Also Pro LS kann es nur eine Farbe innerhalb einer dreier Gruppe geben. Doppelbelegung gibt es nicht.

Ich hoffe mit diesen Angaben kannst du mehr anfangen.


Und Entschuldige bitte dass ich so viel verändern musste.
Aber ich bekomme auch immer neu Infos. "Ich will das aber lieber so."
Darum habe ich einfach gesagt das es mir egal ist was die wollen ich erstelle mir einfach aus der Excel Tabelle mit einem Makro die Tabelle die ich brauch um die mit der Batch die INI Dateien zu generieren. Darum wird es keine weitere Veränderung der plt.txt geben außer der Inhalt(Farben, Art, Typ). Aber der Aufbau ist immer gleich. Also die Batch darf nicht auf Wörter reagieren sondern auf die Position in der plt.txt.


Danke schon mal im Voraus.
Mitglied: gogoflash
gogoflash 01.06.2006 um 01:14:30 Uhr
Goto Top
Hi,


ich hab auch nicht so die Zeit eine Vollständige Lösung zu präsentieren.
Aber wir werden uns, dass Ding mal von der anderen Seite betrachten.

Zum Verständnis der Schleifen.

Mal ganz Sprachlich für ein 3 Zeilen Modell.

----------------Sprach Batch
Für jede Zeile (1,2,3) mach folgendes:

Wenn Du in der ersten Zeile bist gehe zu Los1, sonst gehe zu Los2.

LOS1:
Lese von der ersten bis zur letzen Spalte die Werte aus.
Ignoriere unsinnige Werte (Leerzeichen oder keine Zeichen)
Folgende Regeln sind zu beachten:
i) In der Spalte 1 ist das Signal
In der Spalte 2 ist die Art
Diese sollte ich mir merken.
ii) Spalte 3=LS1
Spalte 4=LS2
Allgemein: Für n > 2 gilt Spalte n=LS(n-2)
iii) Typdatei wird durch Zeilennummer definiert.
Zeile 1 = Typ1 usw
iv) Ausspucken von Werten in die Typdatei, sowie die LS Werte untereinander.
ENDE von LOS1

LOS2:
Falls Zeile > 1.
Lese von der 3 bis zur letzen Spalte.
Führe Teile Los.ii) und Los.iii) sowie Los.iv) aus.
Die Werte und Los.i) sind ja schon gelesen worden.
ENDE von LOS2
----------------Sprach Batch


Dieses Modell braucht schon mal 2 Schleifen. Einmal für die Spalten und einmal für die Zeilen.

Ist das so richtig?

Später kann man ja die gesamte Datei damit durchhaun.


Gruß Miguel
Heiß diskutierte Beiträge
question
Adminpasswort löschenaleks08Vor 1 TagFrageWindows 712 Kommentare

Bei einem Kollegen hat jemand den Rechner eingerichtet und dabei ein Adminpasswort vergeben. Das Adminpasswort kennt er aber nicht und der Einrichter ist nicht mehr ...

question
Medienwandler für Glasfaser gelöst Reamer76Vor 1 TagFrageHardware9 Kommentare

Guten Tag liebe Admins, ich bräuchte mal Eure Hilfe für die Anschaffung eines Medienwandlers. Wir werden nächsten Monat freigeschaltet, Anbieter ist Wemacom. Ich habe die ...

question
Ethernet-LAN und DSL über Telefonkabel gelöst 150103Vor 1 TagFrageNetzwerke10 Kommentare

Hallo Administrator-Forum, ich habe hier ein ungewöhnliches Szenario, dass ich euch gerne näher bringen würde. Auf einem Grundstück gibt 2 Häuser (H1 und H2). Im ...

question
AD Server von 2012 R2 auf Server 2019 R2 hochgesetzt. Domänenlevel noch 2012 Aber nun geht kein LDAPS . LDAP geht gelöst itititVor 1 TagFrageWindows Server13 Kommentare

Hallo zusammen, wir haben die Server 2012 R2 mit Server 2019 R2 ersetzt. Neue Server kein Inplace. Die neuen DCs haben IP und Name gleich ...

question
Euro Zeichen geht nicht mehr gelöst GwaihirVor 21 StundenFrageWindows 1014 Kommentare

Hallo zusammen, bei einem User geht das Euro-Zeichen nicht mehr. Er kann es nur noch über Copy&Paste aus der Zeichentabelle einfügen. Auch STRG+ALT+E klappt nicht. ...

question
"Nicht identifiziertes Netzwerk" bei VPN VerbindungKatachi29Vor 1 TagFrageDSL, VDSL5 Kommentare

Hallo zusammen, ich habe seit einiger Zeit das Problem, dass, wenn ich mich daheim bei meinem Sophos SSL VPN Client anmelde, immer die Meldung: "Nicht ...

question
Bitlockerpartition versehentlich gelöscht Läppi findet nach Partitiosformatierung mbr gpt die Partition nicht wiederPCChaosVor 20 StundenFrageWindows 1010 Kommentare

Hallo zusammen, Ich habe ein riesen Problem, das mir sonst einfach erschien. Ich hatte eine Bitlocker Partition D: auf meinem C: Laufwerk installiert. Weil Windows ...

question
Dauernd gesperrter User in der ADChristianIT2021Vor 1 TagFrageWindows Server3 Kommentare

Hallo zusammen, Ich habe ein riesen Problem ich habe einen User der wird immer wieder gesperrt. Über die Eventlgs habe ich schon herausgefunden aus welcher ...