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

原文地址:https://www.cnblogs.com/eastsea/p/4195550.html