/*
* Copyright (C) 2014 TESIS DYNAware GmbH.
* All rights reserved. Use is subject to license terms.
*
* This file is licensed under the Eclipse Public License v1.0, which accompanies this
* distribution and is available at http://www.eclipse.org/legal/epl-v10.html.
*/
package de.tesis.dynaware.javafx.fancychart.data.formats;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Collections;
import java.util.Locale;
import java.util.SortedMap;
import java.util.TreeMap;
import jxl.Cell;
import jxl.CellType;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
import jxl.read.biff.BiffException;
import jxl.write.Number;
import jxl.write.NumberFormat;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class XlsDao {
/**
* We set the locale to US to make sure "1.0" means "one", and "1,0" does
* not.
*/
private static final Locale LOCALE = Locale.getDefault();
public static SortedMap<java.lang.Number, java.lang.Number> importXls(String filePath) {
File inputWorkbook = new File(filePath);
try {
Workbook w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(0);
SortedMap<java.lang.Number, java.lang.Number> data = new TreeMap<>();
for (int i = 0; i < sheet.getRows(); i++) {
Cell xCell = sheet.getCell(0, i);
Cell yCell = sheet.getCell(1, i);
CellType xType = xCell.getType();
CellType yType = yCell.getType();
if (CellType.NUMBER.equals(xType) && CellType.NUMBER.equals(yType)) {
java.lang.Number key = java.text.NumberFormat.getNumberInstance(LOCALE).parse(xCell.getContents());
java.lang.Number value = java.text.NumberFormat.getNumberInstance(LOCALE)
.parse(yCell.getContents());
data.put(key, value);
}
}
return data;
} catch (BiffException | IOException | ParseException exception) {
exception.printStackTrace();
}
return Collections.emptySortedMap();
}
public static void exportXls(SortedMap<java.lang.Number, java.lang.Number> data, String filePath) {
File file = new File(filePath);
WorkbookSettings workBookSettings = new WorkbookSettings();
workBookSettings.setLocale(LOCALE);
try {
WritableWorkbook workbook = Workbook.createWorkbook(file, workBookSettings);
workbook.createSheet("Exported data", 0);
WritableSheet sheet = workbook.getSheet(0);
fillSheet(sheet, data);
workbook.write();
workbook.close();
} catch (IOException | WriteException exception) {
System.err.println(exception.getMessage());
}
}
private static void fillSheet(WritableSheet sheet, SortedMap<java.lang.Number, java.lang.Number> data)
throws WriteException, RowsExceededException {
int row = 0;
for (java.lang.Number x : data.keySet()) {
// first column
addNumber(sheet, 0, row, x);
// second column
addNumber(sheet, 1, row++, data.get(x));
}
}
private static void addNumber(WritableSheet sheet, int col, int row, java.lang.Number value) throws WriteException,
RowsExceededException {
Number number;
if (value instanceof Long) {
number = new Number(col, row, (Long) value);
sheet.addCell(number);
} else if (value instanceof Double) {
WritableCellFormat format = new WritableCellFormat(new NumberFormat("0.###############"));
number = new Number(col, row, (Double) value, format);
sheet.addCell(number);
}
}
}