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 = Truethisbook.Sheets("Ergebnis").Select
Cells(1, 1).SelectEnd Sub
Ist nur so eine Idee...
gruss
MarcusPS : 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 iArbeiten, 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.