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

In 10000 Excel07-Dateien in den immer in der selben Zelle ein Eintrag vorhanden ist sollen bis auf die letzten 6 Zahlen in diesem Feld ersetzt werden.

Frage Microsoft Microsoft Office

Mitglied: utroger

utroger (Level 1) - Jetzt verbinden

15.02.2013 um 10:13 Uhr, 1538 Aufrufe, 12 Kommentare

Hallo,

Erklärung:
Wir stellen unseren Teamcenter um auf eine neue Version und dabei hat unsere Gruppe beschlossen die 14 stelligen Zeichnungsnummern abzuändern so das die letzten 6 Ziffern erhalten bleiben aber der Rest soll ersetzt werden. Da es durch dieses Teamcenter auch abgeleitete Exceldateien gibt müssen diese jetzt geändert werden.
Weiter soll unterschieden werden zwischen Einzelteilen und Baugruppen
Die Zeichnungsnummer für Einzelteile sieht wie folgt z.B. aus "G-25-12-333333" soll jetzt umbenannt werden in z.B. "GE_33_13_333333" und für Baugruppen "G-25-12-222222" soll jetzt umbenannt werden in "GS_33_13_222222".
Also es müsste anhand der letzten 6 Ziffern unterschieden werden wie die Aktualierung zu erfolgen hat. Bei uns beginnen Einzelteil immer mit einer 3 und Bauteile mit einer 2. Also Enzelteil soll jetzt "GE_33_13_33333" und Bauteil "GS_33_13_222222" sein.
Jetzt kommt der Kniff dabei. Es handelt sich um ca. 10000 Exceldateien die in verschiedenen Verzeichnissen liegen.
Mein Wunsch wäre es wenn die Aktualisierung der Zeichnungsnummern in den Exceldatein ohne zu öffnen der Dateien funktioniert. Das wäre der Schritt 1.

Schritt 2 wäre es wenn jetzt noch automatisch der Dateinahme angepasst würde und zwar auch wieder nur ein Teil des Dateinamens. Leider ist durch verschiedene Ersteller der Dateien die gewünschte Änderung nicht immer an gleicher Stelle im Dateinamen. Aber es handelt sich immer um ein Datum das wie folg geschrieben ist "2013-02-15" nur jedes mal andere Datumsangaben. Dies sollte dann durch das aktuelle Datum ersetzt werden.

Schritt 3 wäre es wenn jetzt noch automatisch nach jeder Aktualisierung auch eine aktuelle pdf Dateierzeugt wird.

Mir ist bewusst das dies bestimmt eine grosse Herrausforderung ist aber es würde für mich eine Menge Arbeit ersparen.

Zumindestens würde mir 30% geholfen sein wenn ich Schritt 1 umsetzen könnte.

Danke im Vorraus für eure Unterstüzung
Gruß Roger
Mitglied: Alex1234
15.02.2013 um 10:28 Uhr
Das bekommst Du über ein EXCEL-Makro hin. Jedoch muss das Makro die Dateien öffnen, aber unter einem anderen Namen speichern (soll ja auch). Für einen EXCEL-VBA-Programmierer sollte das keine schwere Aufgabe sein.
Bitte warten ..
Mitglied: bastla
15.02.2013, aktualisiert 18.02.2013
Hallo utroger!

Als VBScript etwa so:
01.
Basis = "D:\Excel-Dateien Zeichnungen" 
02.
Typ = "xlsx" 'in Kleinbuchstaben 
03.
 
04.
LogDatei = "D:\Log.csv" 
05.
Delim =";" 'Trennzeichen für Logdatei 
06.
 
07.
ZNrAdr = "B4" 'Zelle mit Zeichnungsnummer 
08.
ZNrNeu2 = "GS_33_13_" 'Neuer Namensteil für Bauteile 
09.
ZNrNeu3 = "GE_33_13_" 'Neuer Namensteil für Einzelteile 
10.
DatAdr = "H7" ' Zelle für Änderungsdatum 
11.
 
12.
'Datumsstring für Dateinamen im Format "JJJJ-MM-TT" erstellen 
13.
AktDat = Mid(Date, 7, 4) & "-" & Mid(Date, 4, 2) & "-" & Left(Date, 2) 
14.
 
15.
Set fso = CreateObject("Scripting.FileSystemObject") 
16.
Set oXL = CreateObject("Excel.Application") 
17.
Set LF = fso.CreateTextFile(LogDatei) 'Logdatei erzeugen 
18.
 
19.
Set rE = New RegExp 
20.
rE.Pattern = "\d{4}-\d{2}-\d{2}" 'Regex-Suchmuster im Format "####-##-##" 
21.
 
22.
DoSubFolders fso.GetFolder(Basis) 'rekursive Verarbeitung in Basis-Ordner starten 
23.
 
24.
oXL.Quit 
25.
LF.Close 
26.
WScript.Echo "Fertig" 
27.
 
28.
Sub DoSubFolders(Folder) 
29.
For Each File In Folder.Files 'alle Dateien des Ordners durchgehen 
30.
    FName = File.Name 'Dateinamen zwischenspeichern 
31.
    'nur Dateien des passenden Typs und solche, die noch nicht bearbeitet wurden 
32.
    If LCase(fso.GetExtensionName(FName)) = Typ And InStr(FName, AktDat) = 0 Then 
33.
        Set WB = oXL.Workbooks.Open(File.Path) 'Datei öffnen 
34.
 
35.
        FNameNeu = rE.Replace(FName, AktDat) 'neuen Namen mit aktuellem Datum erzeugen 
36.
        If FName <> FNameNeu Then 'Dateiname geändert? 
37.
            WB.SaveAs fso.GetParentFolderName(File.Path) & "\" & FNameNeu 'Datei unter neuem Namen speichern 
38.
            Info = File.Path & Delim & FNameNeu 'Dateiinfo für Logdatei erzeugen 
39.
        Else 
40.
            Info = File.Path & Delim & "#Dateiname gleich" 'Hinweis auf unveränderten Dateinamen 
41.
        End If 
42.
 
43.
        Set ZN = WB.WorkSheets(1).Range(ZNrAdr) 'Zelle mit Zeichnungsnummer zwischenspeichern 
44.
        Kennung = Right(ZN.Value, 6) 'letzte 6 Stellen der ZNr als Kennung auslesen 
45.
        Select Case Left(Kennung, 1) 'Unterscheidung anhand erster Stelle der Kennung 
46.
        Case "2" 'Bauteil 
47.
            ZNrNeu = ZNrNeu2 & Kennung 'neue Zeichnungsnummer erzeugen ... 
48.
            ZN.Value = ZNrNeu '... und eintragen 
49.
            Info = Info & Delim & ZNrNeu 'Info für Logdatei um neue Zeichnungsnummer ergänzen 
50.
        Case "3" 'Einzelteil 
51.
            ZNrNeu = ZNrNeu3 & Kennung 'neue Zeichnungsnummer erzeugen ... 
52.
            ZN.Value = ZNrNeu '... und eintragen 
53.
            Info = Info & Delim & ZNrNeu 'Info für Logdatei um neue Zeichnungsnummer ergänzen 
54.
        Case Else 'Whatever 
55.
            'Info für Logdatei um Hinweis auf unveränderte Zeichnungsnummer ergänzen 
56.
            Info = Info & Delim & "#Zeichnungsnummer gleich" 
57.
        End Select 
58.
		 
59.
        WB.WorkSheets(1).Range(DatAdr).Value = Date 'Aktuelles Datum eintragen 
60.
         
61.
        WB.ExportAsFixedFormat 0, fso.GetParentFolderName(File.Path) & "\" & fso.GetBaseName(FNameNeu) & ".pdf" 'PDF erzeugen 
62.
         
63.
		LF.WriteLine Info 'Info in Logdatei schreiben 
64.
        WB.Close True'Datei speichern und schließen 
65.
    End If 
66.
Next 
67.
 
68.
For Each SubFolder in Folder.SubFolders 'rekursive Verabeitung der Unterordner 
69.
    DoSubFolders SubFolder 
70.
Next 
71.
End Sub
Die Logdatei kannst du mit Excel öffnen und ggf passend sortieren, um fehlerhafte Dateien zu finden.

Grüße
bastla

[Edit] Zeilen 10, 59 und 61 aufgrund zusätzlicher Anforderungen (s. u.) ehinzugefügt [/Edit]
Bitte warten ..
Mitglied: 76109
16.02.2013 um 15:38 Uhr
Hallo bastla!

Und warum SaveAs, anstatt einfaches Umbenennen

So, speicherst Du jede Datei 2 mal und die alten Dateien müssten dann ja auch noch irgendwie entsorgt werden?

Eventeuell wäre noch ein On Error-Test zu überdenken und zwar für den Fall, dass eine Datei bereits anderweitig geöffnet ist?

Gruß Dieter
Bitte warten ..
Mitglied: bastla
16.02.2013 um 19:19 Uhr
Hallo Dieter!
Und warum SaveAs, anstatt einfaches Umbenennen
Hatte ich mir auch überlegt - so ganz genau ist allerdings die Problembeschreibung nicht geraten, daher ist das auch keine Lösung, sondern nur ein Ansatz ...
Eventeuell wäre noch ein On Error-Test zu überdenken und zwar für den Fall, dass eine Datei bereits anderweitig geöffnet ist?
Dass eine Datei geöffnet ist, sollte wohl bei einer derartigen Aktion schon organisatorisch verhindert werden, aber schaden kann's natürlich nicht.

Grüße
bastla
Bitte warten ..
Mitglied: bastla
16.02.2013 um 21:45 Uhr
... und noch als Nachtrag: Mit der folgenden Zeile 57 sollte sich (Excel 2007 mit SP 2 oder zumindest dem "Speichern unter – PDF oder XPS -AddIn" bzw eine neuere Excel-Version vorausgesetzt) auch das gewünschte PDF erzeugen lassen:
WB.ExportAsFixedFormat 0, fso.GetParentFolderName(File.Path) & "\" & fso.GetBaseName(FNameNeu) & ".pdf"
Grüße
bastla
Bitte warten ..
Mitglied: 76109
17.02.2013 um 11:33 Uhr
Hallo bastla!

... und noch als Nachtrag...
Bei einer Arbeitserleichterung von 100% gibt's ja nix mehr zu meckern...

Gruß Dieter
Bitte warten ..
Mitglied: utroger
18.02.2013 um 07:37 Uhr
Hallo bastla,
erstmal vielen Dank für deine Mühe.

zwei Fragen:

1. Basis = "D:\Excel-Dateien Zeichnungen" - verstehe ich das richtig, hier ist mein Verzeichnis einzutragen wo die Exeldateien Abglegt sind diese geändert werden sollen?

2. LogDatei = "D:\Log.csv" - Diese ist eine separate Datei in dieser eine Auflistung der Dateien erfolgt wo ich den Pfad auch entsprechend vorgeben muss?

Ich habe nach dem ich den entsprechend Pfad angegeben habe oder aber belasse eine Fehlermeldung:
"Fehler beim Kompilieren: Außerhalb einer Prozedur ungültig" und ich kann nicht wirklich was mit dieser Meldung anfangen auch wenn ich mit die Erklärung dafür ansehe. Sorry, könntest Du mir hier nochmal behilflich sein.

Danke
Gruß Roger
Bitte warten ..
Mitglied: bastla
18.02.2013 um 08:06 Uhr
Hallo utroger!

Zu 1.: ja

Zu 2.: Die Log-Datei wird erstellt, um den Ablauf nachvollziehen zu können - Du kannst sie, nachdem das Script durchgelaufen ist, mit Excel öffnen.

Und nur zur Sicherheit: Das Script ist nicht per VBA (in Excel) auszuführen, sondern ein VBScript - daher mit dem Dateityp ".vbs" speichern und per Doppelklick starten.

Grüße
bastla
Bitte warten ..
Mitglied: utroger
18.02.2013 um 09:36 Uhr
Hallo Basla,

funktioniert alles bestens, auch mit der pdf.

Eines habe ich vergessen. In den Exceldateien ist im Feld H7 das Datum eingetragen der letzten Aktualisierung.
Kannst Du das Script abändern das auch im Feld H7 das aktuelle Datum übernommen wird.

Danke
und im Vorraus noch mal besten Dank für deine Hilfe

Gruß Roger
Bitte warten ..
Mitglied: bastla
18.02.2013 um 12:00 Uhr
Hallo utroger!

Ich habe oben die beiden zusätzlichen Wünsche (für PDF-Ausgabe und Datumseintrag) eingearbeitet ...

Grüße
bastla
Bitte warten ..
Mitglied: utroger
18.02.2013 um 12:52 Uhr
Hallo Bastla,

jetzt ändert sich das Datum aber die Zeichnungsnummern nicht mehr.
Irgendwo steckt ein Fehler

Gruß Roger
Bitte warten ..
Mitglied: utroger
18.02.2013 um 12:56 Uhr
klappt
Sorry, hatte ein Fehler bei mir eingebaut

Gruß Roger
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Einzelne Dateien in Dateiliste umbenennen durch neuen Wert (Namen) aus einer Zelle (2)

Frage von two-ak-two zum Thema VB for Applications ...

Batch & Shell
gelöst Dateien mit vorgegebener Größe erstellbar? (3)

Frage von Stefan007 zum Thema Batch & Shell ...

Windows 7
Kopierte Dateien im Hintergrund anzeigen (1)

Frage von MichiBLNN zum Thema Windows 7 ...

Festplatten, SSD, Raid
Reallocated sectors count: Welche Dateien befinden sich in den beschädigten Sektoren? (9)

Frage von DunkleMaterie zum Thema Festplatten, SSD, Raid ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...