Oracle EBS R12 XML数据表格的Excel脚本报表

一.概述

在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

 

 

二. 解决的问题

2.1 解决的问题

以当前项目中的实际为例,客户要求对生产计划和效率产出做一个比较,月初做计划,月底做对比,提交并发程序输出报表。设计文档中报表的样式为Excel表格,其中一些特殊的格式,例如竖排文字,多次汇总,分隔汇总,数据格式控制,公式,字体,表格状的动态增长报表,经过分析,这种形式的报表用Excel的形式输出是非常合适的,相类似HTML在格式控制上没有Excel灵活。

所以此文需要解决的问题是,输出Ecxel脚本报表。Excel的”.xls”或”.xlsx”为二进制文件,直接输出二进制脚本可行性并不大,难度大,所以改用XML脚本的Excel文件来输出。

 

 

 

2.2 准备

相关工具及输入输出

编程:PLSQL Developer X

输出:XML

系统:EBS R12

浏览器:(建议为)IE8及以上版本

其他:Office 20XX

                                                       

注:多次测试发现IE6在打开特定头的XML文件时,常出现卡死状态,不建议使用。

 

三. 一个最简单的XML格式的Excel报表

把”.xls”或”.xlsx”文件以”XML数据表格”的格式另存,用记事本或其他文本编辑器打开,就可以看到此表格的XML脚本。这种形式的Excel文件脚本大体分为4个部分,XML头,Excel样式,Sheet主数据块,XML尾。

Oracle EBS R12 XML数据表格的Excel脚本报表_第1张图片

 

其中有一些部分的信息是可以没有的,经过简化,将一个最基本的文件结构提取出来,形成如下的例子。

 

3.1 脚本代码

复制代码
 1 xml version="1.0"?>  
2
mso-application progid="Excel.Sheet"?>
3
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
4
xmlns:o="urn:schemas-microsoft-com:office:office"
5
xmlns:x="urn:schemas-microsoft-com:office:excel"
6
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
7
xmlns:html="http://www.w3.org/TR/REC-html40">
8
<Worksheet ss:Name="Demo Sheet">
9
<Table>
10 <Row>
11 <Cell><Data ss:Type="String">Hello!World!Data>Cell>
12 Row>
13 <Row>
14 <Cell><Data ss:Type="String">Hello!World!Data>Cell>
15 Row>
16 <Row>
17 <Cell><Data ss:Type="String">Hello!World!Data>Cell>
18 Row>
19 Table>
20 Worksheet>
21 Workbook>
复制代码

 

 

3.2 效果

用Excel打开文件,效果如下:

 

Oracle EBS R12 XML数据表格的Excel脚本报表_第2张图片

 

 

四. XML格式的Excel文件结构分析

分析文件结构,能够使我们清楚的掌握要用程序输出一个正确的脚本所必须的要素。XML和HTML的一个很大的区别在于,HTML为已定义的标签,每一个标签在浏览器中作用并不会存在很大的冲突,这里的意思是,浏览器在解释HTML脚本的时候,并不会太严格,原因是互联网刚发展的时候网络并不佳,请求丢包很多,所以HTML在丢失少量tag或某些特殊字符时,并不会出现严重的问题。但是XML不一样,XML是结构化自定义的,在确定了namespaces的情况下,必须按照namespace的结构定义来组成XML文件,特别是应用程序特殊处理的XML文件,不能出现细微错误的情况,例如tag有开始没有结束时,在Excel中就无法正确打开这个XML文件。

XML数据表格格式的Excel文件的顶级tag是Workbook,二级Tag主要有:

以下分别说明每一个tag的用途和主要属性。

                                                      

 

4.1 XML头

头信息(必须)

1 xml version="1.0"?> 
2
3 mso-application progid="Excel.Sheet"?>

 

XML文件头以

                 

开始,表明这是一个XML文件;对于需要用Excel来默认打开的XML文件,需要再加一句:

      

表明此XML文件用Excel默认打开。

 

注:后者其实可以不添加,打开时右键用Excel打开也是可行的,但是不推荐。

 

 

4.2 Tag: Namespaces

Namespaces信息(必须,固定内容)

1 <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
2 xmlns:o="urn:schemas-microsoft-com:office:office"
3 xmlns:x="urn:schemas-microsoft-com:office:excel"
4 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
5 xmlns:html="http://www.w3.org/TR/REC-html40">

 

这个部分为XML的开始,我们可以看到XML电子表格格式的Excel文件的顶级tag是 ,放在这个tag里面的属性为Namespace信息,相关控制文件都来自Microsoft.com,说明Excel在打开这种类型的XML文件的时候,是严格按照这几个Namespaces的格式来读取文件的。

这个部分的Namespaces信息为固定的,必须的内容。

 

4.3 Tag: DocumentProperties

DocumentProperties(非必须)

一个例子:

1 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> 
2 <Created>2012-02-13T11:21:51ZCreated>
3 <LastSaved>2012-02-13T14:03:08ZLastSaved>
4 <Version>14.00Version>
5 DocumentProperties>

这个部分主要设置Excel的文档属性内容,可以看到里有创建时间,修改时间和版本信息。

 

注:这个部分的信息非必须的意思是,系统输出XML之后,其实还是”.xml”格式的文件,用Excel打开之后,保存,这些信息会自动添加到脚本中,如果程序要求中不需要这样的信息,可以不添加。

 

4.4 Tag: OfficeDocumentSettings

OfficeDocumentSettings (非必须)

一个例子

1 <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"> 
2 <AllowPNG/>
3 <RemovePersonalInformation/>
4 OfficeDocumentSettings>

这个部分设置Offce 文档属性。

 

4.5 Tag: ExcelWorkbook

ExcelWorkbook (非必须)

一个例子:

复制代码
1 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> 
2 <WindowHeight>11640WindowHeight>
3 <WindowWidth>19200WindowWidth>
4 <WindowTopX>0WindowTopX>
5 <WindowTopY>90WindowTopY>
6 <ProtectStructure>FalseProtectStructure>
7 <ProtectWindows>FalseProtectWindows>
8 ExcelWorkbook>
复制代码

这个部分设置工作表的属性。

 

4.6 Tag: Styles

Styles(非必须)

Style是一个可以作很大文章的部分,里面的属性设置包含了Excel里面常见的所有单元格,数据,颜色,方向等等,以ID的方式关联到具体的行,列或者单元格,对工作薄的格式设置支持比较完全。

一个例子:

复制代码
 1 <Styles>  
2
<Style ss:ID="m76469184">
3
<Alignment ss:Vertical="Bottom" ss:Rotate="90" ss:Horizontal="Center"/>
4
<Borders>
5
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Bottom"/>
6
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Left"/>
7
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Right"/>
8
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Top"/>
9
Borders>
10 <Font ss:Size="8" ss:FontName="Helv" ss:Bold="1" x:Family="Swiss"/>
11 <Interior ss:Color="#FFFF99" ss:Pattern="Solid"/>
12 <NumberFormat ss:Format="Fixed"/>
13 Style>
14 Styles>
复制代码

以上这个例子中,中可以有若干个