Java запись JTable в файл Excel

По роду деятельности часто приходится выполнять просьбы пользователей о сбросе данных в формат xls. Ранее сохранял данные в CSV формате и открывал их в Excel. Постоянная неудовлетворенность привела к варианту (надеюсь не окончательному) с использованием библиотеки JExcelAPI
<pre>
protected void saveToXLS(JTable table) {
// Определяем куда
String path = «output.xls»;// Если полный путь не определен, то файл запишется в текущий каталог с именем output.xls
JFileChooser fileopen = new JFileChooser();
fileopen.removeChoosableFileFilter(fileopen.getFileFilter());
FileFilter filter = new FileNameExtensionFilter(«Excel files», «xls»);
fileopen.addChoosableFileFilter(filter);

int ret = fileopen.showDialog(null, «Сохранить в файл»);
if (ret == JFileChooser.APPROVE_OPTION) {
path = fileopen.getSelectedFile().getAbsolutePath();
}
if (!path.substring(path.length() — 4, path.length()).equalsIgnoreCase(
«.xls»)) {
path += «.xls»;
}
System.out.println(path);
// создаем новый XLS документ
WritableWorkbook workbook;
try {
workbook = Workbook.createWorkbook(new File(path));
WritableSheet sheet = workbook.createSheet(«Sheet1», 0);

WritableFont wf_color = new WritableFont(WritableFont.ARIAL, 10,
WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
Colour.AQUA);
WritableCellFormat wff_color = new WritableCellFormat(wf_color);
wff_color.setBackground(Colour.DARK_BLUE);
// Строка заголовка
int colCount=table.getColumnCount();
// Здесь пропускается первая колонка с номерами строк,
// поскольку у Excel свой нумератор и наша колонка будет как зайцу пятая нога
for (int i = 1; i < colCount; i++) {
Label colName = new Label(i-1, 0, table.getColumnName(i), wff_color);
sheet.addCell(colName);
}

//Заполняем лист Excel данными из таблицы
for (int i = 0; i < table.getRowCount(); i++) {
for (int j = 1; j < colCount; j++) {
try {
Label l = new Label(j-1, i + 1, table.getValueAt(i, j).toString());
sheet.addCell(l);
} catch (Exception e) {
e.printStackTrace();
}

}
}
// На любителя — автоподбор ширины столбцов
for (int i = 0; i < colCount-1; i++) {
CellView c = sheet.getColumnView(i);
c.setAutosize(true);
sheet.setColumnView(i, c);
}
// Записываем и закрываем
workbook.write();
workbook.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(Main.this, e.toString(), «Ошибка!»,
JOptionPane.ERROR_MESSAGE);
} catch (JxlWriteException e) {
JOptionPane.showMessageDialog(Main.this, e.toString(), «Ошибка!»,
JOptionPane.ERROR_MESSAGE);
} catch (WriteException e) {
JOptionPane.showMessageDialog(Main.this, e.toString(), «Ошибка!»,
JOptionPane.ERROR_MESSAGE);
}

}
</pre>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *