zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    poj3693 Maximum repetition substring (后缀数组+rmq)
    spoj687 REPEATS
    bzoj3626: [LNOI2014]LCA (树链剖分+离线线段树)
    bzoj2243 [SDOI2011]染色 (树链剖分+线段树)
    SPOJ QTREE- Query on a tree (树链剖分)
    hdu5662 YJQQQAQ and the function (单调栈)
    hdu4348 To the moon (主席树 || 离线线段树)
    hdu3565 Bi-peak Number (有上界和下界的数位dp)
    修改文件上传大小限制
    强制不按行
  • 原文地址:https://www.cnblogs.com/eastsea/p/4195550.html
Copyright © 2011-2022 走看看