Работа с excel в java
В ходе написания дипломного проекта столкнулся с задачей генерации отчетов в виде xls файлов, другими словами импорта данных в Excel средствами языка java. В java существует несколько вариантов работы с excel. Можно использовать мост JDBC-ODBC и работать с xls файлом как с базой данных, но если вам необходимо не просто сохранять данные, а именно генерировать документы отформатированные определенным образом — этот вариант не для вас. Другой способ чтения и записи данных в xls файлы -ActiveX или COM, но здесь тоже не все гладко, т.к. в этом случае необходимо наличие установленного MSExcel на машине, где будет работать приложения. Ну и наконец третий способ — использовать специализированные библиотеки. Об этом и пойдет речь ниже.
Из известных библиотек для работы с Excel в java можно назвать Apache POI и JExcelApi. Первый предоставляет возможность чтения и записи практически любых документов из пакета MS Office, мощная библиотека, но для простых задач немного громоздкая, поэтому я остановил свой выбор на ExcelApi.
ExcelApi — один из ряда open-source java Excel API, предназначен для чтения, записи и динамического редактирования файлов excel. Среди его функциональности можно выделить:
- Чтение из книг Excel 95, 97, 2000, XP, and 2003
- Чтение и запись формул
- Создание листов в формате Excel 2000
- Поддержка форматирования шрифтов, чисел и дат
- Поддержка оттенков, границ и цветов ячеек
- Изменение существующих книг excel
- Поддержка локализации
- Копирование графиков
- Вставка и копирование рисунков
- Логирование событий
Как видно, библиотека предоставляет все необходимые возможности для работы с xls-файлами, и при этом она очень удобна в применении и проста в изучении. На официальной страничке можно найти подробную документацию.
Рассмотрим небольшой пример. В нем показано, как производить запись в таблицу и производить элементарное форматирование:
import java.io.IOException; import java.util.Locale; import jxl.Workbook; import jxl.WorkbookSettings; import jxl.format.Alignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.Colour; import jxl.format.Orientation; import jxl.write.Label; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; public class ExcelJob { private static WritableWorkbook workbook; // переменная рабочей книги public static WritableSheet sheet; public static WritableCellFormat arial12BoldFormat; public static Label label; // метод создает книгу с одной раб страницей public static void exelSet() throws WriteException { WorkbookSettings ws = new WorkbookSettings(); ws.setLocale(new Locale("ru", "RU")); try { //имя и путь файла workbook = Workbook.createWorkbook(new File("c:/My-tmp.xls"), ws); //название листа sheet = workbook.createSheet("Отрицательные остатки", 0); /* * здесь необходимо перечислить методы, которые будут * выполняться для заполнения листа */ test(); } catch (IOException e) { // TODO Автоматически созданный блок catch e.printStackTrace(); } try { workbook.write(); workbook.close(); } catch (IOException e) { // TODO Автоматически созданный блок catch e.printStackTrace(); } catch (WriteException e) { // TODO Автоматически созданный блок catch e.printStackTrace(); } } public static void test() throws WriteException { //установка шрифта WritableFont arial12ptBold = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD); arial12BoldFormat = new WritableCellFormat(arial12ptBold); //выравнивание по центру arial12BoldFormat.setAlignment(Alignment.CENTRE); //перенос по словам если не помещается arial12BoldFormat.setWrap(true); //установить цвет arial12BoldFormat.setBackground(Colour.GRAY_50); //рисуем рамку arial12BoldFormat.setBorder(Border.ALL, BorderLineStyle.MEDIUM); //поворот текста arial12BoldFormat.setOrientation(Orientation.PLUS_90); //пример добавления в ячейки int i; int q; q = 10; for(i=9;i<22;i++) { Label label = new Label(1, i, "С "+ i + " по " + q, arial12BoldFormat); sheet.addCell(label); q++; } Label label1 = new Label(2, 2, "значение", arial12BoldFormat); try { //добавление данных в лист sheet с обработкой исключений sheet.addCell(label1); } catch (RowsExceededException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } } } |
Надеюсь, смысл кода ясен по комментариям.
Комментарии к "Работа с excel в java"
Товарищь, а литература по этому вопросу есть? Может подскажешь?
Спасибо!! Искал инструмент, благодаря Вам нашел именно то что нужно!!!
К сожалению, литературы посоветовать не могу. Сам уже почти год как не пишу на java. Сменил сферу специализации.
Оставить комментарий