Seite 1 von 1
Suche von Wörtern in MS Word
Verfasst: 17. Januar 2007 17:45
von Daniel_C
hi @ll,
ich hoffe diesen Beitrag gibts nicht schon, konnte ihn leider nicht finden.
Desahalb frag ich hier mal nach ...
Ich möchte ein Word Document (wenns geht im Hintergrund) öffnen und die Wörter zählen die sich dort befinden.
wörter sollen gezählt werden 1x für Fett gedruckte
1x für normale wörter
da es die funktion nicht gibt, wörter zählen fett bzw. normal, hab ich mir gedacht mit der suchfunktion das problem zu lösen.
nur wie ich das genau in NAV mache ist mir nicht wirklich klar.
Ich hoffe jemand kann mir helfen, bin leider noch ein anfänger
mfg
Daniel
Verfasst: 17. Januar 2007 19:25
von Kowa
Verfasst: 18. Januar 2007 10:30
von feri
Hi,
ich habe versucht, das im Word bzw. VB abzubilden. Leider kann der count Befehl selber nicht so ohne weiteres verwendet werden, da gewisse Sonderzeichen ebenfalls mitgezaehlt werden (z.b. Zeilenumbruch).
Als Alternative kann man die Dialogs-Funktion wdDialogToolsWordCount verwenden, die die Sonderzeichen etc. ignoriert. Beim Loop habe ich aber leider nicht rausgefunden, wie man die Sonderzeichen auslassen kann.
Der Loop ist notwendig, um unterscheiden zu koennen, ob ein Wort bold ist oder nicht.
Vielleicht hat ja noch jemand eine Idee, wie man das loesen kann...
Wenn es in VB moeglich ist, sollte es in Navision eigentlich auch machbar sein.
- Code:
Sub countwords()
Dim i As Integer
Dim bold_count As Integer
Dim notbold_count As Integer
Dim word_count As Integer
bold_count = 0
notbold_count = 0
ActiveDocument.Select
Set temp = Dialogs(wdDialogToolsWordCount)
' Execute the dialog box in order to refresh its data.
temp.Execute
word_count = temp.Words
For i = 1 To word_count
ActiveDocument.Range.Words(i).Select
'ActiveDocument.Words(i).Select
If Selection.Font.Bold Then
bold_count = bold_count + 1
Else
notbold_count = notbold_count + 1
End If
Next i
End Sub
Gruesse
feri
Verfasst: 18. Januar 2007 11:15
von Daniel_C
danke für die antwort, werds gleich mal versuchen ... wobei ich nicht wirklich weis wie ich das Dialog in Navision ansprechen soll.
würde es nicht irgendwie mit Find gehen ?!
--> 'Microsoft Word 11.0 Object Library'.Find
bin offen für jede hilfe
danke, mfg
Daniel
Verfasst: 18. Januar 2007 15:45
von feri
Hi,
ich habe kurz in die msdn reingeschaut, da ich die ActiveX Word Objekte selber noch nie verwendet habe. Leider kann es schon mal vorkommen, dass man die richtige Seite nicht findet.
Ich nehme an, dass man aehnlich wie bei Excel 2-3 Objekte benoetigt, um von Navision aus auf ein Dokument zugreifen zu koennen.
Ohne Anleitung ist das eher zaeh, hier die richtigen Sachen rauszufinden. Allerdings wuerde ich mich erst auf Navision konzentrieren, wenn die Suche in VB 100%ig funktioniert.
Eine spontane Idee habe ich noch. Vielleicht kannst du beim Oeffnen des Dokumentes saemtliche Sonderzeichen (auch <CR> usw. ) loeschen, damit saemtliche Woerter in einer Zeile stehen. Dann muesste die FOR Schleife eigentlich nicht durcheinander kommen?
Wenn die VB Sache passt, kannst du dich danach ja auf der msdn Seite ueber die ganzen ActiveX Word Objekte informieren.
Gruesse
feri
Verfasst: 18. Januar 2007 16:07
von Daniel_C
danke für die hilfe feri.
ich muss mich aber leider mit navision mehr befassen da es nicht wirklich (oder ich kanns nur nicht) 1:1 übernommen werden kann ins navision.
was mir echt helfen würde ist wenn mir wer sagt welche Automation ich verwenden soll bzw. wie kann ich einfach alle Daten die in einem Word Document drinnen sind in Navision importieren ... um sie dann eventl. in eine tabelle zu speichern.
mfg
Daniel
Verfasst: 18. Januar 2007 18:27
von Daniel_C
Hier die Lösung:
Name DataType Subtype Length
wordApp Automation 'Microsoft Word 11.0 Object Library'.Application
wordDocs Automation 'Microsoft Word 11.0 Object Library'.Documents
wordDoc Automation 'Microsoft Word 11.0 Object Library'.Document
wordWords Automation 'Microsoft Word 11.0 Object Library'.Words
wordRange Automation 'Microsoft Word 11.0 Object Library'.Range
i Integer
bold_count Integer
notbold_count Integer
--------------------------------------------------------
IF NOT CREATE(wordApp,TRUE) THEN
ERROR('Word exestiert nicht');
bold_count := 0;
notbold_count := 0;
wordDocs := wordApp.Documents;
wordDoc := wordDocs.Open(Datei);
wordWords := wordDoc.Words();
FOR i := 1 TO wordWords.Count DO BEGIN
wordRange := wordWords.Item(i);
IF (wordRange.Bold = -1) THEN BEGIN
IF (wordRange.Text <> '.') THEN bold_count += 1;
END ELSE BEGIN
IF (wordRange.Text <> '.') THEN notbold_count += 1;
END;
END;
MESSAGE('Normal: %1\Fett: %2', notbold_count, bold_count);
wordDoc.Close;
wordApp.Quit;
-----------------------------------------
Was halt noch nicht geht ist bei normalen Wörtern nimmt er mir leerzeichen und zeilenumbrüche noch mit ... aber diese sollte man abfangen können mit "wordRange.Text"
Verfasst: 19. Januar 2007 12:44
von feri
Hi,
danke fuer deinen Navision code. Ich habe das gleich mal bei mir ausprobiert.
Das mit den Zeilenumbruechen ist wirklich aergerlich, ich sehe keinen plausiblen Grund, warum die das in der Funktion mitzaehlen
. Zumindest ein zusaetzlicher Parameter, mit dem man steuern kann, ob man Sonderzeichen mitzaehlen will oder nicht, waere fein gewesen.
Ich habe das jetzt mal mit einer Abfrage auf die Laenge getestet.
- Code:
FOR i := 1 TO wordWords.Count DO BEGIN
wordRange := wordWords.Item(i);
IF (wordRange.Bold = -1) THEN BEGIN
IF (STRLEN(wordRange.Text) > 1) THEN
bold_count += 1;
END ELSE BEGIN
IF (STRLEN(wordRange.Text) > 1) THEN
notbold_count += 1;
END;
END;
Ein Wort sollte eignetlich immer mind. 2 Buchstaben haben, von daher hat er mein Testdokument richtig ausgelesen.
Gruesse
feri
Verfasst: 22. Januar 2007 11:17
von Daniel_C
hi feri,
ja das is ne schöne idee ... und erleichtert mir meine arbeit ne neue Tabelle hinzuzufügen wo ich alle "Zeichen", "Buchstaben" bzw. "Sonderzeichen" eintrage die nicht gezählt werden sollen :P
danke für die zusammenarbeit, bis zum nächsten mal
CU