Export to Different File Format"

From Documentation
Line 11: Line 11:
 
apply="org.zkoss.zssessentials.export.ExportComposer">
 
apply="org.zkoss.zssessentials.export.ExportComposer">
 
<hbox>
 
<hbox>
<button id="exportBtn" label="Export"></button>
+
<button id="exportBtn" label="Export All"></button>
 +
<listbox id="sheets" mold="select"/>
 
<button id="exportSheetBtn" label="Export Sheet"></button>
 
<button id="exportSheetBtn" label="Export Sheet"></button>
 
<button id="exportCurrentSelectionBtn"
 
<button id="exportCurrentSelectionBtn"
Line 36: Line 37:
  
 
<source lang="java" high="8,9" start="5">
 
<source lang="java" high="8,9" start="5">
public void onClick$exportBtn() throws IOException {
+
public void onClick$exportBtn(Event evt) throws IOException {
 
Book wb = spreadsheet.getBook();
 
Book wb = spreadsheet.getBook();
 
Exporter c = new PdfExporter();
 
Exporter c = new PdfExporter();
Line 50: Line 51:
 
To export specific worksheet contents use Exporter#export(Sheet worksheet, OutputStream outputStream) API. First get Sheet instance by Spreadsheet#getSelectedSheet() or Spreadsheet#getSheet(int). Second prepare OutputStream to which new format should be written to. For example
 
To export specific worksheet contents use Exporter#export(Sheet worksheet, OutputStream outputStream) API. First get Sheet instance by Spreadsheet#getSelectedSheet() or Spreadsheet#getSheet(int). Second prepare OutputStream to which new format should be written to. For example
 
<source lang="java" high="6,9" start="5">
 
<source lang="java" high="6,9" start="5">
public void onClick$exportSheetBtn() throws IOException {
+
public void onClick$exportSheetBtn(Event evt) throws IOException {
 
Sheet sheet = spreadsheet.getSelectedSheet();
 
Sheet sheet = spreadsheet.getSelectedSheet();
 
Exporter c = new PdfExporter();
 
Exporter c = new PdfExporter();
Line 62: Line 63:
 
To export specific area of worksheet indicated by current selection of multiple cells, use Exporter#exportSelection(Sheet worksheet, AreaReference area, OutputStream outputStream) API. First get Sheet instance by Spreadsheet#getSelectedSheet() or Spreadsheet#getSheet(int). Second get current selection using Spreadsheet#getSelection() API and prepare an AreaReference and finally prepare OutputStream to which new format should be written to. For example
 
To export specific area of worksheet indicated by current selection of multiple cells, use Exporter#exportSelection(Sheet worksheet, AreaReference area, OutputStream outputStream) API. First get Sheet instance by Spreadsheet#getSelectedSheet() or Spreadsheet#getSheet(int). Second get current selection using Spreadsheet#getSelection() API and prepare an AreaReference and finally prepare OutputStream to which new format should be written to. For example
 
<source lang="java" high="17,20" start="13">
 
<source lang="java" high="17,20" start="13">
public void onClick$exportCurrentSelectionBtn() throws IOException {
+
public void onClick$exportCurrentSelectionBtn(Event evt) throws IOException {
Sheet sheet = spreadsheet.getSelectedSheet();
 
Exporter c = new PdfExporter();
 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
 
Rect rect = spreadsheet.getSelection();
 
Rect rect = spreadsheet.getSelection();
 
String area = spreadsheet.getColumntitle(rect.getLeft())
 
String area = spreadsheet.getColumntitle(rect.getLeft())
Line 71: Line 69:
 
+ spreadsheet.getColumntitle(rect.getRight())
 
+ spreadsheet.getColumntitle(rect.getRight())
 
+ spreadsheet.getRowtitle(rect.getBottom());
 
+ spreadsheet.getRowtitle(rect.getBottom());
c.exportSelection(sheet, new AreaReference(area), baos);
+
Exporter c = new PdfExporter();
 +
ByteArrayOutputStream baos = new ByteArrayOutputStream();
 +
c.exportSelection(spreadsheet.getSelectedSheet(), new AreaReference(
 +
area), baos);
 
Filedownload.save(baos.toByteArray(), "application/pdf", spreadsheet
 
Filedownload.save(baos.toByteArray(), "application/pdf", spreadsheet
 
.getBook().getBookName());
 
.getBook().getBookName());

Revision as of 09:34, 23 November 2010


Export to Different File Format



Purpose

Export ZK Spreadsheet to different file format (PDF, Html,CSV, Tab delimited and so on)

ZUML

Here is an example ZUML file that display an Excel book file and has three buttons to export entire workbook,selected sheet and specific selection.

<?page title="ZSS Export to Different File Format" contentType="text/html;charset=UTF-8"?>
<window width="100" height="100%"
	apply="org.zkoss.zssessentials.export.ExportComposer">
	<hbox>
		<button id="exportBtn" label="Export All"></button>
		<listbox id="sheets" mold="select"/>
		<button id="exportSheetBtn" label="Export Sheet"></button>
		<button id="exportCurrentSelectionBtn"
			label="Export Selection">
		</button>
	</hbox>
	<spreadsheet id="spreadsheet"
		src="/WEB-INF/excel/export/export.xlsx" maxrows="200" maxcolumns="40"
		vflex="1" width="100%">
	</spreadsheet>
</window>

Composer

In composer there are three event handlers each for three export buttons defined in above ZUML.

Exporter interface

Exporting ZK Spreadsheet to another format is done through Exporter interface. It has three convenient methods to export ZK Spreadsheet contents.

  • Use Exporter#export(Book workbook, OutputStream outputStream) API to export entire workbook.
  • Use Exporter#export(Sheet worksheet, OutputStream outputStream); API to export specific worksheet.
  • Use Exporter#exportSelection(Sheet worksheet, AreaReference area, OutputStream outputStream) API to export partially selected area of workbook.

Exporting entire workbook

To export entire ZK Spreadsheet workbook contents use Exporter#export(Book,OutputStream) API. You should be able to get Book instance either by importing Excel book file using Importer interface or using Spreadsheet#getBook() API if ZK Spreadsheet component is already initialized with an Excel book file. You should also prepare OutputStream to which new format should be written to. For example

	public void onClick$exportBtn(Event evt) throws IOException {
		Book wb = spreadsheet.getBook();
		Exporter c = new PdfExporter();
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		c.export(wb, baos);
		Filedownload.save(baos.toByteArray(), "application/pdf",
				wb.getBookName());
	}

Here I am using PdfExporter to export ZK Spreadsheet contents to PDF format. Similarly you could implement HtmlExporter,CSVExporter,TabDelimExporter and so on to export to respective formats.

Exporting specific worksheet

To export specific worksheet contents use Exporter#export(Sheet worksheet, OutputStream outputStream) API. First get Sheet instance by Spreadsheet#getSelectedSheet() or Spreadsheet#getSheet(int). Second prepare OutputStream to which new format should be written to. For example

	public void onClick$exportSheetBtn(Event evt) throws IOException {
		Sheet sheet = spreadsheet.getSelectedSheet();
		Exporter c = new PdfExporter();
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		c.export(sheet, baos);
		Filedownload.save(baos.toByteArray(), "application/pdf", spreadsheet
				.getBook().getBookName());
	}

Exporting partial selection

To export specific area of worksheet indicated by current selection of multiple cells, use Exporter#exportSelection(Sheet worksheet, AreaReference area, OutputStream outputStream) API. First get Sheet instance by Spreadsheet#getSelectedSheet() or Spreadsheet#getSheet(int). Second get current selection using Spreadsheet#getSelection() API and prepare an AreaReference and finally prepare OutputStream to which new format should be written to. For example

	public void onClick$exportCurrentSelectionBtn(Event evt) throws IOException {
		Rect rect = spreadsheet.getSelection();
		String area = spreadsheet.getColumntitle(rect.getLeft())
				+ spreadsheet.getRowtitle(rect.getTop()) + ":"
				+ spreadsheet.getColumntitle(rect.getRight())
				+ spreadsheet.getRowtitle(rect.getBottom());
		Exporter c = new PdfExporter();
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		c.exportSelection(spreadsheet.getSelectedSheet(), new AreaReference(
				area), baos);
		Filedownload.save(baos.toByteArray(), "application/pdf", spreadsheet
				.getBook().getBookName());
	}

See the full source code for Composer here

Version History

Last Update : 2010/11/23


Version Date Content
     


All source code listed in this book is at Github.


Last Update : 2010/11/23

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.