Batch-Abfrage, ob bestimmte excel-Datei geöffnet ist und diese dann auch schließen (können)
Guten Abend!
In zahlreichen Foren habe ich nach einer Antwort gesucht, leider für mein Problem aber noch keine gefunden ...
Wie kann ich auslesen (Batch), ob eine bestimmte Excel-Datei geöffnet ist. Ist dies der Fall, dann soll sie (vom Batch) geschlossen werden können.
Die angebotenen Lösungen wurden immer in Excel selber durchgeführt, nicht aber in einem externen Batch, daher diese Fragestellung.
OKIDOKI
In zahlreichen Foren habe ich nach einer Antwort gesucht, leider für mein Problem aber noch keine gefunden ...
Wie kann ich auslesen (Batch), ob eine bestimmte Excel-Datei geöffnet ist. Ist dies der Fall, dann soll sie (vom Batch) geschlossen werden können.
Die angebotenen Lösungen wurden immer in Excel selber durchgeführt, nicht aber in einem externen Batch, daher diese Fragestellung.
OKIDOKI
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 181323
Url: https://administrator.de/contentid/181323
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
21 Kommentare
Neuester Kommentar
Hallo OKIDOKI!
Etwas weiter solltest Du aber doch ausholen - etwa:
Vorhandene Lösungsansätze in Excel könnten auch nützlich sein - daher bitte posten ...
Grüße
bastla
Etwas weiter solltest Du aber doch ausholen - etwa:
- Woran ist die "bestimmte" Excel-Datei zu erkennen?
- Ist davon auszugehen, dass auch andere Dateien mit Excel geöffnet sind?
- Gilt "Task beenden" auch als "schließen" in Deinem Sinn?
- Und auch nicht ganz uninteressant: Wozu soll das Ganze gut sein?
Vorhandene Lösungsansätze in Excel könnten auch nützlich sein - daher bitte posten ...
Grüße
bastla
Hallo,
Hehe. Was läuft den bei dir leider nicht bzw. was läuft denn bzw. wenn eine Fehlermeldung kommt, was steht dann da drin? Wie rufst du denn diese Lösung auf?
Gruß,
Peter
Hehe. Was läuft den bei dir leider nicht bzw. was läuft denn bzw. wenn eine Fehlermeldung kommt, was steht dann da drin? Wie rufst du denn diese Lösung auf?
Gruß,
Peter
Hallo OKIDOKI,
Das kannst du doch besser
Das erklärt uns aber noch nicht wie du dein (vermutetes VBS) tatsächlich gestartet hast damit auch dein
Spann uns nicht auf die Folter
Gruß,
Peter
Das kannst du doch besser
Das erklärt uns aber noch nicht wie du dein (vermutetes VBS) tatsächlich gestartet hast damit auch dein
... auch keine Fehlermeldung
einen Sinn ergeben würde.Spann uns nicht auf die Folter
Gruß,
Peter
Hallo OKIDOKI!
Meine Tests (mit Excel 2007) haben ergeben
Mein derzeitiger Schluss daraus: Das wird per Batch nix ...
Grüße
bsatla
Meine Tests (mit Excel 2007) haben ergeben
- Der gepostete Code funktioniert, wenn er als VBA in der selben Excel-Instanz wie die gesuchte Datei gestartet wird - damit entfällt die Möglichkeit, per Batch über VBS eine weitere Excel-Instanz zu öffnen und von dort aus zu testen.
- Mit
tasklist /v|findstr /i "1.xlsx
" odertasklist /fi "WINDOWTITLE EQ Microsoft Excel - 1.xlsx
" wird der Task nur gefunden, wenn das Fenster mit der "1.xlsx" aktiv ist - wurde in der gleichen Excel-Instanz eine weitere Datei geöffnet und befindet sich diese im Vordergrund, wird deren Name angezeigt. - Wenn der Task gefunden und (über die PID) per "{{taskkill}" beendet wird, sind davon auch alle weiteren in der selben Excel-Instanz geöffneten Dateien betroffen.
Mein derzeitiger Schluss daraus: Das wird per Batch nix ...
Grüße
bsatla
Hallo,
Aber wo drauf hast du ganz leise Doppelklick gemacht? Auf das Fenster mit dem Code in deinem Browser oder wie/was? Das kann ich mir einfach nicht vorstellen. Schreib uns doch bitte genau wie du vorgegangen bist. Dann können wir auch sehen ob bei uns nichts beim Starten passiert.
Gruß,
Peter
Aber wo drauf hast du ganz leise Doppelklick gemacht? Auf das Fenster mit dem Code in deinem Browser oder wie/was? Das kann ich mir einfach nicht vorstellen. Schreib uns doch bitte genau wie du vorgegangen bist. Dann können wir auch sehen ob bei uns nichts beim Starten passiert.
Bei deinem Wortlaut habe ich bestimmt etwas Dummes gemacht oder nicht gemacht ...
Du ahnst ja gar nicht wo ich alles drauf Klicken und Doppelklicken kannGruß,
Peter
Hallo OKIDOKI,
ein umständlicher Weg mittels Batch ginge eventuell über Batch mit VBS
also sowas in Form von
Ungefähr so:
Vielleicht hilft's !?
Gruss
Tsuki
ein umständlicher Weg mittels Batch ginge eventuell über Batch mit VBS
also sowas in Form von
FindStr (Fenstertitel.vbs "MeineDatei.xls")
in der Fenstertitel.vbs kannst du von der PC Welt das bisschen DLL und VBS -Code nehmen und den VBS code noch etwas anpassen.Ungefähr so:
set MyTasks = CreateObject("pcwHide.pcwHide")
result=MyTasks.ListAll
for n = 0 to ubound(result)
if result(n) = "MeineDatei.xls" then
wscript.echo result(n)
End If
next
Vielleicht hilft's !?
Gruss
Tsuki
Moin,
Und wenn auf nem Share dann - was passiert wenn User A die abschiesst während User B die auch auf hat
Von daher - ich leg mich malmit Bastla an gaaanz weit auf dem Fenster und behaupte - das ist mit Batchmitteln "möglich", wenn gewisse Bedingungen erfüllt sind.
Aber ob es Hybsch ist...
Und vielleicht kannst du Bastlas Frage nochmal ganz genau beantworten...
Denn mit excel eine Excel Datei erzeugen um die dann einzulesen und wieder abzuschiessen, das ist irgendwie wie der Versuch mit Excel eine "Datenbank" zu stricken?
Gruß
Zitat von @OKIDOKI:
Wie kann ich auslesen (Batch), ob eine bestimmte Excel-Datei geöffnet ist. Ist dies der Fall, dann soll sie (vom Batch)
geschlossen werden können.
Wie kann ich auslesen (Batch), ob eine bestimmte Excel-Datei geöffnet ist. Ist dies der Fall, dann soll sie (vom Batch)
geschlossen werden können.
- dann stell ich einfach mal die Gegenfrage - wo liegt die Datei und wie viel Overhead (speziell, wenn Sie garnicht läuft - also "immer" - nicht nur während der Ausführung) darf die Lösung "kosten"?
Die angebotenen Lösungen wurden immer in Excel selber durchgeführt, nicht aber in einem externen Batch, daher diese Fragestellung.
Naja - gehen tun tut das schon, die Frage ist halt - liegt das Zeug lokal oder auf nem Share.Und wenn auf nem Share dann - was passiert wenn User A die abschiesst während User B die auch auf hat
Von daher - ich leg mich mal
Aber ob es Hybsch ist...
Und vielleicht kannst du Bastlas Frage nochmal ganz genau beantworten...
Und auch nicht ganz uninteressant: Wozu soll das Ganze gut sein?
Denn mit excel eine Excel Datei erzeugen um die dann einzulesen und wieder abzuschiessen, das ist irgendwie wie der Versuch mit Excel eine "Datenbank" zu stricken?
Gruß
Hmm..
Und warum exportiert/erzeugst du nicht gleich ne CSV und liesst die ein?
Wenns taskkill /fi "Windowtitle eq Microsoft Excel - 1" für dich auch tut und es dir nur um die Info geht pipe das doch ins Nirvana >nul
Wie geschrieben, ich verstehs noch nicht so richtig ich würde so wie ich es verstanden habe - den ganzen Hokuspokus eindampfen.
Gruß
Es geht darum, dass an der Excel-Datei gearbeitet wird. Aus dem Excel wird eine csv ausgelesen und diese weiterverarbeitet.
irgendwie war der Kaffe grade nicht gut genug...Und warum exportiert/erzeugst du nicht gleich ne CSV und liesst die ein?
die Excel-Datei liegt lokal
Das hatte ich "befürchtet"...Wenns taskkill /fi "Windowtitle eq Microsoft Excel - 1" für dich auch tut und es dir nur um die Info geht pipe das doch ins Nirvana >nul
Vielleicht lässt sich Excel damit auch automatisch speichern?
Wie geschrieben, ich verstehs noch nicht so richtig ich würde so wie ich es verstanden habe - den ganzen Hokuspokus eindampfen.
Gruß
Moin,
Wenn die Datei keinen Schreibschutz hat reicht ein simples
sonst eventuell kombiniert.
Gruß Phil
Wenn die Datei keinen Schreibschutz hat reicht ein simples
type nul>>Datei || echo datei ist offen!
sonst eventuell kombiniert.
@echo off &setlocal
if "%~1" equ "/?" echo Syntax: %~nx0 Datei^
&echo Errorlevel 3 == Datei hat Schreibschutz! ^(eventuell Offen^)^
&echo Errorlevel 2 == Datei in Verwendung.^
&echo Errorlevel 1 == Syntaxfehler/Datei nicht gefunden^
&echo Errorlevel 0 == Datei nicht in Verwendung.&exit /b
if not exist "%~1" echo Syntaxfehler.^
&echo Syntax: %~n0 Datei^
&exit /b 1
(for /f "delims=, tokens=9" %%i in ('tasklist /Nh /v /Fo csv /Fi "IMAGENAME ne cmd.exe"') do @echo %%i)|find "%~nx1" >&2 && exit /b 3^
|| for /f "delims=" %%i in ('^(type nul^>^>"%~f1"^) 2^>^&1 ') do (
>&2 echo %%i
echo %%i|find /i "Zugriff verweigert" >nul && echo Datei-Schutz! 1>&2 && exit /b 2 || exit /b 3
)
exit /b 0
Gruß Phil
Servus,
Geh mal raus dreh dich um und dass siehst du auf den Wald und nicht nur Bäume.
@pietsch - schee gemacht so richtig auf die "simple" Nummer
- tja so sind wir halt..
Die Datei hat in keinem Fall einen Schreibschutz, weil mit ihr ja bis zu letzt gearbeitet wird!
- Sicher?
Es geht ja darum die Excel-Datei zu schließen, falls sie geöffnet sein sollte.
Vielleicht kannst du mir noch kurz sagen wie ich die beiden Dateinamen um die es geht (1.xlsx und 2.xlsx) in der Batch unterbringe und abfrage (auch bei der oberen Zeile
Vielleicht kannst du mir noch kurz sagen wie ich die beiden Dateinamen um die es geht (1.xlsx und 2.xlsx) in der Batch unterbringe und abfrage (auch bei der oberen Zeile
- Hast du mal nachgesehen getestet, was dir Pietsch da gemalt hat?
if "%~1" equ "/?" echo Syntax:
Also, wenn das so ist, dann verstehe ich auch diese ZeileIn zahlreichen Foren habe ich nach einer Antwort gesucht, leider für mein Problem aber noch keine gefunden ...
Geh mal raus dreh dich um und dass siehst du auf den Wald und nicht nur Bäume.
@pietsch - schee gemacht so richtig auf die "simple" Nummer
Hallo T-Mo!
hin (und die mochte ich eigentlich gestern schon nicht posten) ...
Grüße
bastla
* tja so sind wir halt..
Nun bin ich ja meist auch so (und beileibe kein Pessimist) - aber eigentlich steht immer nochEs geht ja darum die Excel-Datei zu schließen
(und das mit Speichern) im Raum - und auch die MöglichkeitWenn Excel geöffnet ist, soll es (gespeichert und dann) geschlossen werden - fertig.
kriege ich eigentlich nur mit einer ziemlich windigen Lösung der Art@echo off & setlocal
set "VBS=%temp%\CloseExcel.vbs"
>%VBS% echo Set Sh=CreateObject("WScript.Shell"):Sh.AppActivate WScript.Arguments(0):WScript.Sleep 1000:Sh.SendKeys "%%{F4}":WScript.Sleep 1000:Sh.SendKeys "j~"
:Loop
tasklist|findstr /i /b "excel.exe">nul || goto :Done
for /f "tokens=2" %%i in ('tasklist^|findstr /i "excel.exe"') do cscript //nologo %VBS% %%i
goto :Loop
:Done
echo Excel beendet ...
Grüße
bastla