Crystal.Li 发表于 2021-7-7 11:04:31

【ActiveReports】数字转英文大写脚本函数

本帖最后由 Crystal.Li 于 2021-7-7 11:09 编辑

本篇教程提供一个脚本函数,用来实现数字转英文大写。关于脚本的介绍和使用可以参考帮助文档:https://help.grapecity.com.cn/pa ... tion?pageId=5972510
Function NumberToWord(ByVal MyNumber As String)
        Dim Temp As String
        Dim Num, Digits As String
        Dim DecimalPlace, iCount As Integer
        Dim Hundreds, Words As String
        Dim place(9) As String
        place(0) = " Thousand "
        place(2) = " Hundred "
        place(4) = ""
        place(6) = ""
        place(8) = ""
        On Error Resume Next
        ' Convert MyNumber to a string, trimming extra spaces.
        MyNumber = Trim(Str(MyNumber))

        ' Find decimal place.
        DecimalPlace = InStr(MyNumber, ".")

        ' If we find decimal place...
        If DecimalPlace > 0 Then
                ' Convert Digits
                Temp = Left(MyNumber.Substring(DecimalPlace) & "00", 2)
                Digits = " and " & ConvertTens(Temp)

                ' Strip off Digits from remainder to convert.
                MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
        End If

        '===============================================================
        Dim TM As String' If MyNumber between 1 To 99 Only.
        TM = Right(MyNumber, 2)

        If Len(MyNumber) > 0 And Len(MyNumber) <= 2 Then
                If Len(TM) = 1 Then
                        Words = ConvertDigit(TM)
                        NumberToWord = Words & Digits
                        Exit Function
                Else
                        If Len(TM) = 2 Then
                                Words = ConvertTens(TM)
                                NumberToWord = Words & Digits
                                Exit Function
                        End If
                End If
        End If
        '===============================================================

        ' Convert last 3 digits of MyNumber to number in word.
        Hundreds = ConvertHundreds(Right(MyNumber, 3))
        ' Strip off last three digits
        MyNumber = Left(MyNumber, Len(MyNumber) - 3)

        iCount = 0
        Do While MyNumber <> ""
                'Strip last two digits
                Temp = Right(MyNumber, 2)
                If Len(MyNumber) = 1 Then
                        If Trim(Words) = "Thousand" Or Trim(Words) = "HundredThousand" Or Trim(Words) = "Hundred" Then
                                Words = ConvertDigit(Temp) & place(iCount)
                                MyNumber = Left(MyNumber, Len(MyNumber) - 1)
                        Else
                                Words = ConvertDigit(Temp) & place(iCount) & Words
                                MyNumber = Left(MyNumber, Len(MyNumber) - 1)
                        End If
                Else
                        If Trim(Words) = "Thousand" Or Trim(Words) = "HundredThousand" Or Trim(Words) = "Hundred" Then
                                Words = ConvertTens(Temp) & place(iCount)
                                MyNumber = Left(MyNumber, Len(MyNumber) - 2)
                        Else
                                '=================================================================
                                If Trim(ConvertTens(Temp) & place(iCount)) = "Hundred" Then
                                        Words = Words
                                        MyNumber = Left(MyNumber, Len(MyNumber) - 2)
                                Else
                                        Words = ConvertTens(Temp) & place(iCount) & Words
                                        MyNumber = Left(MyNumber, Len(MyNumber) - 2)
                                End If
                        End If
                End If
                iCount = iCount + 2
        Loop
       
        NumberToWord = " " & Words & Hundreds & Digits & ""
End Function

    ' Conversion for hundreds
    '*****************************************
Private Function ConvertHundreds(ByVal MyNumber As String)
        Dim Result As String

        ' Exit if there is nothing to convert.
        If Val(MyNumber) = 0 Then Exit Function

        ' Append leading zeros to number.
        MyNumber = Right("000" & MyNumber, 3)

        ' Do we have a hundreds place digit to convert?
        If Left(MyNumber, 1) <> "0" Then
                Result = ConvertDigit(Left(MyNumber, 1)) & " Hundred "
        End If

        ' Do we have a tens place digit to convert?
        If MyNumber.Substring(1, 1) <> "0" Then
                Result = Result & ConvertTens(MyNumber.Substring(1))
        Else
                ' If not, then convert the ones place digit.
                Result = Result & ConvertDigit(MyNumber.Substring(2))
        End If

        ConvertHundreds = Trim(Result)
End Function

    ' Conversion for tens
    '*****************************************

Private Function ConvertTens(ByVal MyTens)
        Dim Result As String

        ' Is value between 10 and 19?
        If Val(Left(MyTens, 1)) = 1 Then
                Select Case Val(MyTens)
                        Case 10 : Result = "Ten"
                        Case 11 : Result = "Eleven"
                        Case 12 : Result = "Twelve"
                        Case 13 : Result = "Thirteen"
                        Case 14 : Result = "Fourteen"
                        Case 15 : Result = "Fifteen"
                        Case 16 : Result = "Sixteen"
                        Case 17 : Result = "Seventeen"
                        Case 18 : Result = "Eighteen"
                        Case 19 : Result = "Nineteen"
                        Case Else
                End Select
        Else
                ' .. otherwise it's between 20 and 99.
                Select Case Val(Left(MyTens, 1))
                        Case 2 : Result = "Twenty "
                        Case 3 : Result = "Thirty "
                        Case 4 : Result = "Forty "
                        Case 5 : Result = "Fifty "
                        Case 6 : Result = "Sixty "
                        Case 7 : Result = "Seventy "
                        Case 8 : Result = "Eighty "
                        Case 9 : Result = "Ninety "
                        Case Else
                End Select

                ' Convert ones place digit.
                Result = Result & ConvertDigit(Right(MyTens, 1))
        End If

        ConvertTens = Result
End Function

Private Function ConvertDigit(ByVal MyDigit)
        Select Case Val(MyDigit)
                Case 1 : ConvertDigit = "One"
                Case 2 : ConvertDigit = "Two"
                Case 3 : ConvertDigit = "Three"
                Case 4 : ConvertDigit = "Four"
                Case 5 : ConvertDigit = "Five"
                Case 6 : ConvertDigit = "Six"
                Case 7 : ConvertDigit = "Seven"
                Case 8 : ConvertDigit = "Eight"
                Case 9 : ConvertDigit = "Nine"
                Case Else : ConvertDigit = ""
        End Select
End Function

页: [1]
查看完整版本: 【ActiveReports】数字转英文大写脚本函数