Einfaches Word-Anliegen



  • Hallo allerseits,
    ich habe ein ganz einfaches Anliegen. Ich brauche ein Programm, dass alle Word-Dateien in einem Ordner öffnet und jeweils eine bestimmte Zeichenkette durch eine andere ersetzt. Grund: ich will nicht manuell mehrere hunderte Dateien bearbeiten, sondern den gesamten Prozess automatisieren.

    Welche Möglichkeiten habe ich hierfür? Mittels MFC geht das sicherlich. Habe damit aber leider keine großen Erfahrungen. Ich besitze aber Visual C++ 6.0. Ich wäre wirklich sehr dankbar, wenn jemand das Grundgerüst erstellen würde. Falls jemanden sonst noch eine andere Lösung einfällt, wäre das auch super.

    Ich freue mich über jegliche Hilfe.
    Danke,

    Christian



  • Also ich würde das evtl. in VBA machen, hab so was ähnliches mal gemacht um Excel Dateien nach einem Wert zu durchsuchen. Die Dateien waren alle in einem Verzeichniss das dann durchsucht wurde. Dazu musst Du ein Word Objekt nehmen die Datei laden , suchen ersetzen durchführen wieder speichern und ab zur nächsten Datei.
    Sehr hilfreich ist es wenn Du in Word ein Makro Aufzeichnest und dass ganze Spiel mit einer Datei exemplarisch machst, vom Öffnen der Datei bis zum Speichern. Danach kannst Du das Makro im VBA Editor ansehen und zu 90% verwenden.

    Mein fertiges Makro mit Verzeichniss durchsuche sah dann z.B. so aus :

    Private Sub CommandButton1_Click()
    Dim erg As Variant
    Dim tempbook As Workbook
    Dim thisbook As Workbook
    Set thisbook = ActiveWorkbook
    Dim fs As FileSearch
    Dim i As Integer
    Dim y As Integer
    Dim searchword As String
    Dim directory As String
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    thisbook.Sheets("Ergebnis").Columns("A:A").ClearContents
    On Error Resume Next
    Set fs = Application.FileSearch
    searchword = thisbook.Application.Sheets("Starten").Cells(16, 3).Value
    directory = thisbook.Application.Sheets("Starten").Cells(14, 3).Value
    y = 2 'startreihe
    With fs
    .LookIn = directory
    .Filename = "*.xls"
    .Execute
    frmBusy.Show (0)
    frmBusy.Tag = True
    For i = 1 To .FoundFiles.Count
    frmBusy.lblOut.Caption = .FoundFiles(i)
    DoEvents
    If frmBusy.Tag = False Then i = .FoundFiles.Count
    erg = False
    Workbooks.Open (.FoundFiles(i))
    erg = Application.Cells.Find(What:=searchword, LookIn:=xlValues, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
    .Activate
    Workbooks(Workbooks.Count).Close
    If erg <> False Then
    thisbook.Application.Sheets("Ergebnis").Cells(y, 1).Value = .FoundFiles(i)
    y = y + 1
    End If
    Next i
    Unload frmBusy
    End With
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

    thisbook.Sheets("Ergebnis").Select
    Cells(1, 1).Select

    End Sub

    Ist nur so eine Idee...

    gruss
    Marcus

    PS : Leider kein VB Quote vorhanden 🙂



  • das ganze nach CString auslesen - mit .Find und .Replace ersetzen und wieder schreiben

    int ReadContent as CString from File
    int ChangeContent with CString::Find | CString::Replace
    int WriteContent to File



  • @MrEvil
    Word Dateien sind keine Textdateien. Bin nicht sicher ob CString damit klar kommt, also ich würde behaupten das geht nicht...

    gruss
    Marcus



  • Hallo mr. evil, also einfach ascii-text ersetzen funktioniert glaub ich nicht.

    Die Makro-Idee finde ich nicht schlecht. Da habe ich aber zwei Fragen:
    1.) Wo finde ich eine gutes Tutorial über Makroschreiben im Internet?
    2.) Ich könnte ein Makro schreiben, dass die ganze Prozedur für _eine_ Datei vornimmt. Wie kann ich das ganze aber dann für alle Dateien in einem Ordner bewerkstelligen?



  • stimmt

    praktishc waere wenn man weiss welche codierung diese dateien haben

    wenn ich ne word datei mit ultraedit oeffne ist der eigentliche text auch fehlerfrei lesbar

    wenns UTF-8 ist kann mans ja in nem byte vector packen und dann damit arbeiten



  • Ja mit vectoren könnte es auch gehen, weiß aber nicht ob Word es verträgt wenn im Textteil plötzlich ein paar Bytes fehlen oder mehr vorhanden sind... ein versuch wärs Wert, man könnte auch einfach mal mit UltraEdit suchen / ersetzen in Dateien durchführen 😉 keine Ahnung obs geht...

    Für die Makro Lösung :

    Für die Dateien kannst Du wie in meinem Beispiel mit

    Set fs = Application.FileSearch
    ....
    With fs
    .LookIn = directory
    .Filename = "*.xls"
    .Execute
    ....
    For i = 1 To .FoundFiles.Count
    .....
    .FoundFiles(i)
    Next i

    Arbeiten, aber ich hab was Interessantes gefunden 😉

    http://mypage.bluewin.ch/reprobst/WordFAQ/SE.htm

    gruss
    Marcus



  • Na, ich glaub das wird keine MFC Lösung werden... 😉



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum Themen rund um den PC verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten