不知大家是否遇到這樣一個情況,報表中輸出數字過大或者以“0”字符開頭的時候(僅指在Excel輸出中),會以科學計數法的形式顯示或者省略0的形式顯示,顯然這樣的效果不是客戶想要的結果。相信大家的第一想法就是將數字轉化為字符的格式,的確我們可以有不同的方法做這樣的處理,自己對項目上出現此類的情況提供一些兩種處理方式,均在rtf模板中處理(一般建議第一種方式):
1. 在對應的XML標簽中的窗體域中寫如下代碼(此方法對金額格式財務化也有借鑒作用)
<fo:bidi-override direction="ltr" unicode-bidi="bidi-override"><?AMOUNT?> </fo:bidi-override>
2. 對有比較大數字的列,在單元格中加上Excel的T()函數,比如,=T("AMOUNT")
3. 在程序裡面控制,類似:select '''' || '0000' from dual;(針對數字型)
4. html版本的類似處理:
.context td{
border:1px solid black;
padding:0.2mm 0.2mm 0.2mm 0.2mm;
white-space:nowrap;
font-size: 9.5pt;
mso-number-format:"\@";
}
同時需<TD nowrap align="left"> 變為 <TD nowrap align="left" x:str>
5. 當然如果查看報表的人員願意自己格式化來查看,那也不失為一種解決方法,不過從對甲方人員的了解來看,他們不太會願意去多點擊一下鼠標
說明:
上面1、2、3、4種方式都會有一個明顯的弊端,即無法對單元格數據進行計算。因此如果需要對單元格進行計算,則不能選擇以上兩種方式;如果能夠確定數據的量級大小,則可選擇直接數字輸出,不作任何處理。
同時,對於應用方式1出的excel報表,仔細觀察你會發現,字符的首尾都多出一個空字符,如下圖標記處所示:
延伸思考:Excel內自帶有貨幣形式的顯示,看能不能將此方式在rtf模板裡面函數化,以此達到想要的效果。
附上金額財務化函數:
–轉換金額輸出格式-字符
Function Get_Amount_Format(p_amount in number) return varchar2 is
l_amout_value varchar2(9999);
Begin
if p_amount <> 0 then
select trim(to_char(p_amount, '999,999,999,999,999,999.99'))
into l_amout_value
from dual;
return l_amout_value;
else
l_amout_value := '0.00';
return l_amout_value;
end if;
Exception
When others Then
Log_Msg('p_amount change format error:' || p_amount || '=' ||
sqlerrm);
return null;
End Get_Amount_Format;
以下是效果圖(數據均為測試數據):