Oracle EBS R12 XML数据表格的Excel脚本报表 PLUS :问题杂烩

之前谈过XML数据表格的Excel脚本报表(原文),是概括性知识性的理解,一些很细的问题没有涉及,这几周实际的开发中发现一些问题,是很关键的细节问题,如果不注意的话,很有可能在实际输出的时候,出现问题,并且作为解释性的脚本,调试起来本身不可能,只可能用Excel的错误信息去缩小范围(不靠谱),但往往Excel的错误信息很有可能是关联引发的,要找到“罪魁祸首”,确实要仔细仔细再仔细的检查,XML本身可以说是很自由的,但是要用Excel这种应用程序打开处理脚本文件,就必须有严格的控制,或许只是一个符号的遗漏,就会导致整个脚本文件的错误,这些在前文中已经说明,不在叙述。
 
一些问题,在此列出来,一起探讨。
 
1. Debug
严格意义上说,不能叫真正的Debug, 因为本身输出的就是脚本,不存在编译,所以只有根据打开脚本时Excel解析的结果来判断,还好Excel是会记录错误解析信息的,这点是好事,但是不幸的是,这个日志,并不能那么精确和准确。如下图:
我们打开这个log文件
复制代码
1 在 表 出现 XML 错误  
2
原因: 非法的标记
3
文件: C:\Documents and Settings\hand\Desktop\新建 文本文档.xml
4
组: Row
5
标志: Row
6

7
在 表 出现 XML 错误
8
原因: 非法的标记
9
文件: C:\Documents and Settings\hand\Desktop\新建 文本文档.xml
10 组: Row
11 标志: Row
12
13 在 表 出现 XML 错误
14 原因: 非法的标记
15 文件: C:\Documents and Settings\hand\Desktop\新建 文本文档.xml
16 组: Row
17 标志: Row
18

19 。。。。。。
20 (此处省略N行)
21 。。。。。。
22
23 此元素堆栈或此元素下面的堆栈发生错误:
24 <ss:Workbook>
25 <ss:Worksheet>
26 <ss:Table>
27 <ss:Row>
复制代码
很不友好,是吧。一方面,他能告诉我们一些信息,但是无法定位,这点确实很头疼的,另一方面,实际开发的时候很有可能遇到指鹿为马的问题,例如日志告诉我们 "ss:Index" 的值为"10"错误,但是会发现脚本根本没有"ss:Index=10"的脚本。
所以,尽量仔细是惟一的解决吧。
 
 
2. <Cell> 的属性 ss:Index
 
Cell标签的 属性 ss:Index是用来确定Cell的列的位置,即列号。输出的时候,从左往右输出,一般不需要指定这个属性,因为每个Cell 默认增长1, 但是有特殊情况,而且这种情况是十分常见的,如下图:

 
对应的脚本应该是 (省略列G之前的脚本)
105行:
1 <Cell ss:Index="7"><Data ss:Type="String">7</Data></Cell> 
2 <Cell ss:Index="8"><Data ss:Type="String">8</Data></Cell>
3 <Cell ss:Index="9"><Data ss:Type="String">9</Data></Cell>
4 <Cell ss:Index="10"><Data ss:Type="String" ss:MergeDown="3" >10</Data></Cell>
5 <Cell ss:Index="11"><Data ss:Type="String">11</Data></Cell>
6 <Cell ss:Index="12"><Data ss:Type="String">12</Data></Cell>
106行:
1 <Cell ss:Index="7"><Data ss:Type="String">7</Data></Cell> 
2 <Cell ss:Index="8"><Data ss:Type="String">8</Data></Cell>
3 <Cell ss:Index="9"><Data ss:Type="String">9</Data></Cell>
4 <Cell ss:Index="11"><Data ss:Type="String">11</Data></Cell>
5 <Cell ss:Index="12"><Data ss:Type="String">12</Data></Cell>
其中,105行,106行,107行,除了列"K" ,也就是 ss:Index="11" 的Cell 一定需要 ss:Index之外,其他的Cell都不需要 ss:Index值
 
也就是说  ss:Index 有跳跃的时候,  ss:Index 属性时必填的
 
3. <Cell> 属性ss:Formula
 
cell标签可设置单元格的公式,这是一个非常强大的功能,运用Excel强大的数据计算能力,是Excel 数据脚本的XML报表的关键。
在设置Cell的公式属性时,必须理解这里公式的单元格定位,公式中的含义如下:
R :行
C :列
-   :向左
+  :向右
 
举个例子就应该知道其中的含义了,例如:
ss:Forluma = "= R[+1]C[+2] + R[+1]C[+3]"
当前单元格为 A1,则A1的公式就是 B3 + B4
 
ss:Forluma = "= R[-1]C[-2] + R[-1]C[-3]"
当前单元格为 A1,(不正确),单元格定位错误,(超出范围)
 
ss:Forluma = "= RC[+2] + RC[+3]"
当前单元格为 A1,则A1的公式就是 C1 + D1
 
ss:Forluma = "= R[+2]C + R[+3]"C
当前单元格为 A1,则A1的公式就是 A3 + D3
 
注意数字是偏移量,正负代表方向就OK!
原文地址:https://www.cnblogs.com/quanweiru/p/2612681.html