Oracle EBS 报表输出字符字段前部"0"被Excel自动去掉问题
2015-03-19 09:55
183 查看
Oracle EBS 报表输出字符字段前部"0"被Excel自动去掉问题
Posted on 2012-10-17 21:20Lumen Su 阅读(1291) 评论(0)
编辑
收藏
注:本文为原创,作为学习交流使用,转载请标明作者及出处,作者保留追究法律责任的权力。
Lumen Su[b]lzsu1989#gmail.com (#=@)[/b]
www.cnblogs.com/lzsu1989
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>
相关文章推荐
- Oracle EBS 报表输出字符字段前部"0"被Excel自动去掉问题
- ORACLE EBS xml publisher 报表输出字符字段前部"0"被EXCEL自动去掉问题
- ORACLE EBS 报表输出字符字段前部"0"被EXCEL自动去掉问题
- Oracle EBS Report 输出字符字段前部"0"被Excel自动去掉问题
- 如何处理Oledb中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
- oracle保存小数点前为"0"的问题
- GridView导出成Excel字符"0"丢失/数字丢失的处理方式
- oracle保存小数点前为"0"的问题
- oracle保存小数点前为"0"的问题
- Oracle EBS R12 XML数据表格的Excel脚本报表 -- PLUS :问题杂烩
- oracle保存小数点前为"0"的问题
- 数据库字段内容存在'、"、>、<等特殊字符,转义html字符输出
- oracle增加表字段时,加""引起的小问题
- 【python】 关于去掉转义字符\,输出中文字符(decode("string_escape"))
- EBS中RTF报表Excel格式输出字段长度不正确的解决办法
- xslt中的问题:"&lt;"(十六进制0x3C)是无效的属性字符
- ADODB使用excel的"Cannot modify the design of table 'xxxx'. It is in a read-only database"的问题
- 关于"密码最短长度为7,其中必须包含以下非字母数字字符: 1”的问题
- [原]在Oracle SOASUITE 10g Register ESB 报“The exception reported is: "javax.transaction.RollbackException: Timed out”问题的解决办法
- asp怎么输出的字段自动换行问题