在水晶報表,公式工作室中新建報表自定義函數,函數內容如下:
Function (stringvar number)
(
stringvar str1 := "零壹貳叁肆伍陸柒捌玖"; //0-9所對應的漢字
stringvar str2 := "萬仟佰拾億仟佰拾萬仟佰拾元角分"; //數字位所對應的漢字
stringvar str3 := ""; //從原num值中取出的值
stringvar str4 := ""; //數字的字符串形式
stringvar str5 := ""; //人民幣大寫金額形式
numbervar i:=0; //循環變量
numbervar j:=0; //num的值乘以100的字符串長度
stringvar ch1 := ""; //數字的漢語讀法
stringvar ch2 := ""; //數字位的漢字讀法
numbervar nzero := 0; //用來計算連續的零值是幾個
numbervar temp; //從原num值中取出的值
numbervar num := Round(Abs(tonumber(number)),2); //將num取絕對值并四舍五入取2位小數
str4 := totext(tonumber(num*100),0); //將num乘100并轉換成字符串形式
str4:=replace(str4,",","");
j := Length(str4); //找出最高位
if j > 15 then
"字符串太長"
else
(
str2 := mid(str2,15-j+1); //取出對應位數的str2的值。如:200.55,j為5所以str2=佰拾元角分
//循環取出每一位需要轉換的值
for i:=1 to j step 1 do
(
str3 :=mid(str4,i,1); //取出需轉換的某一位的值
temp := int(tonumber(str3)); //轉換為數字
if (i <> (j-3) and i <> (j-7) and i <> (j-11) and i <> (j-15)) then
(
//當所取位數不為元、萬、億、萬億上的數字時
if (str3 = "0") then
(
ch1 := "";
ch2 := "";
nzero := nzero + 1;
)
else
(
if(str3 <> "0" and nzero <> 0) then
(
ch1 := "零" + mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
else
(
ch1 := mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
)
)
else
(
//該位是萬億,億,萬,元位等關鍵位
if (str3 <> "0" and nzero <> 0) then
(
ch1 := "零" + mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
else
(
if (str3 <> "0" and nzero = 0) then
(
ch1 := mid(str1,temp*1+1,1);
ch2 := mid(str2,i,1);
nzero := 0;
)
else
(
if (str3 = "0" and nzero >= 3) then
(
ch1 := "";
ch2 := "";
nzero := nzero + 1;
)
else
(
if (j >= 11) then
(
ch1 := "";
nzero := nzero + 1;
)
else
(
ch1 := "";
ch2 := mid(str2,i,1);
nzero := nzero + 1;
)
)
)
)
);
if (i = (j-11) or i = (j-3)) then
(
if(mid(str4,j,1)="0" and mid(str4,j-1,1)="0" and mid(str4,j-2,1)="0" and mid(str4,j-3,1)="0") then
(
ch2:='元';////460000.00-肆拾陸萬拾整
)
else if(j=6 and mid(str4,j,1)="0" and mid(str4,j-1,1)="0" and mid(str4,j-3,1)="0") then
(
ch2:='';////1408.00-壹仟肆佰拾零捌元整
)
else if((j=5 or j=6) and mid(str4,j,1)="0" and mid(str4,j-1,1)<>"0" and mid(str4,j-2,1)="0") then
(
ch2:=ch2+'元';////3590.40-叁仟伍佰玖拾零肆角/770.70-柒佰柒拾零柒角
)
else if(j=7 and mid(str4,j-3,1)="0" and mid(str4,j-2,1)<>"0") then
(
ch2:='';////14704.00-壹萬肆仟柒佰拾零肆元整
)
else
(
//如果該位是億位或元位,則必須寫上
ch2 := mid(str2,i,1);
)
) ;
if(j=8 and i=3 and mid(str4,j-5,1)="0" and mid(str4,j-6,1)="0") then
(
ch2:='萬';////100800.00-壹拾零捌佰元整
);
str5 := str5 + ch1 + ch2;
if (i = j-1 and str3 = "0") then
(
////80.00-捌拾整
if(InStr(str5, '元') = 0) then
(
str5 := str5 + '元';
);
//最后一位(分)為0時,加上“整”
str5 := str5 + '整';
) ;
);
if (num = 0) then
(
str5 := "零元整";
) ;
str5
)
)
附件:
金額中文大寫.jpg