home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Copyright 1999-2004 The Apache Software Foundation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" "document-v10.dtd">
-
- <document>
- <header>
- <title>HSSF Serializer</title>
- <version>0.9</version>
- <type>Technical document</type>
- <authors>
- <person name="Andrew C. Oliver" email="acoliver@apache.org"/>
- <person name="Marcus W. Johnson" email="mjohnson@apache.org"/>
- <person name="J├╢rg Heinicke" email="jheinicke@gmx.de"/>
- </authors>
- <abstract>This document describes the HSSF serializer of Cocoon.</abstract>
- </header>
- <body>
- <s1 title="HSSF Serializer">
- <p>The HSSF serializer catches SAX events and creates a spreadsheet in the
- XLS format used by Microsoft Excel (but the output looks just dandy in
- <link href="http://www.gnome.org/gnumeric">Gnumeric</link> or
- <link href="http://www.openoffice.org">OpenOffice.org</link> as well).
- </p>
- <p>The HSSF Serializer supports most of the functionality supplied by the
- <link href="http://jakarta.apache.org/poi/hssf">HSSF API</link> which is
- part of the
- <link href="http://jakarta.apache.org/poi">Jakarta POI project</link>.
- </p>
- <ul>
- <li>Name: xls</li>
- <li>Class: org.apache.cocoon.serialization.HSSFSerializer</li>
- <li>Cacheable: no</li>
- </ul>
- </s1>
- <s1 title="Usage">
- <p>Using the HSSF Serializer is fairly simple. You'll need a sitemap of
- course. Once you have that, well, you're half there. Add </p>
- <source><![CDATA[
- <map:serializer name="xls"
- src="org.apache.cocoon.serialization.HSSFSerializer"
- locale="us"/>
- ]]></source>
- <p>into the <code><map:serializers/></code> section of your sitemap.
- The locale is optional and is used only to validate numbers. Please note
- that numbers not in US-default format may not be compatible with Gnumeric
- (it's less cosmopolitan then the HSSF Serializer ;-) ). Setting the locale
- lets you use default number formats from other locales. Set this to a two
- letter lowercase country code. See java.util.Locale for details.
- </p>
- <p>Next, set up an entry for each URL or set of URLs (via matching rules)
- resembling this:
- </p>
- <source><![CDATA[
- <map:match pattern="hello.xls">
- <map:generate src="docs/samples/hello-page.xml"/>
- <map:transform src="stylesheets/page/simple-page2xls.xsl"/>
- <map:serialize type="xls"/>
- </map:match>
- ]]></source>
- <p>The most important question is now, which what XML the serializer is fed.
- You will get it answered in the next paragraph.</p>
- </s1>
- <s1 title="Required XML Format">
- <p>The HSSF Serializer expects data in the same XML language as the popular
- spreadsheet progam Gnumeric. You have different possibilities to get such
- a document:</p>
- <ul>
- <li>You can create and save a spreadsheet using Gnumeric.</li>
- <li>You can write it yourself using the
- <link href="http://cvs.gnome.org/lxr/source/gnumeric/gnumeric.xsd">
- Schemas</link> or DTDs available at the
- <link href="http://www.gnome.org/gnumeric">Gnumeric's website</link>
- or in Gnumeric's CVS repository.
- </li>
- <li>You can take one of the samples delivered with Cocoon and start from
- there.</li>
- <li>Or you use the empty workbook from appendix A in
- <link href="http://www.superlinksoftware.com/gnumeric-xml.pdf">
- The Gnumeric File Format PDF</link> (all further references to 'PDF'
- mean this file), which can further simplified to the following:<br/>
- </li>
- </ul>
- <source><![CDATA[
- <gmr:Workbook xmlns:gmr="http://www.gnome.org/gnumeric/v7">
- <gmr:SheetNameIndex>
- <gmr:SheetName>Sheet1</gmr:SheetName>
- </gmr:SheetNameIndex>
- <gmr:Sheets>
- <gmr:Sheet>
- <gmr:Name>Sheet1</gmr:Name>
- <gmr:MaxCol>-1</gmr:MaxCol>
- <gmr:MaxRow>-1</gmr:MaxRow>
- <gmr:Cells>
- <!-- add your cells here -->
- </gmr:Cells>
- </gmr:Sheet>
- </gmr:Sheets>
- </gmr:Workbook>
- ]]></source>
- <p>While HSSFSerializer ignores the bulk of the elements, it is suggested
- you provide at a minimum the basic elements as in the list below. As a
- general rule, if Gnumeric in the versions 0.7 - 1.04 will load the XML
- (provided it is tar'd and gzipped as expected), then the HSSFSerializer
- should be able to handle it.</p>
- <p>As a general guideline the following elements are supported in this
- release. For the nesting have a look into the sample files or the PDF.
- </p>
- <ul>
- <li>
- <code>gmr:Workbook</code> - Required. Basically the root element.
- </li>
- <li>
- <code>gmr:Sheets</code> - Required. Container for the spreadsheets.
- </li>
- <li>
- <code>gmr:Sheet</code> - Required for each sheet. For the attributes
- have a look at the example above or into the PDF.
- </li>
- <li>
- <code>gmr:Name</code> - Required? Defines the sheet's name as it
- appears on the little tabs under the workbook in your favorite GUI
- spreadsheet application.
- </li>
- <li>
- <code>gmr:MaxRow</code>, <code>gmr:MaxCol</code> - Used to set the
- dimensions for the sheet. This can be wrong and your spreadsheet
- application may not care, but some other ports depend upon this, so
- we set it to be compatible.
- </li>
- <li>
- <code>gmr:Rows</code>, <code>gmr:Cols</code> - Used to determine the
- default row or column width in points via the attribute
- <code>DefaultSizePts</code>.
- </li>
- <li>
- <code>gmr:RowInfo</code>, <code>gmr:ColInfo</code> - Used to
- determine the row height/column width for a specific row/column in
- points.<br/>
- Attributes:
- <ul>
- <li><code>No</code> - row/column number</li>
- <li><code>Unit</code> - row/column height</li>
- </ul>
- The count of the rows/columns starts with 0.
- </li>
- <li>
- <code>gmr:Cells</code> - Required. Container for all cells.
- </li>
- <li>
- <code>gmr:Cell</code> - Defines the actual column and row number as
- well as the data type.<br/>
- Attributes:
- <ul>
- <li><code>Row</code> - row number</li>
- <li><code>Col</code> - col number</li>
- <li>
- <code>ValueType</code> - the data type<br/>
- If you don't specify the data type, the cell content will not
- be shown! The type is determined by a numerical key, where
- the following are known: 10 - empty, 20 - boolean,
- 30 - integer, 40 - float, 50 - error, 60 - string,
- 70 - cell range, 80 - array
- </li>
- </ul>
- </li>
- <li>
- <code>gmr:Content</code> - Defines the start of the value contained
- in the cell. This is obsolete as of Gnumeric 1.03. It's not
- recommended to use it, because it may not be supported in future
- versions. With POI release 1.5.1 I didn't use <code>gmr:Content</code>,
- but I had to specify '10' as <code>ValueType</code> on empty cells.
- Otherwise I got strange output.
- </li>
- <li>
- <code>gmr:Styles</code> - Required if you want to use styles.
- Container for <code>gmr:StyleRegion's</code>.
- </li>
- <li>
- <code>gmr:StyleRegion</code> - Defines the region that the style
- applies to.<br/>
- Attributes:
- <ul>
- <li><code>startRow</code> - self-explanatory</li>
- <li><code>startCol</code> - self-explanatory</li>
- <li><code>endRow</code> - self-explanatory</li>
- <li><code>endCol</code> - self-explanatory</li>
- </ul>
- Again: The count of the rows/columns starts with 0.
- </li>
- <li>
- <code>gmr:Style</code> - Specifies the style for a StyleRegion.<br/>
- Attributes:
- <ul>
- <li>
- <code>HAlign</code> - specifies the horizontal alignment.<br/>
- Possible values: 1 - general, 2 - left, 4 - right, 8 - center,
- 16 - fill, 32 - justify, 64 - center across selection
- </li>
- <li>
- <code>VAlign</code> - specifies the vertical alignment.<br/>
- Possible values: 1 - top, 2 - bottom, 4 - center, 8 - justify
- </li>
- <li>
- <code>WrapText</code> - specifies whether to wrap text around
- or not<br/>
- Possible values: 0 - don't wrap, 1 - do wrap
- </li>
- <li>
- <code>Shade</code> - kind a stupid flag<br/>
- If you're setting a background color and want it filled ...
- use Shade="1".
- </li>
- <li>
- <code>Format</code> - number format to use.<br/>
- Generally, Excel and Gnumeric have the same formats.
- </li>
- </ul>
- </li>
- <li>
- <code>gmr:Font</code> - Defines the font used for the style region.<br/>
- Attributes:
- <ul>
- <li><code>Bold</code> - self-explanatory</li>
- <li><code>Italic</code> - self-explanatory</li>
- <li><code>Underline</code> - self-explanatory</li>
- <li><code>StrikeThrough</code> - self-explanatory</li>
- </ul>
- Set the values of the attributes to 0 or 1 to disable or enable a
- specific font style.
- </li>
- <li>
- <code>gmr:StyleBorder</code> - Defines the borders that are used for
- a style region. It contains one element for each possible border
- specifying the style and the color of the border.
- </li>
- </ul>
- <p>For more specific information on the Gnumeric file format, especially on
- some more interesting attributes or attribute values or the nesting of
- the elements, I only can recommend you to read the PDF or to have a look
- at the sample files. If you want it more complicated, you can also get
- the information from the Schema file (look above for the link).</p>
- </s1>
- <s1 title="Automatic Excel Spreadsheet Generation">
- <p>Hmm, I don't want to say to much on this. I showed you the XML the
- serializer wants to have. Now it's up to you to generate this XML
- dynamically. The best way to do this is using a XSLT stylesheet. You need
- some information on this? Hmm, have a look at the
- <link href="http://www.w3.org/Style/XSL/">W3C's XSL page</link>. From
- there you get many links to tutorials, articals, the surprisingly
- readable XSLT spec and so on.
- </p>
- </s1>
- <s1 title="Future Features">
- <p>So HSSF Serializer is well on its way to being darn near everything you
- need to create fancy smancy reports in Excel or OpenOffice. (And you can
- just serialize the output from your stylesheets as XML for Gnumeric
- version).</p>
- <ul>
- <li>Add support for formulas. (not yet supported by HSSF)</li>
- <li>Add support for custom data formats. (not yet supported by HSSF)</li>
- </ul>
- </s1>
- </body>
- </document>
-