Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch-Abfrage, ob bestimmte excel-Datei geöffnet ist und diese dann auch schließen (können)

Frage Microsoft Microsoft Office

Mitglied: OKIDOKI

OKIDOKI (Level 1) - Jetzt verbinden

01.03.2012 um 23:00 Uhr, 8519 Aufrufe, 21 Kommentare

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
Mitglied: bastla
01.03.2012 um 23:04 Uhr
Hallo OKIDOKI!

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
Bitte warten ..
Mitglied: OKIDOKI
01.03.2012 um 23:21 Uhr
Hallo bastla,

- die bestimmte Excel-Datei hat einfach einen Namen /dies beinhaltet gleich Frage 2, da eine andere Excel-Datei, bzw. Excel selbst, geöffnet sein kann/
In meinem Fall geht es um die Dateien 1.xlsx und 2.xlsx, die abgefragt werden sollen. Dies hat den Hintergrund, dass sie irgendwo hinkopiert werden und nach dieser Abfrage gelöscht werden sollen.
Deshalb soll es auch möglich sein, dass sie gespeichert werden sollen (geht das überhaupt automatisch?) und anschließend geschlossen werden können sollen (Bandwurmsatz...).

Gilt "Task beenden" auch als "schließen" in Deinem Sinn?
Da die beiden Excel-Dateien gelöscht werden, reicht vermutlich Task beenden nicht, außer sie lassen sich auch dann löschen.

Von den Kommentaren fand ich diese Lösung sehr charmant, die bei mir leider nicht läuft:


01.
Function IsWorkbookOpen(strWB As String) As Boolean 
02.
   On Error Resume Next 
03.
   IsWorkbookOpen = Not Workbooks(strWB) Is Nothing 
04.
End Function 
05.
 
06.
 
07.
Testen kannst du es damit: 
08.
Code: 
09.
 
10.
Sub test() 
11.
   If IsWorkbookOpen("Mappe2.xlsx") Then 
12.
      MsgBox "OFFEN" 
13.
   Else 
14.
      MsgBox "Nicht offen" 
15.
   End If 
16.
End Sub 
17.
 
18.
Vielleicht gefällt die diese Lösung auch Smile 
19.
Super, solltest Du Dir patentieren lassen. Gefällt mir am Besten. 
20.
Ich habs ausprobiert, weil ich auch diese Nuss zu knacken hatte. 
21.
Man darf nur in strWB nicht den kompletten Pfad angeben. 
22.
Vielen Dank - Gruß Martin
http://www.office-loesung.de/ftopic118311_0_0_asc.php

Grüße
OKIDOKI
Bitte warten ..
Mitglied: Pjordorf
01.03.2012 um 23:38 Uhr
Hallo,

Zitat von OKIDOKI:
diese Lösung sehr charmant, die bei mir leider nicht läuft:
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
Bitte warten ..
Mitglied: OKIDOKI
01.03.2012 um 23:42 Uhr
Hallo Peter,

Ich dachte es ist eine vbs, da passiert gar nichts beim Start ... auch keine Fehlermeldung

Gruß OKIDOKI
Bitte warten ..
Mitglied: Pjordorf
01.03.2012 um 23:52 Uhr
Hallo OKIDOKI,

Das kannst du doch besser
Zitat von OKIDOKI:
da passiert gar nichts beim Start
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
Bitte warten ..
Mitglied: OKIDOKI
02.03.2012 um 00:03 Uhr
Hallo Pjordorf ,

ganz leise: Doppelklick

Bei deinem Wortlaut habe ich bestimmt etwas Dummes gemacht oder nicht gemacht ...

> Zitat von Pjordorf:
Hehe.

OKIDOKI
Bitte warten ..
Mitglied: bastla
02.03.2012 um 00:08 Uhr
Hallo OKIDOKI!

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" oder tasklist /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
Bitte warten ..
Mitglied: OKIDOKI
02.03.2012 um 00:20 Uhr
Hallo bastla,

dann noch eine andere Überlegung: dann scheint es möglich zu sein, zu testen ob Excel generell geöffnet ist, alles zu speichern und alle Excel-Instanzen (also Excel generell) zu schließen. Hier entfällt die Möglichkeit einer Auswahl, was aber überhaupt nicht schlimm wäre!
Damit hätte sich deine erste Frage in eine andere Richtung bewegt:

Woran ist die "bestimmte" Excel-Datei zu erkennen?
Gar nicht, denn es geht um Excel allgemein! Wenn Excel geöffnet ist, soll es (gespeichert und dann) geschlossen werden - fertig.

Wäre diese Lösung denkbar?

Gruß
OKIDOKI
Bitte warten ..
Mitglied: Pjordorf
02.03.2012 um 00:22 Uhr
Hallo,

Zitat von OKIDOKI:
ganz leise: Doppelklick
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 kann

Gruß,
Peter
Bitte warten ..
Mitglied: bastla
02.03.2012 um 00:57 Uhr
Hallo OKIDOKI!

Ein Speichern ließe sich allenfalls per VBS-SendKeys realisieren - und das wäre alles andere als verlässlich - daher weiterhin: nein ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
02.03.2012 um 07:39 Uhr
Hallo OKIDOKI,

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:
01.
set MyTasks = CreateObject("pcwHide.pcwHide") 
02.
 
03.
result=MyTasks.ListAll 
04.
for n = 0 to ubound(result) 
05.
     if  result(n) = "MeineDatei.xls" then 
06.
	      wscript.echo result(n) 
07.
     End If 
08.
next
Vielleicht hilft's !?

Gruss
Tsuki
Bitte warten ..
Mitglied: 60730
02.03.2012 um 09:01 Uhr
Moin,

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.
  • 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 mit 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...
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ß
Bitte warten ..
Mitglied: OKIDOKI
02.03.2012 um 09:12 Uhr
Moin,
die Excel-Datei liegt lokal undzwar im selben Verzeichnis wie die Batch.
Es geht darum, dass an der Excel-Datei gearbeitet wird. Aus dem Excel wird eine csv ausgelesen und diese weiterverarbeitet. Alsbald wird diese Excel-Datei dann in einem Sicherungsordner abgelegt und für den nächsten Prozess eine "frisch aufbereitete" Excel Datei benutzt - dann csv auslesen und weiterverarbeiten, Excel-Datei archivieren und löschen usw.

Eine Möglichkeit wäre vielleicht:

01.
taskkill /fi "Windowtitle eq Microsoft Excel - 1"
Damit wird genau die Datei geschlossen, die gemeint ist, alle weiteren Excel-Prozesse (falls es welche gibt) bleiben geöffnet. Und Excel fragt sogar, ob die Änderungen gespeichert werden sollen.
Nach dem Aufruf und bei geschlossenem Excel kommt die Meldung: "Information: Es werden keine Tasks mit den angegebenen Kriterien ausgeführt."
Vielleicht lässt sich damit weiterarbeiten?
Vielleicht lässt sich Excel damit auch automatisch speichern?

Gruß
OKIDOKI
Bitte warten ..
Mitglied: 60730
02.03.2012 um 09:39 Uhr
Hmm..

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ß
Bitte warten ..
Mitglied: OKIDOKI
02.03.2012 um 10:18 Uhr
Hmm...

ich bade den Kram von anderen Leuten aus

Aber wie auch schon bastla schrieb und du es meinst, hier sind auch die Grenzen von Batch erreicht...

PS: Gleich eine csv erzeugen geht nicht, da mit Excel erst Berechnungen durchgeführt werden. Sonst hättest du natürlich vollkommen recht!

Danke dir noch einmal und auch bastla und TsukiSan für eure Kopfkapazitäten

OKIDOKI
Bitte warten ..
Mitglied: pieh-ejdsch
02.03.2012 um 11:52 Uhr
Moin,

Wenn die Datei keinen Schreibschutz hat reicht ein simples
type nul>>Datei || echo datei ist offen!
sonst eventuell kombiniert.
01.
@echo off &setlocal 
02.
if "%~1" equ "/?" echo Syntax: %~nx0 Datei^ 
03.
 &echo Errorlevel 3 == Datei hat Schreibschutz! ^(eventuell Offen^)^ 
04.
 &echo Errorlevel 2 == Datei in Verwendung.^ 
05.
 &echo Errorlevel 1 == Syntaxfehler/Datei nicht gefunden^ 
06.
 &echo Errorlevel 0 == Datei nicht in Verwendung.&exit /b 
07.
 
08.
if not exist "%~1" echo Syntaxfehler.^ 
09.
 &echo Syntax: %~n0 Datei^ 
10.
 &exit /b 1 
11.
 
12.
(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^ 
13.
 || for /f "delims=" %%i in ('^(type nul^>^>"%~f1"^) 2^>^&1 ') do ( 
14.
	>&2 echo %%i 
15.
	echo %%i|find /i "Zugriff verweigert" >nul && echo Datei-Schutz! 1>&2 && exit /b 2 || exit /b 3 
16.
17.
exit /b 0
Gruß Phil
Bitte warten ..
Mitglied: OKIDOKI
02.03.2012 um 13:27 Uhr
Hallo pieh-ejdsch,

wie schön, dass du noch weitermachst

Die Datei hat in keinem Fall einen Schreibschutz, weil mit ihr ja bis zu letzt gearbeitet wird!

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 ...

Vielen Dank pieh-ejdsch
OKIDOKI
Bitte warten ..
Mitglied: 60730
02.03.2012 um 16:21 Uhr
Servus,

Zitat von OKIDOKI:
Hallo pieh-ejdsch,

wie schön, dass du noch weitermachst
  • 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

  • Hast du mal nachgesehen getestet, was dir Pietsch da gemalt hat?
Und was uist dir bei der Zeile aufgefallen?
if "%~1" equ "/?" echo Syntax:
Also, wenn das so ist, dann verstehe ich auch diese Zeile
In 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
Bitte warten ..
Mitglied: bastla
02.03.2012 um 17:04 Uhr
Hallo T-Mo!
* tja so sind wir halt..
Nun bin ich ja meist auch so (und beileibe kein Pessimist) - aber eigentlich steht immer noch
Es geht ja darum die Excel-Datei zu schließen
(und das mit Speichern) im Raum - und auch die Möglichkeit
Wenn Excel geöffnet ist, soll es (gespeichert und dann) geschlossen werden - fertig.
kriege ich eigentlich nur mit einer ziemlich windigen Lösung der Art
01.
@echo off & setlocal 
02.
set "VBS=%temp%\CloseExcel.vbs" 
03.
>%VBS% echo Set Sh=CreateObject("WScript.Shell"):Sh.AppActivate WScript.Arguments(0):WScript.Sleep 1000:Sh.SendKeys "%%{F4}":WScript.Sleep 1000:Sh.SendKeys "j~" 
04.
 
05.
:Loop 
06.
tasklist|findstr /i /b "excel.exe">nul || goto :Done 
07.
for /f "tokens=2" %%i in ('tasklist^|findstr /i "excel.exe"') do cscript //nologo %VBS% %%i 
08.
goto :Loop 
09.
 
10.
:Done 
11.
echo Excel beendet ...
hin (und die mochte ich eigentlich gestern schon nicht posten) ...

Grüße
bastla
Bitte warten ..
Mitglied: OKIDOKI
03.03.2012 um 12:25 Uhr
Hallo Bastla, T-Mo! und pieh-ejdsch,

Phils Lösung peil ich einfach nicht, ich werd wohl weiter Gärtner bleiben und mich nicht um die Bäume kümmern können

Bastla versteht mich, irgendwie kann ich seine Lösungen besser nachvollziehen. Eine Anmerkung hätte ich:

Wäre es in Zeile 3 vielleicht besser statt "j~" "s~" zu nehmen, da bei zwei geöffneten Excelfiles die Abfrage von Excel kommt, ob alle gespeichert werden sollen ... ?
(Witzigerweise trägt er bei der geposteteten Lösung in einer von den Dateien zeilenweise ein j ein, versucht zu schließen und trägt ein j in der nächsten Spalte ein)

Danke ausdrücklich euch allen, dass ihr euch mit solchen (bestimmt für euch hahnebüchenen Problemen) "rumärgert" (oder dies als Herausforderung empfindet ). Viele andere Posts lassen aber erkennen, dass einige Leute dafür eine Lösung suchen!

Vielen Dank
OKIDOKI
Bitte warten ..
Mitglied: bastla
03.03.2012 um 12:55 Uhr
Hallo OKIDOKI!
(Witzigerweise trägt er bei der geposteteten Lösung in einer von den Dateien zeilenweise ein j ein, versucht zu schließen und trägt ein j in der nächsten Spalte ein)
Nicht zuletzt deshalb meine Vorbehalte gegen diese "Krücke" ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Abfrage Vergleiche mit Variable goto (4)

Frage von Zunaras zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...