Report_客制化以PLSQL输出XLS标记实现Excel报表(案例)

2015-02-12 Created By BaoXinjian

一、摘要


在EBS系统中,报表是一个非常重要的客户化开发内容,也是系统一种比较常见的数据输出形式。

报表的做法有很多种,输出格式也有多种,较为常见的就是“数据文件+报表模板”的形式,例如用脚本程序输出XML数据源,RTF模板控制数据格式的方式。

也有直接用PLSQL程序输出HTML格式的报表,数据和格式统一在程序中控制。

 

Excel是一种非常常用的办公软件,操作比较容易被用户接受,对表格中数据的控制也比较容易,一系列的公式支持也为用户节省了很大的工作量。

Excel标准格式为".xls"或".xlsx"文件格式,也可以另存为XML数据表格的格式(".xml"),这就为程序直接输出XML格式的脚本来生成Excel表格提供了有利条件。

经过实际的操作,利用这种方式输出的报表,可以在EBS R12中输出,在Excel中打开,并且可以进行表格相关格式控制。

  • 注1:Excel文件 ”.xls” 或”.xlsx” 另存为”.xml”文件可能存在兼容性问题。
  • 注2:Excel文件”.xls” 或”.xlsx”与”.xml”之间的相互转换可能存在一些对象的不相互兼容问题(例如”.xls”或”.xlsx”中的图表)。相关支持内容请查看MSDN。

 

二、解决方案


以当前项目中的实际为例,客户要求对生产计划和效率产出做一个比较,月初做计划,月底做对比,提交并发程序输出报表。

设计文档中报表的样式为Excel表格,其中一些特殊的格式,

例如竖排文字,多次汇总,分隔汇总,数据格式控制,公式,字体,表格状的动态增长报表,经过分析,这种形式的报表用Excel的形式输出是非常合适的,相类似HTML在格式控制上没有Excel灵活。

所以此文需要解决的问题是,输出Ecxel脚本报表。

Excel的”.xls”或”.xlsx”为二进制文件,直接输出二进制脚本可行性并不大,难度大,所以改用XML脚本的Excel文件来输出。

 

、简单例子


案例:把”.xls”或”.xlsx”文件以”XML数据表格”的格式另存,用记事本或其他文本编辑器打开,就可以看到此表格的XML脚本。

这种形式的Excel文件脚本大体分为4个部分,XML头,Excel样式,Sheet主数据块,XML尾。

1. XLS标记

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Worksheet ss:Name="Demo Sheet">
  <Table>
   <Row>
    <Cell><Data ss:Type="String">Hello!World!</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Hello!World!</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Hello!World!</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
</Workbook>

2. EXECL查看

 

 

、通过PLSQL输出XLS标记


通过在程序fnd_output.put_line输出标记

 

、并发程式设定


在实际开发的过程中,一般流程是现在Excel中确定报表的模板,格式,然后把”.xls” 或”.xlsx” 另存为”.xml”文件,用文本编辑器编辑一些内容,删除冗余代码,然后再关键逻辑(一般是动态增长的部分)用程序逻辑来控制输出即可。

可执行和并发程序的定义和标准一致,并发程序的输出用“HTML”。 

Step1. 设定可执行程式

Step2. 设定并发程式

Step3. 预览Excel方式

Step4. 开发和保存方式

 

、获取XLS标记


对于开发时,没有必要一行一行的写脚本,先用Excel编辑”.xls” 或”.xlsx” 文件,然后另存为”.xml”文件,把一些非必须的脚本代码删除,有关键逻辑的地方特殊处理,就可以在plsql代码中直接输出了。

对于一些特殊的格式,属性的设置,也没有太大的必要去记住,在需要时,”.xls” 或”.xlsx” 文件逆向工程生成XML文件就可以根据ID查出单元格等各种属性的设置。

注:用逆向工程生成的代码,在<styles>内重复率很高,代码重用率不高,对于这种代码,可以进行合并,在指定worksheet里各个tag的属性时,根据需要,调整ID,清除不必要的重复。

 

Thanks and Regards

参考:Lumen Su - http://www.cnblogs.com/lzsu1989/archive/2012/02/24/2366766.html

posted on 2014-06-25 16:39  东方瀚海  阅读(1172)  评论(0编辑  收藏  举报