/* * JasperReports - Free Java Reporting Library. * Copyright (C) 2001 - 2009 Jaspersoft Corporation. All rights reserved. * http://www.jaspersoft.com * * Unless you have purchased a commercial license agreement from Jaspersoft, * the following license terms apply: * * This program is part of JasperReports. * * JasperReports 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 3 of the License, or *(at your option) any later version. * * JasperReports 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 JasperReports. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.jasperreports.engine.export.ooxml; import java.io.IOException; import java.io.Writer; import net.sf.jasperreports.engine.JRRuntimeException; import net.sf.jasperreports.engine.util.FileBufferedWriter; /** * @author Teodor Danciu (teodord@users.sourceforge.net) * @version $Id: StyleBuilder.java 2908 2009-07-21 14:32:01Z teodord $ */ public class XlsxSheetHelper extends BaseHelper { private int rowIndex = 0; private FileBufferedWriter colsWriter = new FileBufferedWriter(); private FileBufferedWriter mergedCellsWriter = new FileBufferedWriter(); private FileBufferedWriter hyperlinksWriter = new FileBufferedWriter(); /** * */ private XlsxSheetRelsHelper sheetRelsHelper = null;//FIXMEXLSX truly embed the rels helper here and no longer have it available from outside; check drawing rels too /** * */ public XlsxSheetHelper(Writer writer, XlsxSheetRelsHelper sheetRelsHelper) { super(writer); this.sheetRelsHelper = sheetRelsHelper; } /** * */ public void exportHeader() { write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); write("<worksheet\n"); write(" xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n"); write(" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\">\n"); write("<dimension ref=\"A1\"/><sheetViews><sheetView workbookViewId=\"0\"/></sheetViews>\n"); write("<sheetFormatPr defaultRowHeight=\"15\"/>\n"); } /** * */ public void exportFooter(int index) { if (rowIndex > 0) { write("</row>\n"); } else { if (!colsWriter.isEmpty()) { write("<cols>\n");//FIXMEXLSX check count attribute colsWriter.writeData(writer); write("</cols>\n"); } write("<sheetData>\n"); } write("</sheetData>\n"); if (!mergedCellsWriter.isEmpty()) { write("<mergeCells>\n");//FIXMEXLSX check count attribute mergedCellsWriter.writeData(writer); write("</mergeCells>\n"); } if (!hyperlinksWriter.isEmpty()) { write("<hyperlinks>\n");//FIXMEXLSX check count attribute hyperlinksWriter.writeData(writer); write("</hyperlinks>\n"); } write("<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>\n"); //write("<pageSetup orientation=\"portrait\" r:id=\"rId1\"/>\n"); write("<drawing r:id=\"rIdDr" + index + "\"/></worksheet>"); } /** * */ public void exportColumn(int colIndex, int colWidth) { try { colsWriter.write("<col min=\"" + (colIndex + 1) + "\" max=\"" + (colIndex + 1) + "\" customWidth=\"1\" width=\"" + (3f * colWidth / 18f) + "\"/>\n"); } catch (IOException e) { throw new JRRuntimeException(e); } } /** * */ public void exportRow(int rowHeight) { if (rowIndex > 0) { write("</row>\n"); } else { if (!colsWriter.isEmpty()) { write("<cols>\n");//FIXMEXLSX check count attribute colsWriter.writeData(writer); write("</cols>\n"); } write("<sheetData>\n"); } rowIndex++; write("<row r=\"" + rowIndex + "\" customHeight=\"1\" ht=\"" + rowHeight + "\">\n"); } /** * */ public void exportMergedCells(int row, int col, int rowSpan, int colSpan) { if (rowSpan > 1 || colSpan > 1) { String ref = XlsxCellHelper.getColumIndexLetter(col) + (row + 1) + ":" + XlsxCellHelper.getColumIndexLetter(col + colSpan - 1) + (row + rowSpan); //FIXMEXLSX reuse this utility method try { mergedCellsWriter.write("<mergeCell ref=\"" + ref + "\"/>\n"); } catch (IOException e) { throw new JRRuntimeException(e); } } } /** * */ public void exportHyperlink(int row, int col, String href) { String ref = XlsxCellHelper.getColumIndexLetter(col) + (row + 1); try { hyperlinksWriter.write("<hyperlink ref=\"" + ref + "\" r:id=\"rIdLnk" + sheetRelsHelper.getHyperlink(href) + "\"/>\n"); } catch (IOException e) { throw new JRRuntimeException(e); } } }