deecay
Goto Top

Mehrere Excell Datein an genau einer Stelle auslesen und weiterverarbeiten

Hallo zusammen, steh da vor nem kleinen Problemchen:

Das Problem ist folgendes:
In einem Ordner befinden sich ca. 50 xls-Datein. In allen 50 dieser Datein steht in der genau gleichen Zeile eine 1 oder nichts.
Ich würd es gern automatisieren (Im Optimalfall durch eine Batch Datei, oder ähnliches), dass diese Datein eingelesen werden und diese Zelle betrachtet wird.
Sollte eine 1 in der Zelle sein soll nichts weiter passieren, sollte keine 1 dort sein soll der Name der XLS-File in eine Neue Datei geschrieben werden, (alle Namen die sich so ergeben natürlich in eine Datei).

Ich steh jetzt hier wie der Ochs vorm Berg und verzweifel etwas daran, Hilfe wäre super.
Danke im Vorraus Deecay.

Content-ID: 155673

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

bastla
bastla 24.11.2010, aktualisiert am 18.10.2012 um 18:44:10 Uhr
Goto Top
Hallo Deecay und wilkommen im Forum!

Schau mal hier vorbei ...

Grüße
bastla
Deecay
Deecay 24.11.2010 um 09:45:26 Uhr
Goto Top
Danke schonmal für die schnelle Hilfe. war zeimlich Informativ der Link, ich hab das Script angepasst: aus den For Schleifen eine IF Anweisung, da ja nur eine Sache geprüft werden muss.
Bei nem Test hab ich jedoch die Fehlermeldung 400 bekommen. Ich hab den Verdacht, dass meine IF-Anweisung nich sauber läuft hier nochmal der Quellcode:

Sub Auswerten()
sQuellpfad = "D:\Test"


Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")

For Each oFile In fso.GetFolder(sQuellpfad).Files
If LCase(Right(oFile.Name, 4)) = ".xls" Then
Application.Workbooks.Open oFile.Path
If wbGes.Worksheets(1).Cells(A1).Value = "1" Then
sFileName = fso.GetBaseName(oFile.Name)
ActiveWorkbook.Close False
End If
End If
Next

wbGes.Worksheets(1).Activate
wbGes.Save
MsgBox "Fertig."
End Sub


Ordner: D:\Test
Zelle A1 gefüllt mit 1 oder 0
Zu Testzwecken malö mit 4 Datein ausprobiert
Miyamoto
Miyamoto 24.11.2010 um 09:55:35 Uhr
Goto Top
Hi,
mit der Windows PowerShell kannst du es so machen:
cls

#Variablen
$pfad="E:\temp2"  
$dateien=Get-ChildItem -Path $pfad -Name -Include *.xls
$ausgabedatei="E:\log.txt"  

#hier musst du angeben in welcher Spalte und in welcher Zeile sich dein Wert befindet
$zeile=2
$spalte=1

# Excel starten 
$excel = New-Object -comobject Excel.Application

# für die Fehlersuche sollte man Excel vielleicht anzeigen!
$excel.Visible = $FALSE

foreach($i in $dateien){

    # ExcelDatei laden
    $arbeitsmappe = $excel.Workbooks.Open($pfad+"\"+$i)  

    # Erstes Worksheet öffnen
    $seite = $arbeitsmappe.Worksheets.Item(1)
    if ($seite.Cells.item($zeile,$spalte).value() -ne 1){
        echo $i
        $i | out-file -filepath $ausgabedatei -Append
    }
}
# Excel verlassen
$excel.quit()

Gruß Miyamoto
Deecay
Deecay 24.11.2010 um 10:15:36 Uhr
Goto Top
HI Miyamoto mit Powershell kenn ich mich leider garnich aus.

wenn ich das Script ausführe kommt immer eine Fehlermeldung, ich kann die jedoch nich auswerten, weil sich kurz danach das Fenster schließt
76109
76109 24.11.2010 um 10:24:04 Uhr
Goto Top
Hallo Deecay!

Dann versuchs mal mit nem VB-Script (*.vbs):
Const QuellPfad = "D:\Test"  
Const LogDatei = "D:\Test\Test.Log"  

Dim Fso, File, Wkb, Log

Set Fso = CreateObject("Scripting.FileSystemObject")  
Set Log = Fso.CreateTextFile(LogDatei)
    
For Each File In Fso.GetFolder(QuellPfad).Files
    If LCase(Right(File.Name, 4)) = ".xls" Then  
        Set Wkb = GetObject(File.Path)
        If Wkb.Sheets(1).Range("A1").Value <> 1 Then  
            Log.WriteLine Fso.GetBaseName(File.Name)
        End If
        Wkb.Close False
    End If
Next

Log.Close
    
MsgBox "Fertig."  

Gruß Dieter
Deecay
Deecay 24.11.2010 um 10:29:15 Uhr
Goto Top
HI Dieter,

das Script funktioniert 1a, danke für die Hilfe an dich und an die andern, die sich die Mühe gemacht haben.

Gruß Deekay.
bastla
bastla 24.11.2010 um 10:30:15 Uhr
Goto Top
Hallo Deecay!

So könnte das eher funktionieren (ist aber ungetestet):
Sub Auswerten()
sQuellpfad = "D:\Test"  


Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")  

iZeile = 2
For Each oFile In fso.GetFolder(sQuellpfad).Files
    If LCase(Right(oFile.Name, 4)) = ".xls" Then  
        Application.Workbooks.Open oFile.Path
        If Worksheets(1).Range("A1").Value = "1" Then  
            sFileName = fso.GetBaseName(oFile.Name)
            ActiveWorkbook.Close False
            wbGes.Cells(iZeile, "A").Value = sFileName  
            iZeile = iZeile + 1
        End If
    End If
Next

wbGes.Worksheets(1).Activate
wbGes.Save
MsgBox "Fertig."  
End Sub
Grüße
bastla

[Edit] Hat sich dann ja inzwischen erledigt ... [/Edit]
Deecay
Deecay 24.11.2010 um 10:35:09 Uhr
Goto Top
Jo trotzdem nochmal Danke Bastler