Работа с excel в java

Март 22, 2010

Автор: dexis

3 Комментария(ев)

jexcelapiВ ходе написания дипломного проекта столкнулся с задачей генерации отчетов в виде 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"

юзер написал:
18.02.2013

Товарищь, а литература по этому вопросу есть? Может подскажешь?

Евгений написал:
22.03.2013

Спасибо!! Искал инструмент, благодаря Вам нашел именно то что нужно!!!

dexis написал:
24.03.2013

К сожалению, литературы посоветовать не могу. Сам уже почти год как не пишу на java. Сменил сферу специализации.

Оставить комментарий

Имя : 
Почта : 
Сайт : 
Комментарий: