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

Aus mehreren Excel-Dateien Daten auslesen und in eine Excel Datei einfügen - Batch

Frage Entwicklung Batch & Shell

Mitglied: Legolegolas

Legolegolas (Level 1) - Jetzt verbinden

13.11.2014, aktualisiert 14.11.2014, 1550 Aufrufe, 7 Kommentare

Nachdem mir hier schon einmal geholfen wurde, möchte ich erneut um Eure Hilfe für einen Batch bieten.

Folgendes Szenario:

Auf Laufwerk Z habe ich einen Ordner Exceldateien mit mehreren hundert Exceldateien (#-Z sortiert).
Ich möchte nun gerne die Information in der Spalte J2 aller dieser Exceldateien in ein neues Excel-Sheet "Excel-Gesamt" (noch nicht erstellt) einfügen und zwar folgendermassen:
- Zeile/Spalte A1 - den Namen der Exceldatei
- Zeile/Spalte A2 - die Information aus J2
Danach B1 und B2 usw. bis alle Excel-Dateien durchgearbeitet sind.
Es kann auch vorkommen das keine Informationen in J2 vorhanden sind, dann soll das Script nur A1 ausfüllen und A2 leer lassen.
Exceldateien sollen nach Abarbeitung nicht gelöscht werden.


Optional (kann man sonst auch im Excel erledigen) wäre es noch von Vorteil wenn beim Einfügen der Informationen folgende Bearbeitung vorgenommen werden könnte:
Die Infos aus J2 sollten noch gesplitten werden.
Abenteuer / Komödie = Abenteuer (in A2) , Komödie (in A3)
Abenteuer / Komödie / Fantasy = Abenteuer (in A2) , Komödie (in A3) , Fantasy (in A4)
(Max. 4 Spalten)
Ausnahme: Der Begriff Horror/Grusel sollte als ein Begriff erkannt werden (keine Leerzeichen vor und nach dem Slash)
(Ich arbeite noch mit der XP-Version von Excel)


Auch hier wäre ich sehr dankbar für Eure Unterstützung.

Liebe Grüsse

Legolegolas
Mitglied: rubberman
13.11.2014 um 23:41 Uhr
Hallo Legolegolas,

Batch kann keine Exceldaten verarbeiten. Mit anderen Scriptsprachen (z.B. VBScript) wäre das denkbar, falls du diese beherrscht und Excel installiert ist.

Grüße
rubberman
Bitte warten ..
Mitglied: Legolegolas
14.11.2014 um 00:03 Uhr
Danke rubberman

VBScript beherrsche ich leider nicht. Dann muss ich mir was anderes einfallen lassen.

Grüße
Legolegolas
Bitte warten ..
Mitglied: Legolegolas
14.11.2014, aktualisiert um 00:53 Uhr
Ich habe ein VBScript im Netz gefunden und es soweit angepasst, dass es meine Grundwünsche erfüllt.

Kannst Du mir bei der Option helfen ?

01.
 
02.
Option Explicit 
03.
 
04.
Const Bereich = "J2" 
05.
 
06.
Const OrdnerPfad = "z:\Excel\" 
07.
 
08.
Dim xls_Appl                              ' Excel Programm 
09.
 
10.
Dim xls_Mappe                             ' Excel Arbeitsmappe 
11.
Dim xls_Blatt                             ' Excel Tabelle 
12.
 
13.
Dim xls_Mappe1                             ' Excel Arbeitsmappe 
14.
Dim xls_Blatt1                             ' Excel Tabelle 
15.
 
16.
Dim fso                                 ' FileSystemObject 
17.
Dim fo                                   ' Ordner (Folder) 
18.
Dim fi                                    ' Datei (File) 
19.
 
20.
Dim Zeile 
21.
Dim Spalte 
22.
 
23.
Set fso = CreateObject("Scripting.FileSystemObject") 
24.
Set fo = fso.GetFolder(OrdnerPfad) 
25.
 
26.
' ***** Excel starten ***** 
27.
Set xls_Appl= CreateObject("Excel.Application") 
28.
xls_Appl.Visible = True            ' Excel sichtbar 
29.
 
30.
Set xls_Mappe = xls_Appl.Workbooks.Add(1) ' Leeres Tabellenblatt hinzufügen 
31.
Set xls_Blatt = xls_Mappe.Worksheets(1)     
32.
 
33.
Zeile = 1 
34.
Spalte = 1 
35.
For Each fi In fo.Files            ' Alle Dateien im Ordner durchlaufen 
36.
 
37.
    If Right(UCase(fi.Name),3) ="XLS" Then        ' Erkennen der Excel-Dateien 
38.
        Set xls_Mappe1 = xls_Appl.Workbooks.Open(OrdnerPfad & fi.Name) 
39.
        Set xls_Blatt1 = xls_Mappe1.Worksheets(1) 
40.
        ' ***** 
41.
        xls_Blatt.Activate 
42.
        xls_Blatt.Range("A" & Zeile).Select    ' Aktive Zelle auswählen 
43.
        xls_Appl.ActiveCell.Value = fi.Name    ' Dateiname als Überschrift 
44.
        Zeile = Zeile + 1 
45.
 
46.
        xls_Blatt1.Activate 
47.
        xls_Blatt1.Range(Bereich).Select    ' Bereich auswählen 
48.
        xls_Appl.Selection.Copy 
49.
 
50.
        xls_Blatt.Activate 
51.
        xls_Blatt.Range("B" & Spalte).Select    ' Aktive Zelle auswählen 
52.
        xls_Mappe.ActiveSheet.Paste 
53.
        Spalte = Spalte + 1 
54.
        ' ***** 
55.
        xls_Mappe1.Close            ' Eingabe wieder schließen 
56.
        Set xls_Blatt1 = Nothing        ' Resourcen freigeben 
57.
        Set xls_Mappe1 = Nothing 
58.
    End If 
59.
Next 
60.
 
61.
xls_Mappe.Saveas (OrdnerPfad & "ExcelNeu.xls")        ' Tabelle speichern 
62.
xls_Appl.Quit                         ' Excel beenden 
63.
 
64.
Set fi = Nothing                    ' Resourcen wieder freigeben 
65.
Set fo = Nothing 
66.
Set fso = Nothing 
67.
 
68.
Set xls_Blatt = Nothing 
69.
Set xls_Mappe = Nothing 
70.
Set xls_Appl = Nothing
Bitte warten ..
Mitglied: rubberman
LÖSUNG 14.11.2014, aktualisiert um 14:22 Uhr
Hallo Legolegolas,

ich denke so sollte es funktionieren.
01.
Option Explicit 
02.
 
03.
Const strPath  = "Z:\Excel" 
04.
Const strFile  = "Excel-Gesamt.xls" 
05.
Const strRange = "J2" 
06.
 
07.
Dim objFSO, objFolder, objFile, _ 
08.
    objExcelApp, objThisWB, objThisWS, objWB, _ 
09.
    strXls, strRead, arrRead, i, j 
10.
 
11.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
12.
Set objFolder = objFSO.GetFolder(strPath) 
13.
strXls = objFSO.BuildPath(strPath, strFile) 
14.
If objFSO.FileExists(strXls) Then objFSO.DeleteFile strXls, True 
15.
 
16.
Set objExcelApp = CreateObject("Excel.Application") 
17.
Set objThisWB = objExcelApp.Workbooks.Add 
18.
Set objThisWS = objThisWB.Worksheets(1) 
19.
 
20.
i = 1 
21.
For Each objFile In objFolder.Files 
22.
  If LCase(objFSO.GetExtensionName(objFile.Name)) = "xls" Then 
23.
    Set objWB = objExcelApp.Workbooks.Open(objFile.Path, 0, True) 
24.
    strRead = objWB.Worksheets(1).Range(strRange) 
25.
    arrRead = Split(Replace(strRead, " / ", "$"), "$") 
26.
    objThisWS.Cells(i, 1) = objWB.Name 
27.
    If IsArray(arrRead) Then 
28.
      For j = 0 To UBound(arrRead) 
29.
        objThisWS.Cells(i, j + 2) = arrRead(j) 
30.
      Next 
31.
    End If 
32.
    objWB.Close False 
33.
    i = i + 1 
34.
  End If 
35.
Next 
36.
 
37.
objThisWB.SaveAs strXls 
38.
objExcelApp.Quit
Grüße
rubberman
Bitte warten ..
Mitglied: Legolegolas
14.11.2014 um 14:28 Uhr
Tag rubberman

Das funktioniert wieder auf Anhieb - Klasse.
Ich wollte Dir noch sagen, dass ich schon mehrere Stunden an deinem ersten Script herum studiert habe. Unterdessen verstehe ich auch so einiges, aber sind wir ehrlich, das alles ist nicht gerade einfach und braucht viel Übung. Auch dieses Script ist wieder "Bahnhof" für mich.
Ich wünschte mir, dass ich das auch so locker aus dem Handgelenk schütteln könnte - ich danke Dir.

Grüße

Legolegolas
Bitte warten ..
Mitglied: rubberman
15.11.2014 um 00:53 Uhr
Hallo Legolegolas.

Ich wünschte mir, dass ich das auch so locker aus dem Handgelenk schütteln könnte
Wenn du dich lang genug damit beschäftigst, wird das passieren. Schau dir Beispiele und Referenzen an. Im MSDN sind Windows-Scriptsprachen sehr detailliert dokumentiert.
Hier noch einmal das Script mit den entsprechenden Links. Wirf auf den verlinkten Seiten auch mal einen Blick auf das linke Sidebar, dann erkennst du wie du dich entlang hangeln kannst, um zu finden was du suchst ...
01.
' http://msdn.microsoft.com/en-us/library/bw9t3484(v=vs.84).aspx 
02.
Option Explicit 
03.
 
04.
' http://msdn.microsoft.com/en-us/library/16twy8ed(v=vs.84).aspx 
05.
Const strPath  = "Z:\Excel" 
06.
Const strFile  = "Excel-Gesamt.xls" 
07.
Const strRange = "J2" 
08.
 
09.
' http://msdn.microsoft.com/en-us/library/zexdsyc0(v=vs.84).aspx 
10.
Dim objFSO, objFolder, objFile, _ 
11.
    objExcelApp, objThisWB, objThisWS, objWB, _ 
12.
    strXls, strRead, arrRead, i, j 
13.
 
14.
' "Set" statement: 
15.
' http://msdn.microsoft.com/en-us/library/4afksd44(v=vs.84).aspx 
16.
 
17.
' http://msdn.microsoft.com/en-us/library/z9ty6h50(v=vs.84).aspx 
18.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
19.
' http://msdn.microsoft.com/en-us/library/f1xtf7ta(v=vs.84).aspx 
20.
Set objFolder = objFSO.GetFolder(strPath) 
21.
' http://msdn.microsoft.com/en-us/library/z0z2z1zt(v=vs.84).aspx 
22.
strXls = objFSO.BuildPath(strPath, strFile) 
23.
' http://msdn.microsoft.com/en-us/library/5h27x7e9(v=vs.84).aspx 
24.
' http://msdn.microsoft.com/en-us/library/x23stk5t(v=vs.84).aspx 
25.
' http://msdn.microsoft.com/en-us/library/thx0f315(v=vs.84).aspx 
26.
If objFSO.FileExists(strXls) Then objFSO.DeleteFile strXls, True 
27.
 
28.
' http://msdn.microsoft.com/en-us/library/ms974573.aspx 
29.
Set objExcelApp = CreateObject("Excel.Application") 
30.
' http://msdn.microsoft.com/en-us/library/office/ff820765(v=office.15).aspx 
31.
' http://msdn.microsoft.com/en-us/library/office/ff840478(v=office.15).aspx 
32.
Set objThisWB = objExcelApp.Workbooks.Add 
33.
' http://msdn.microsoft.com/en-us/library/office/ff840672(v=office.15).aspx 
34.
Set objThisWS = objThisWB.Worksheets(1) 
35.
 
36.
i = 1 
37.
' http://msdn.microsoft.com/en-us/library/tywtbxd0(v=vs.84).aspx 
38.
' http://msdn.microsoft.com/en-us/library/1ft05taf(v=vs.84).aspx 
39.
' http://msdn.microsoft.com/en-us/library/wz72a8c0(v=vs.84).aspx 
40.
For Each objFile In objFolder.Files 
41.
  ' http://msdn.microsoft.com/en-us/library/9fd71ty9(v=vs.84).aspx 
42.
  ' http://msdn.microsoft.com/en-us/library/x0fxha2a(v=vs.84).aspx 
43.
  If LCase(objFSO.GetExtensionName(objFile.Name)) = "xls" Then 
44.
    ' http://msdn.microsoft.com/en-us/library/office/ff194819(v=office.15).aspx 
45.
    Set objWB = objExcelApp.Workbooks.Open(objFile.Path, 0, True) 
46.
    ' http://msdn.microsoft.com/en-us/library/office/ff838238(v=office.15).aspx 
47.
    strRead = objWB.Worksheets(1).Range(strRange) 
48.
    ' http://msdn.microsoft.com/en-us/library/0764e5w5(v=vs.84).aspx 
49.
    ' http://msdn.microsoft.com/en-us/library/238kz954(v=vs.84).aspx 
50.
    arrRead = Split(Replace(strRead, " / ", "$"), "$") 
51.
    ' http://msdn.microsoft.com/en-us/library/office/ff194567(v=office.15).aspx 
52.
    ' http://msdn.microsoft.com/en-us/library/office/ff820899(v=office.15).aspx 
53.
    objThisWS.Cells(i, 1) = objWB.Name 
54.
    ' http://msdn.microsoft.com/en-us/library/xdxy3zda(v=vs.84).aspx 
55.
    If IsArray(arrRead) Then 
56.
      ' http://msdn.microsoft.com/en-us/library/sa3hh43e(v=vs.84).aspx 
57.
      ' http://msdn.microsoft.com/en-us/library/fhx59d0t(v=vs.84).aspx 
58.
      For j = 0 To UBound(arrRead) 
59.
        objThisWS.Cells(i, j + 2) = arrRead(j) 
60.
      Next 
61.
    End If 
62.
    ' http://msdn.microsoft.com/en-us/library/office/ff838613(v=office.15).aspx 
63.
    objWB.Close False 
64.
    i = i + 1 
65.
  End If 
66.
Next 
67.
 
68.
' http://msdn.microsoft.com/en-us/library/office/ff841185(v=office.15).aspx 
69.
objThisWB.SaveAs strXls 
70.
' http://msdn.microsoft.com/en-us/library/office/ff839269(v=office.15).aspx 
71.
objExcelApp.Quit
Grüße
rubberman
Bitte warten ..
Mitglied: Legolegolas
19.11.2014 um 22:07 Uhr
Danke - Ich werde da reinschauen.
Bitte warten ..
Neuester Wissensbeitrag
Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (27)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (20)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...