Introduction
In this article, I will talk about converting numbers to written words in Arabic (Tafqeet as pronounced in Arabic).
Background
After googling for while on 'number to arabic words' to find a code to use in SSRS reports, I found a code that was written in SQL that does the converting purpose but unfortunately this code is not supported by CRM because we will manipulate the database.
Then, I googled again to find a VB code to use it with SSRS itself, but with no luck.
Finally, the following code was written to support VB to use it in SSRS directly without manipulating the database, also you can you change the currency that will be used as shown below.
Use The Code
Invoke 'ToArabicLetter' function with the value that you want to convert for example:
Code:
Change Currency
Locate 'NumberAsCurrency' & 'FractionAsCurrency' function and change what currency you want.
Code:
To Use it with SSRS
Open SSRS>Right click> Report Proprieties> Locate 'Code' tab> then paste the code
Source Code
Public Function ToArabicLetter(ByVal givenNumber As Double) As String Dim FinalOutput, Number, NumberCurrency, Fractions, FractionsCurrency As String Dim Tafkeet = " فقط لا غير" Dim WholeNumber() As String = Split(givenNumber, ".") NumberCurrency = NumberAsCurrency(WholeNumber(0)) FinalOutput = NumberCurrency If WholeNumber.Length >= 2 Then If WholeNumber(1).Length.Equals(1) Then WholeNumber(1) = WholeNumber(1) + "0" ElseIf WholeNumber(1).Length > 2 Then WholeNumber(1) = WholeNumber(1).Substring(0, 2) End If FractionsCurrency = FractionAsCurrency(WholeNumber(1)) FinalOutput = FinalOutput + " و" + FractionsCurrency End If If FinalOutput <> Nothing And FinalOutput <> "" Then FinalOutput = FinalOutput + Tafkeet End If ToArabicLetter = FinalOutput End Function Public Function SFormatNumber(ByVal X As Double) As String Dim Letter1, Letter2, Letter3, Letter4, Letter5, Letter6 As String Dim c As String = Format(Math.Floor(X), "000000000000") Dim C1 As Double = Val(Mid(c, 12, 1)) Select Case C1 Case Is = 1 : Letter1 = "واحد" Case Is = 2 : Letter1 = "اثنان" Case Is = 3 : Letter1 = "ثلاثة" Case Is = 4 : Letter1 = "اربعة" Case Is = 5 : Letter1 = "خمسة" Case Is = 6 : Letter1 = "ستة" Case Is = 7 : Letter1 = "سبعة" Case Is = 8 : Letter1 = "ثمانية" Case Is = 9 : Letter1 = "تسعة" End Select Dim C2 As Double = Val(Mid(c, 11, 1)) Select Case C2 Case Is = 1 : Letter2 = "عشر" Case Is = 2 : Letter2 = "عشرون" Case Is = 3 : Letter2 = "ثلاثون" Case Is = 4 : Letter2 = "اربعون" Case Is = 5 : Letter2 = "خمسون" Case Is = 6 : Letter2 = "ستون" Case Is = 7 : Letter2 = "سبعون" Case Is = 8 : Letter2 = "ثمانون" Case Is = 9 : Letter2 = "تسعون" End Select If Letter1 <> "" And C2 > 1 Then Letter2 = Letter1 + " و" + Letter2 If Letter2 = "" Or Letter2 Is Nothing Then Letter2 = Letter1 End If If C1 = 0 And C2 = 1 Then Letter2 = Letter2 + "ة" If C1 = 1 And C2 = 1 Then Letter2 = "احدى عشر" If C1 = 2 And C2 = 1 Then Letter2 = "اثنى عشر" If C1 > 2 And C2 = 1 Then Letter2 = Letter1 + " " + Letter2 Dim C3 As Double = Val(Mid(c, 10, 1)) Select Case C3 Case Is = 1 : Letter3 = "مائة" Case Is = 2 : Letter3 = "مائتان" Case Is > 2 : Letter3 = Microsoft.VisualBasic.Left(SFormatNumber(C3), Len(SFormatNumber(C3)) - 1) + "مائة" End Select If Letter3 <> "" And Letter2 <> "" Then Letter3 = Letter3 + " و" + Letter2 If Letter3 = "" Then Letter3 = Letter2 Dim C4 As Double = Val(Mid(c, 7, 3)) Select Case C4 Case Is = 1 : Letter4 = "الف" Case Is = 2 : Letter4 = "الفان" Case 3 To 10 : Letter4 = SFormatNumber(C4) + " آلاف" Case Is > 10 : Letter4 = SFormatNumber(C4) + " الف" End Select If Letter4 <> "" And Letter3 <> "" Then Letter4 = Letter4 + " و" + Letter3 If Letter4 = "" Then Letter4 = Letter3 Dim C5 As Double = Val(Mid(c, 4, 3)) Select Case C5 Case Is = 1 : Letter5 = "مليون" Case Is = 2 : Letter5 = "مليونان" Case 3 To 10 : Letter5 = SFormatNumber(C5) + " ملايين" Case Is > 10 : Letter5 = SFormatNumber(C5) + " مليون" End Select If Letter5 <> "" And Letter4 <> "" Then Letter5 = Letter5 + " و" + Letter4 If Letter5 = "" Then Letter5 = Letter4 Dim C6 As Double = Val(Mid(c, 1, 3)) Select Case C6 Case Is = 1 : Letter6 = "مليار" Case Is = 2 : Letter6 = "ملياران" Case Is > 2 : Letter6 = SFormatNumber(C6) + " مليار" End Select If Letter6 <> "" And Letter5 <> "" Then Letter6 = Letter6 + " و" + Letter5 If Letter6 = "" Then Letter6 = Letter5 SFormatNumber = Letter6 End Function Public Function NumberAsCurrency(ByVal givenNumber As Double) As String Dim Number, Currency As String Number = SFormatNumber(givenNumber) If Number <> "" And Number <> Nothing And givenNumber <= 2 Then If Number.StartsWith("واحد") Then Number = Number.Substring(4) ElseIf Number.StartsWith("اثنان") Then Number = Number.Substring(5) End If End If Select Case CDbl(givenNumber) Case Is = Nothing : Currency = "" Case Is = 2 : Currency = " جنيهان مصريان" Case 3 To 10 : Currency = " جنيهات مصرية" Case Else : Currency = " جنيه مصري" End Select NumberAsCurrency = Number + " " + Currency End Function Public Function FractionAsCurrency(ByVal givenNumber As Double) As String Dim Fractions, Currency As String Fractions = SFormatNumber(givenNumber) If Fractions <> "" And Fractions <> Nothing And givenNumber <= 2 Then If Fractions.StartsWith("واحد") Then Fractions = Fractions.Substring(4) ElseIf Fractions.StartsWith("اثنان") Then Fractions = Fractions.Substring(5) End If End If Select Case CDbl(givenNumber) Case Is = Nothing : Currency = "" Case Is = 2 : Currency = " قرشان" Case 3 To 10 : Currency = " قروش" Case Else : Currency = " قرشا" End Select FractionAsCurrency = Fractions + " " + Currency End Function
The thank you for this code. It's very useful and I make it as dll.
ReplyDeleteyou welcome
DeleteHow to use that code
ReplyDeleteyou can use it in SSRS when you're creating reports or you can build it in VB and make a DLL. So, Which method you prefer to use
Deletesuch as a great work, thank you very much
ReplyDeleteYou most welcome
Deletesir, in my vb editor in msaccess showing the following. Pls Help. thanks
ReplyDeleteDim Tafkeet = " ??? ?? ???"
just copy code to note then save it as 'sometext.bas' then import it to basic
DeleteHi, I am trying to use code in RDLC report but getting same error and all arabic words changes to question mark.
DeleteKindly help pls...
Sir,
ReplyDeletePlease advise how to use this code in ms access
This code is for vb6 or vb.net?
ReplyDeleteVB.NET
Deletethere are errors with this code in excel vb showing at this line "If WholeNumber.Length >= 2 Then"
ReplyDeleteplease note that this code was tested in VB in SSRS, however you can share with us a screenshot of the error that you have
DeleteThis code is not working in RDLC report. As soon as we save the report, the arabic fonts in code of report changes to question marks.
ReplyDeletePlease advice on the same.
Thank you.
this code was tested with VB in SSRS and it was working fine as shown in screenshots. and regarding the question marks, maybe that machine that you're working on, needs some Arabic fonts to be downloaded
DeleteHi, by any chance do you have this code in c# ?
ReplyDeleteThanks in advance.
شكراً لك صديقي
ReplyDeleteولكن لدي تساؤل عن ما اذا كان في الامكان
جعل عدد المراتب بعد الفارزة 3 مراتب وليست مرتبتين
couldn't understand, could you rephrase the question
Deletehe is saying how can we add three digits after the decimal.
DeleteWholeNumber(1) = WholeNumber(1).Substring(0, 3)
instead of
WholeNumber(1) = WholeNumber(1).Substring(0, 2)
If WholeNumber.Length >= 2 Then
DeleteIf WholeNumber(1).Length.Equals(1) Then
WholeNumber(1) = WholeNumber(1) + "00"
ElseIf WholeNumber(1).Length > 2 Then
WholeNumber(1) = WholeNumber(1).Substring(0, 3)
End If
This comment has been removed by the author.
ReplyDeleteDim Tafkeet = " ÝÞØ áÇ ÛíÑ"
ReplyDeleteDim WholeNumber() As String = Split(givenNumber, ".")
Red in these two lines in MS access Module
Not working in MS access module!
ReplyDeleteit's only tested on SSRS, so you need to adjust the code to suit MS Access
DeleteNot working in vb6 some error is coming
ReplyDeleteit's only tested on SSRS, so you need to adjust the code to suit vb6
DeleteHello My Dear Sir Could you Convert This Code in Asp.net C# Pls Help Me Sir ......
ReplyDeletehow to add code for FC as well ? like what if currency code is USD?
ReplyDeleteHello Dear, There is a error (Public Function NumberAsCurrency(ByVal givenNumber As Double) As String) I can't Slowe this.
ReplyDelete