Oracle EBS 報表輸出字符字段前部"0"被Excel自動去掉問題


注:本文為原創,作為學習交流使用,轉載請標明作者及出處,作者保留追究法律責任的權力。

Lumen Su
lzsu1989#gmail.com (#=@)
 
Oracle  EBS 提供多種報表的開發和輸出形式,由於MS Excel在處理數據方面的優勢明顯,報表輸出用Excel打開是很常見的開發項。
但是正是由於Excel的“過於智能而不智能”,導致有時輸出字段會被Excel自動處理,導致數據錯誤。
 
例如: 系統內部字段,物料編碼/訂單標號 等等字段在數據庫內存儲的格式為 varchar, 在某些業務或者需求下,編碼方式為全數字的形式,如"100230001","100230002",... 這樣的字段在系統中沒問題,報表輸出到Excel也無問題;而有情況可能是,編號為 "000031001", "000031002","000031003",.... 這樣的情況,系統中是存儲了9位數的字符,而報表輸出到Excel之后,Excel就會認為他是一個數字,而非字符串,從而出現字符串前的"0"被截取,變成 "31001", "31002","31003",.... 這樣的錯誤不易被發覺,但是是一個很不友好的錯誤。
 
解決辦法:
1. 並發程序輸出 html 報表
這種類型的報表輸出的是html標簽(或者XML標簽),這種報表被截位的修復方法是在輸出的時候,把這個字段放在 =" "  內,例如,PLSQL代碼片段為:
 
fnd_file.put_line(fnd_file.output, '<div>000031001</div>');
 
變成:
 
fnd_file.put_line(fnd_file.output, '<div>="000031001"</div>');
 
或者
 
fnd_file.put_line(fnd_file.output, '<div>''000031001</div>');

 

 
解釋:
前一種方法,在Excel中,= 代表公式,而用雙引號括起來之后就是字符串的意思,就是說設置當前單元格為等於當前的值轉換為字符串的意思,類似於 oracle的 to_char() ;后一種方法,Excel中,在單元格值最前面加一個單引號表示這個單元格為“壞公式”,就是不自動計算的意思,Excel單元格要顯示公式,也是這種方法。
           
 
 
 
2. XML Publisher 報表
 
 XML publisher 報表除了用上面的兩種方法以外,還可以設置XML Publisher屬性來解決這個問題,直接看屬性截圖:
 

屬性設置為 “強制LTR” ,強制為數據格式,在Excel中就不會轉化為數字了,對應的 XML publisher 腳本代碼為:
<fo:bidi-override direction="ltr" unicode-bidi="bidi-override"><?ASSEMBLY?></fo:bidi-override>
 
 
 
歡迎補充其他方法! :)
 

注:本文為原創,作為學習交流使用,轉載請標明作者及出處,作者保留追究法律責任的權力。

Lumen Su
lzsu1989#gmail.com (#=@)
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM