數字轉國字格式-Crystal Reports公式 (Crystal Reports)

數字轉國字格式-Crystal Reports公式 (Crystal Reports)

數字轉換成支票格式的國字 銷售報表還蠻常看到的

先於公式欄式 新增公式名稱 num_chinese

右鍵編輯按ctrl+T

選擇basic語法 (非公式專家模式)

{pssales.Total_amt}是我要轉換的資料庫欄位名稱

輸入以下程式碼 儲存

Dim intPos As Number
Dim intI As Number
Dim intLength As Number
Dim strChaneseNo As String
Dim strCardinal1 As String
Dim strCardinal2 As String
Dim strTotal As String
Dim strTemp As String
Dim strX As String

strTotal = Cstr({pssales.Total_amt})
intPos = Instr(strTotal, ",")

While intPos > 1
  strTemp = strTemp & Left(strTotal, intPos-1)
  strTotal = Mid(strTotal, intPos + 1)
  intPos = Instr(strTotal, ",")
Wend
strTotal = strTemp & strTotal
if Instr(strTotal,".") > 1 Then
   strTotal = Mid(strTotal, 1, Len(strTotal) -3)
end if

strChaneseNo = "零壹貳參肆伍陸柒捌玖"
strCardinal1 = " 拾佰仟 拾佰仟 拾佰仟 拾佰仟"
strCardinal2 = "圓萬億兆"

intLength = Len(strTotal)
For intI = 1 To intLength Step 1
  If Val(Mid(strTotal, intI, 1)) = 0 AND (Val(Mid(strTotal, intI+1, 1)) = 0 Or (intLength - intI + 1 ) Mod 4 = 1) Then
    strX = strX & ""
  Else
    strX = strX & Mid(strChaneseNo, Val(Mid(strTotal, intI, 1)) +1 , 1)
  End If
  If (intLength - intI + 1) Mod 4 = 1 Or Val(Mid(strTotal, intI, 1)) = 0 Then
    strX=strX & ""
  Else
    strX = strX & Mid(strCardinal1, (intLength - intI + 1), 1)
  End If
  If (intLength - intI + 1) Mod 4 = 1 Then
    strX = strX & Mid(strCardinal2, (intLength - intI + 1) \ 4 + 1, 1)
    If IntI > 3 And (IntLength - IntI + 1) > 1 Then
        If Mid(strTotal,intI - 3, 4) = "0000" Then
      strX = Left(strX, Len(strX) - 1)
    End if
    End If
  End If
Next

Formula = strX & "整"


如有錯誤 歡迎指正