Direkt zum Hauptinhalt

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 unter Programm\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

  1. Der Zahlenwert wird aus dem Datensatz ausgelesen
  2. Über die DevExpress-Klasse NumberInWords.Cardinal wird der Wert in deutschen Text umgewandelt
  3. 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 EnglishFrenchSpanish und weitere zur Verfügung.
Weitere Optionen und Sprachen finden Sie unter: DevExpress NumberInWords Dokumentation