Forum: PC Hard- und Software im Word Dokument alle Zahlen wo kein Punkt danach kommt in Wort umwandeln.


von Etit (Gast)


Lesenswert?

Hallo Leute, wie kann ich in einem 2000 Seitigen Dokument alle Zahlen wo 
kein Punkt dahinter vorkommt in Text umwandeln?

Also sprich 2100 in zweitausendeinhundert.

von suchen - ersetzen (Gast)


Lesenswert?

Schreib Dir Software, die das kann, Sprache egal. Oder verwende 
suchen/ersetzen.

von Etit (Gast)


Lesenswert?

suchen - ersetzen schrieb:
> Schreib Dir Software, die das kann, Sprache egal. Oder verwende
> suchen/ersetzen.

Gibts da schon fertiges?

von Sim J. (unimetal)


Lesenswert?

Sowas lässt sich super mit VBA (z.B. in Word) programmieren.

-Entwicklertools einblenden

-Makro aufnehmen und ansehen, wie es arbeitet

-Strategie/Algorithmus ausdenken und Makro anpassen

=> Das entspricht dann dem händischen Vorgehen. Das ist etwas 
amateurhaft, genügt aber oft, um den Anfang zu bekommen.

Da kommt dann sowas raus:
1
Sub SuchenErsetzen()
2
'
3
' SuchenErsetzen Makro
4
'
5
'
6
    Selection.Find.ClearFormatting
7
    Selection.Find.Replacement.ClearFormatting
8
    With Selection.Find
9
        .Text = " 1 "
10
        .Replacement.Text = "eins"
11
        .Forward = True
12
        .Wrap = wdFindContinue
13
        .Format = False
14
        .MatchCase = False
15
        .MatchWholeWord = False
16
        .MatchWildcards = False
17
        .MatchSoundsLike = False
18
        .MatchAllWordForms = False
19
    End With
20
    Selection.Find.Execute Replace:=wdReplaceAll
21
    
22
End Sub

Dann überlegt man sich, wie man alle Fälle abdeckt. Man könnte zum 
Beispiel für jede Zahl einen String generieren, beispielsweise mit der 
hier erzeugten Funktion, für das es von Microsoft ein Codebeispiel gibt. 
Die Funktion konvertiert Zahlen in Wörter:

https://support.microsoft.com/de-de/office/konvertieren-von-zahlen-in-w%C3%B6rter-a0d166fb-e1ea-4090-95c8-69442cd55d98

Diese Funktion passt man dann an und implementiert man dann in eine 
For-Schleife:
1
Dim i As Long
2
3
For i = 1 To 1000000
4
    Selection.Find.ClearFormatting
5
    Selection.Find.Replacement.ClearFormatting
6
    With Selection.Find
7
        .Text = " " & i & " "
8
        .Replacement.Text = SpellNumber(i)
9
        .Forward = True
10
        .Wrap = wdFindContinue
11
        .Format = False
12
        .MatchCase = False
13
        .MatchWholeWord = False
14
        .MatchWildcards = False
15
        .MatchSoundsLike = False
16
        .MatchAllWordForms = False
17
    End With
18
    Selection.Find.Execute Replace:=wdReplaceAll
19
Next

Das kann man sich dann nach belieben anpassen, um alle Fälle abzudecken.
Beispielsweise könnte man "For i = 1000000 To 1 Step -1" wählen, wenn 
man unter ".Text" auch Zahlen ohne vorangestellte oder nachgestellte 
Leerzeilen detektieren möchte, jedoch aus 111 kein eins eins eins 
erzeugen möchte, sondern "einhundertelf"

Was ich damit sagen möchte: Sei kreativ. Mit dem Programmieren bist du 
auf dem richtigen Weg.

Gruß Simon

: Bearbeitet durch User
von Eric (Gast)


Lesenswert?

Wie man sowas mit Word macht, weiss ich nicht. Mit sed und regex ist das 
aber kein Problem. Du müsstest dann den Text wieder in dein 
Word-Dokument kopieren und gegebenfalls neu formatieren.

von Jonas B. (jibi)


Lesenswert?

>Wie man sowas mit Word macht, weiss ich nicht. Mit sed und regex ist das
>aber kein Problem. Du müsstest dann den Text wieder in dein
>Word-Dokument kopieren und gegebenfalls neu formatieren.

Wie erzeugst du damit die ausgeschriebenen Zahlen?

von Alexander S. (alesi)


Lesenswert?

Das Betriebssystem mit eingebautem Editor Emacs kann das natürlich :-)
https://www.emacswiki.org/emacs/SpellNumber

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.