/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.utils.common.excel.legacy; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import de.rcenvironment.core.utils.common.variables.legacy.TypedValue; /** * Exports values to Excel files. * * @author Markus Kunde */ @Deprecated public final class ExcelFileExporter { /** File Extension of Excel-files. */ public static final String FILEEXTENSION_XL2003 = "xls"; /** File Extension of Excel-files. */ public static final String FILEEXTENSION_XL2010 = "xlsx"; private static final Log LOGGER = LogFactory.getLog(ExcelFileExporter.class); private ExcelFileExporter() {} /** * Exports values to an Excel file. * * @param xlFile File where values should be exported to. Creating new or overwrite existing * file. File-extension should be "*.xls" or "*.xlsx" * @param values values representing as a 2d array (table format) * @return true, if writing data file was successful. * @throws FileNotFoundException from Apache. */ public static boolean exportValuesToExcelFile(final File xlFile, final TypedValue[][] values) throws FileNotFoundException{ boolean success = true; if (xlFile != null && values != null) { // Reads with POI org.apache.poi.ss.usermodel.Workbook wb; if (xlFile.getName().endsWith(FILEEXTENSION_XL2003)) { wb = new HSSFWorkbook(); } else { wb = new XSSFWorkbook(); } Sheet sheet = wb.createSheet(); int noOfRows = values.length; int beginningRowNo = 0; int beginningColumnNo = 0; for (int row = beginningRowNo; row < beginningRowNo + noOfRows; row++) { Row r = sheet.getRow(row); if (r == null) { r = sheet.createRow(row); } for (int col = beginningColumnNo; col < beginningColumnNo + values[row - beginningRowNo].length; col++) { Cell cell = r.createCell(col); TypedValue bv = values[row - beginningRowNo][col - beginningColumnNo]; switch (bv.getType()) { case String: cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellValue(bv.getStringValue()); break; case Integer: cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellValue(bv.getIntegerValue()); break; case Logic: cell.setCellType(Cell.CELL_TYPE_BOOLEAN); cell.setCellValue(bv.getLogicValue()); break; case Real: cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellValue(bv.getRealValue()); break; case Empty: cell.setCellType(Cell.CELL_TYPE_BLANK); default: break; } } } /* * Solves temporarily the problem with reading from I-Stream and writing to O-Stream * with the same file handle. Causes sometimes exceptions if I-Stream is blocked * when trying to write. Should be reported to Apache POI. */ FileOutputStream fileOutStream = null; try { fileOutStream = new FileOutputStream(xlFile); wb.write(fileOutStream); fileOutStream.flush(); fileOutStream.close(); success = true; } catch (FileNotFoundException e) { if (fileOutStream != null) { try { fileOutStream.flush(); fileOutStream.close(); } catch (IOException e1) { LOGGER.error("Apache Poi: IO error. (Method: setValueOfCells)"); success = false; } } throw e; } catch (IOException e) { LOGGER.error("Apache Poi: IO error. (Method: setValueOfCells)"); success = false; } finally { try { if (fileOutStream != null) { fileOutStream.flush(); fileOutStream.close(); } } catch (IOException e) { LOGGER.debug("Apache Poi: Closing of output stream does not work. (Method: setValueOfCells)"); success = false; } } } return success; } }