zoukankan      html  css  js  c++  java
  • 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!
  • 相关阅读:
    ASP内置对象
    VBscript脚本语言
    2018校园招聘求职记
    0.3W微功率放大器
    画一画BeagleboneBlack的PCB
    硬件类实习面试经历(已跪)
    2017会是改变人生轨迹的一年
    windows下使用vs code调试简单的C程序
    Beagleboneblack的MLO文件干了些啥
    模仿u-boot的makefile结构
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2612681.html
Copyright © 2011-2022 走看看