Zahlen in Worten ausschreiben
Dieses Skript zeigt, wie Zahlenwerte (z.B. Spendenbeträge, Rechnungssummen) in deutsche Worte umgewandelt und als eigener Platzhalter in der Vorlage verwendet werden können.
Anwendungsfall
Auf Spendenbelegen, Schecks oder offiziellen Dokumenten muss ein Betrag zusätzlich in Worten ausgeschrieben werden.
Beispiel: "eintausendzweihundertfünfzig" statt "1250".
Konfiguration in PRINT+PLUS
- Exporter-Typ: Dokument-Exporter (Word, Excel, Text)
- Event:
AfterLoadData - Zusätzliche Referenz (im Skript-Editor unter „Referenzen" hinzufügen):
DevExpress.Docs.vXX.X.dll(liegt im cobra-Verzeichnis unterProgramm\Module\)- Bei anderen cobra-Versionen kann die Versionsnummer im DLL-Namen abweichen
Die DLLs finden Sie im cobra-Verzeichnis in einer der folgenden Verzeichnisse (je nach Version):
- C:\Program Files\cobra\CRMPRO\Programm\Module\
- C:\Program Files\cobra\CRMPRO\Programm\Module\Extension\Addins\PrintPlus\DevExpress\
Je nach Version von cobra ist die Versionsnummer unterschiedlich.
Funktionsprinzip
- Der Zahlenwert wird aus dem Datensatz ausgelesen
- Über die DevExpress-Klasse
NumberInWords.Cardinalwird der Wert in deutschen Text umgewandelt - Der Text wird als Custom Value bereitgestellt und kann in der Vorlage als Platzhalter verwendet werden
Vollständiges Skript
// Version 6
namespace Ruthardt.PrintPlus.Skripting
{
using DevExpress.Docs.Text;
using Ruthardt.CobraBase.Functions.Access.Ado;
using Ruthardt.PrintPlus.Model.Interfaces;
public class ZahlenAlsWorte : IScriptAction
{
public void Execute(IPrintContext printContext, ICurrentContext currentContext, IChildContext childContext)
{
var spende = currentContext.Data;
// Betrag aus dem Datensatz lesen
var betrag = spende.GetDecimalValue("Spendenbetrag");
// Ganzzahl-Anteil in Worte umwandeln (deutsch)
var betragWorte = NumberInWords.Cardinal.ConvertToText((long)betrag, NumberCulture.German);
// Als Custom Value bereitstellen - nutzbar in der Vorlage als Platzhalter
currentContext.CustomValues["BetragWorte"] = betragWorte;
}
}
}
Verwendung in der Vorlage
In der Word-Vorlage kann der Wert über die normale Platzhalter-Syntax abgerufen werden: Betrag in Worten: {Präfix.BetragWorte}
Ergebnis im Dokument: Betrag in Worten: eintausendzweihundertfünfzig
Erklärung
| Schritt | Code | Beschreibung |
|---|---|---|
| 1 | spende.GetDecimalValue("Spendenbetrag") |
Liest den numerischen Wert aus dem Datensatz |
| 2 | NumberInWords.Cardinal.ConvertToText((long)betrag, NumberCulture.German) |
Wandelt die Ganzzahl in deutsche Worte um |
| 3 | currentContext.CustomValues["BetragWorte"] = betragWorte |
Stellt den Text als Platzhalter für die Vorlage bereit |
Variante: Euro und Cent getrennt ausschreiben
var betrag = spende.GetDecimalValue("Spendenbetrag");
var euro = (long)betrag;
var cent = (long)((betrag - euro) * 100);
var euroWorte = NumberInWords.Cardinal.ConvertToText(euro, NumberCulture.German);
var centWorte = NumberInWords.Cardinal.ConvertToText(cent, NumberCulture.German);
// Ergebnis z.B.: "eintausendzweihundertfünfzig Euro und fünfzig Cent"
currentContext.CustomValues["BetragWorte"] = $"{euroWorte} Euro und {centWorte} Cent";
Variante: Ordinalzahlen (Erste, Zweite, ...)
// Ordinalzahl: "dritte" statt "drei"
var ordinal = NumberInWords.Ordinal.ConvertToText(3, NumberCulture.German);
currentContext.CustomValues["Rang"] = ordinal;
Hinweise
Nur Ganzzahlen: NumberInWords.Cardinal.ConvertToText akzeptiert nur long-Werte. Für Nachkommastellen müssen Euro und Cent getrennt verarbeitet werden (siehe Variante oben).
Neben NumberCulture.German stehen auch English, French, Spanish und weitere zur Verfügung.
Weitere Optionen und Sprachen finden Sie unter: DevExpress NumberInWords Dokumentation
Keine Kommentare vorhanden
Keine Kommentare vorhanden