Report_客制化Excel报表中的XLS标记(案例)
2014-06-06 Created By BaoXinjian
一、摘要
分析文件结构,能够使我们清楚的掌握要用程序输出一个正确的脚本所必须的要素。
XML和HTML的一个很大的区别在于,HTML为已定义的标签,每一个标签在浏览器中作用并不会存在很大的冲突,
这里的意思是,浏览器在解释HTML脚本的时候,并不会太严格,原因是互联网刚发展的时候网络并不佳,请求丢包很多,
所以HTML在丢失少量tag或某些特殊字符时,并不会出现严重的问题。
但是XML不一样,XML是结构化自定义的,在确定了namespaces的情况下,必须按照namespace的结构定义来组成XML文件,
特别是应用程序特殊处理的XML文件,不能出现细微错误的情况,例如tag有开始没有结束时,在Excel中就无法正确打开这个XML文件。
XML数据表格格式的Excel文件的顶级tag是Workbook,二级Tag主要有以下几种
二、标记解释
4.1 XML头
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
XML文件头以
<?xml version="1.0"?>
开始,表明这是一个XML文件;对于需要用Excel来默认打开的XML文件,需要再加一句:
<?mso-application progid="Excel.Sheet"?>
表明此XML文件用Excel默认打开。
4.2 Tag: Namespaces
<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">
这个部分为XML的开始,我们可以看到XML电子表格格式的Excel文件的顶级tag是<workbook> ,放在这个tag里面的属性为Namespace信息,
相关控制文件都来自Microsoft.com,说明Excel在打开这种类型的XML文件的时候,是严格按照这几个Namespaces的格式来读取文件的。
这个部分的Namespaces信息为固定的,必须的内容。
4.3 Tag: DocumentProperties
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Created>2012-02-13T11:21:51Z</Created>
<LastSaved>2012-02-13T14:03:08Z</LastSaved>
<Version>14.00</Version>
</DocumentProperties>
这个部分主要设置Excel的文档属性内容,可以看到里有创建时间,修改时间和版本信息。
4.4 Tag: OfficeDocumentSettings
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
<AllowPNG/>
<RemovePersonalInformation/>
</OfficeDocumentSettings>
这个部分设置Offce 文档属性。
4.5 Tag: ExcelWorkbook
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>11640</WindowHeight>
<WindowWidth>19200</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>90</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
这个部分设置工作表的属性。
4.6 Tag: Styles
<Styles>
<Style ss:ID="m76469184">
<Alignment ss:Vertical="Bottom" ss:Rotate="90" ss:Horizontal="Center"/>
<Borders>
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Bottom"/>
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Left"/>
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Right"/>
<Border ss:Weight="1" ss:LineStyle="Continuous" ss:Position="Top"/>
</Borders>
<Font ss:Size="8" ss:FontName="Helv" ss:Bold="1" x:Family="Swiss"/>
<Interior ss:Color="#FFFF99" ss:Pattern="Solid"/>
<NumberFormat ss:Format="Fixed"/>
</Style>
</Styles>
Style是一个可以作很大文章的部分,里面的属性设置包含了Excel里面常见的所有单元格,数据,颜色,方向等等,以ID的方式关联到具体的行,列或者单元格,对工作薄的格式设置支持比较完全。
4.7 Tag: Worksheet
这个部分为工作薄的数据表格部分,格式引用Styles中定义的Style。
每一个Worksheet代表一个工作薄,即Excel中每一个工作页,”ss:Name” 代表工作表的名字,可以有多个工作表,不可重名。
4.7.1 <Table> (必须)
(1).Table的二级标签主要是<Column>和<Row>:
<Column>主要作用是放在< Row >之前,控制每一列的宽度,不作显示数据用;
< Row >是具体行,<Row>标签内是<Cell>,确定行内的每一个单元格。
(2).Table的形式是这样的,先确定列宽度,然后确定行,然后确定单元格,其中值得注意的是列宽只能在<Column>的属性里确定,不能在<Cell>里指定单元格宽度;行高只能在<Row>的属性里确定,不能在<Cell>里指定单元格高度。
<Column ss:StyleID="xxC" ss:Width="35" ss:AutoFitWidth="0"/>
<Row ss:StyleID="xxR" ss:Height="15" ss:AutoFitHeight="0">
4.7.2 <WorksheetOptions> (非必须)
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup><Print><Zoom>80</Zoom><Selected/><Panes><ProtectObjects>False</ProtectObjects><ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
三、案例
把”.xls”或”.xlsx”文件以”XML数据表格”的格式另存,用记事本或其他文本编辑器打开,就可以看到此表格的XML脚本。
这种形式的Excel文件脚本大体分为4个部分,XML头,Excel样式,Sheet主数据块,XML尾。
1. 一个简单的XLS标记表格 - 通过PLSQL输出
<?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. 输出格式
Thanks and Regards
参考:Lumen Su - http://www.cnblogs.com/lzsu1989/archive/2012/02/24/2366766.html
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建