вторник, 23 сентября 2014 г.

Создание Excel файла на java с библиотекой jxl


Привет читатель! 
    Сегодня я расскажу как создать Excel файл на java при помощи бесплатной библиотеки jxl. Когда-то давно, года два назад я использовал ее для создания приложения под windows/linux, для исправления ошибок в расписании университета(КНИТУ/КАИ). Программ называлась Schedule Assist и была написана на java с использованием Eclipse RCP/SWT/JFace/Osgi. Если кому интересно, то вот ссылка на код программы: https://code.google.com/p/assist-schedule/ .
    Теперь по подробнее о библиотеке jxl. 
    jxl - это простое и удобное средство для создания, генерирования Excel файлов на языке программирования java. Эта библиотека была написана очень давно, но обладает всеми необходимыми методами для работы Excel файлами.
    Вот простейший пример ее использования, мне необходимо создать Excel файл и заполнить его данными Ebean(http://www.avaje.org/) сущности User(табличка users в БД), реальный метод контроллера в PlayFramework2(https://playframework.com/):

public static Result generateUsersExcel() {

        User u = Application.getUser(session().get("login"));
        if (!Secured.isAdmin(u, request())) {
            return badRequest("Permission denied");
        }

        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("hh-mm_dd-MM-yyyy");
            String date = dateFormat.format(System.currentTimeMillis());
            String fileName = date + "-users.xls";
            File file = new File(fileName);
            WritableWorkbook workbook = Workbook.createWorkbook(file);
            workbook.createSheet("users-" + date, 0);
//            workbook.createSheet("Sheet2", 1);
//            workbook.createSheet("Sheet3", 2);
            WritableSheet writableSheet = workbook.getSheet(0);

            List<User> users = User.find.order("id asc").findList();

            writableSheet.addCell(new Label(0, 0, "ID"));
            writableSheet.addCell(new Label(1, 0, "fullName"));
            writableSheet.addCell(new Label(2, 0, "login"));
            writableSheet.addCell(new Label(3, 0, "inviter"));
            writableSheet.addCell(new Label(4, 0, "phone"));
            writableSheet.addCell(new Label(5, 0, "email"));
            writableSheet.addCell(new Label(6, 0, "createDate"));
            int offset = 1;
            for(int i = 0; i < users.size(); i++) {
                User user = users.get(i);
                writableSheet.addCell(new Label(0, i + offset, String.valueOf(user.id)));
                writableSheet.addCell(new Label(1, i + offset, user.fullName));
                writableSheet.addCell(new Label(2, i + offset, user.login));
                if(null != user.inviter) {
                    writableSheet.addCell(new Label(3, i + offset, user.inviter.login));
                }
                writableSheet.addCell(new Label(4, i + offset, String.valueOf(user.phone)));
                writableSheet.addCell(new Label(5, i + offset, user.email));
                if(null != user.createDate) {
                    writableSheet.addCell(new Label(6, i + offset, dateFormat.format(user.createDate)));
                }
            }

            workbook.write();
            workbook.close();

            return ok(file);
        } catch (WriteException e) {
            Logger.error(e.getMessage());
            return badRequest(e.getMessage());
        } catch (IOException e) {
            Logger.error(e.getMessage());
            return badRequest(e.getMessage());
        }
    }

    Больше информации по jxl и пример ее использования можно найти по адресу: http://jexcelapi.sourceforge.net/

    Скачать саму библиотеку можно из maven репозитория: http://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl 

Спасибо! Надеюсь моя статья вам оказалась полезной!

PS:// Не тот счастлив у кого много добра, а тот у кого жена верна!:)