/*********************************************************************
*
* Copyright (C) 2002 Andrew Khan
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/
package jxl.demo;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.CellFormat;
import jxl.format.Colour;
import jxl.format.Font;
import jxl.format.Pattern;
/**
* Simple demo class which uses the api to present the contents
* of an excel 97 spreadsheet as an XML document, using a workbook
* and output stream of your choice
*/
public class XML
{
/**
* The output stream to write to
*/
private OutputStream out;
/**
* The encoding to write
*/
private String encoding;
/**
* The workbook we are reading from
*/
private Workbook workbook;
/**
* Constructor
*
* @param w The workbook to interrogate
* @param out The output stream to which the XML values are written
* @param enc The encoding used by the output stream. Null or
* unrecognized values cause the encoding to default to UTF8
* @param f Indicates whether the generated XML document should contain
* the cell format information
* @exception java.io.IOException
*/
public XML(Workbook w, OutputStream out, String enc, boolean f)
throws IOException
{
encoding = enc;
workbook = w;
this.out = out;
if (encoding == null || !encoding.equals("UnicodeBig"))
{
encoding = "UTF8";
}
if (f)
{
writeFormattedXML();
}
else
{
writeXML();
}
}
/**
* Writes out the workbook data as XML, without formatting information
*/
private void writeXML() throws IOException
{
try
{
OutputStreamWriter osw = new OutputStreamWriter(out, encoding);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("<?xml version=\"1.0\" ?>");
bw.newLine();
bw.write("<!DOCTYPE workbook SYSTEM \"workbook.dtd\">");
bw.newLine();
bw.newLine();
bw.write("<workbook>");
bw.newLine();
for (int sheet = 0; sheet < workbook.getNumberOfSheets(); sheet++)
{
Sheet s = workbook.getSheet(sheet);
bw.write(" <sheet>");
bw.newLine();
bw.write(" <name><![CDATA["+s.getName()+"]]></name>");
bw.newLine();
Cell[] row = null;
for (int i = 0 ; i < s.getRows() ; i++)
{
bw.write(" <row number=\"" + i + "\">");
bw.newLine();
row = s.getRow(i);
for (int j = 0 ; j < row.length; j++)
{
if (row[j].getType() != CellType.EMPTY)
{
bw.write(" <col number=\"" + j + "\">");
bw.write("<![CDATA["+row[j].getContents()+"]]>");
bw.write("</col>");
bw.newLine();
}
}
bw.write(" </row>");
bw.newLine();
}
bw.write(" </sheet>");
bw.newLine();
}
bw.write("</workbook>");
bw.newLine();
bw.flush();
bw.close();
}
catch (UnsupportedEncodingException e)
{
System.err.println(e.toString());
}
}
/**
* Writes out the workbook data as XML, with formatting information
*/
private void writeFormattedXML() throws IOException
{
try
{
OutputStreamWriter osw = new OutputStreamWriter(out, encoding);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("<?xml version=\"1.0\" ?>");
bw.newLine();
bw.write("<!DOCTYPE workbook SYSTEM \"formatworkbook.dtd\">");
bw.newLine();
bw.newLine();
bw.write("<workbook>");
bw.newLine();
for (int sheet = 0; sheet < workbook.getNumberOfSheets(); sheet++)
{
Sheet s = workbook.getSheet(sheet);
bw.write(" <sheet>");
bw.newLine();
bw.write(" <name><![CDATA["+s.getName()+"]]></name>");
bw.newLine();
Cell[] row = null;
CellFormat format = null;
Font font = null;
for (int i = 0 ; i < s.getRows() ; i++)
{
bw.write(" <row number=\"" + i + "\">");
bw.newLine();
row = s.getRow(i);
for (int j = 0 ; j < row.length; j++)
{
// Remember that empty cells can contain format information
if ((row[j].getType() != CellType.EMPTY) ||
(row[j].getCellFormat() != null))
{
format = row[j].getCellFormat();
bw.write(" <col number=\"" + j + "\">");
bw.newLine();
bw.write(" <data>");
bw.write("<![CDATA["+row[j].getContents()+"]]>");
bw.write("</data>");
bw.newLine();
if (row[j].getCellFormat() != null)
{
bw.write(" <format wrap=\"" + format.getWrap() + "\"");
bw.newLine();
bw.write(" align=\"" +
format.getAlignment().getDescription() + "\"");
bw.newLine();
bw.write(" valign=\"" +
format.getVerticalAlignment().getDescription() + "\"");
bw.newLine();
bw.write(" orientation=\"" +
format.getOrientation().getDescription() + "\"");
bw.write(">");
bw.newLine();
// The font information
font = format.getFont();
bw.write(" <font name=\"" + font.getName() + "\"");
bw.newLine();
bw.write(" point_size=\"" +
font.getPointSize() + "\"");
bw.newLine();
bw.write(" bold_weight=\"" +
font.getBoldWeight() + "\"");
bw.newLine();
bw.write(" italic=\"" + font.isItalic() + "\"");
bw.newLine();
bw.write(" underline=\"" +
font.getUnderlineStyle().getDescription() + "\"");
bw.newLine();
bw.write(" colour=\"" +
font.getColour().getDescription() + "\"");
bw.newLine();
bw.write(" script=\"" +
font.getScriptStyle().getDescription() + "\"");
bw.write(" />");
bw.newLine();
// The cell background information
if (format.getBackgroundColour() != Colour.DEFAULT_BACKGROUND ||
format.getPattern() != Pattern.NONE)
{
bw.write(" <background colour=\"" +
format.getBackgroundColour().getDescription() + "\"");
bw.newLine();
bw.write(" pattern=\"" +
format.getPattern().getDescription() + "\"");
bw.write(" />");
bw.newLine();
}
// The cell border, if it has one
if (format.getBorder(Border.TOP ) != BorderLineStyle.NONE ||
format.getBorder(Border.BOTTOM) != BorderLineStyle.NONE ||
format.getBorder(Border.LEFT) != BorderLineStyle.NONE ||
format.getBorder(Border.RIGHT) != BorderLineStyle.NONE)
{
bw.write(" <border top=\"" +
format.getBorder(Border.TOP).getDescription() + "\"");
bw.newLine();
bw.write(" bottom=\"" +
format.getBorder(Border.BOTTOM).getDescription() +
"\"");
bw.newLine();
bw.write(" left=\"" +
format.getBorder(Border.LEFT).getDescription() + "\"");
bw.newLine();
bw.write(" right=\"" +
format.getBorder(Border.RIGHT).getDescription() + "\"");
bw.write(" />");
bw.newLine();
}
// The cell number/date format
if (!format.getFormat().getFormatString().equals(""))
{
bw.write(" <format_string string=\"");
bw.write(format.getFormat().getFormatString());
bw.write("\" />");
bw.newLine();
}
bw.write(" </format>");
bw.newLine();
}
bw.write(" </col>");
bw.newLine();
}
}
bw.write(" </row>");
bw.newLine();
}
bw.write(" </sheet>");
bw.newLine();
}
bw.write("</workbook>");
bw.newLine();
bw.flush();
bw.close();
}
catch (UnsupportedEncodingException e)
{
System.err.println(e.toString());
}
}
}
|