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-Key: 155673

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

Printed on: April 18, 2024 at 21:04 o'clock

Member: bastla
bastla Nov 24, 2010, updated at Oct 18, 2012 at 16:44:10 (UTC)
Goto Top
Hallo Deecay und wilkommen im Forum!

Schau mal hier vorbei ...

Grüße
bastla
Member: Deecay
Deecay Nov 24, 2010 at 08:45:26 (UTC)
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
Member: Miyamoto
Miyamoto Nov 24, 2010 at 08:55:35 (UTC)
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
Member: Deecay
Deecay Nov 24, 2010 at 09:15:36 (UTC)
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
Mitglied: 76109
76109 Nov 24, 2010 at 09:24:04 (UTC)
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
Member: Deecay
Deecay Nov 24, 2010 at 09:29:15 (UTC)
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.
Member: bastla
bastla Nov 24, 2010 at 09:30:15 (UTC)
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]
Member: Deecay
Deecay Nov 24, 2010 at 09:35:09 (UTC)
Goto Top
Jo trotzdem nochmal Danke Bastler