Операции импорта и экспорта Java в Excel (jxl)
Java интерпретирует данные Excel (использование пакета jxl.jar)
Ключевые слова: java Excel jxl.jar
Адрес загрузки пакета jxl.jar:
http://www.andykan.com/jexcelapi/
Реальный адрес загрузки:
http://www.andykan.com/jexcelapi/download.html
На сайте его характеристики описаны следующим образом:
● Поддерживает все версии Excel 95-2000. ● Генерирует стандартный формат Excel 2000. ● Поддерживает операции со шрифтами, числами и датами. ● Возможность изменять атрибуты ячеек. ● Поддерживает изображения и диаграммы. Следует сказать, что приведенные выше функции могут примерно удовлетворить наши потребности. Самое главное, что этот API представляет собой чистую Java и не зависит от системы Windows. Даже если он работает под Linux, он все равно может корректно обрабатывать файлы Excel. Следует также отметить, что этот набор API имеет очень ограниченную поддержку графики и диаграмм и распознает только формат PNG.
Чтобы создать среду, распакуйте загруженный файл, чтобы получить jxl.jar, поместите его в путь к классам, и установка будет завершена.
Основные операции
1. Создайте файл для создания файла Excel с именем «Тестовые данные.xls», в котором первый лист называется «Первая страница». Общий эффект следующий:
Java-код
/*
* Создано 30 декабря 2007 г.
*
* Чтобы изменить шаблон для этого сгенерированного файла, перейдите по ссылке
* Окно>Настройки>Java>Генерация кода>Код и комментарии.
*/
пакет JExcelTest.standard;
импортировать java.io.*;
импортировать jxl.*;
импортировать jxl.write.*;
/**
* @автор Кен
*
* Чтобы изменить шаблон для этого сгенерированного комментария типа, перейдите по ссылке
* Окно>Настройки>Java>Генерация кода>Код и комментарии.
*/
публичный класс CreateXLS {
public static void main(String[] args) {
пытаться {
//открыть файл.
Книга WritableWorkbook = Workbook.createWorkbook(new File("d:/Test.xls"));
//создать лист с именем «Лист_1». 0 означает, что это 1-я страница.
WritableSheet лист = book.createSheet("Лист_1", 0);
//определяем столбец и строку ячейки в конструкторе меток, а содержимое ячейки записываем «тест».
//ячейка — это 1-й столбец, значение 1-й строки — «тест».
Метка метки = новая метка (0, 0, «тест»);
//добавляем определенную ячейку выше в экземпляр листа.
лист.addCell(метка);
//создаем ячейку, используя add numeric. ПРЕДУПРЕЖДАЕМ: обязательно используйте интегрированный путь к пакету, иначе будет выдана ошибка пути.
//ячейка — второй столбец, значение первой строки — 789.123.
jxl.write.Number номер = новый jxl.write.Number(1, 0, 789.123);
//добавляем определенную ячейку выше в экземпляр листа.
лист.addCell(число);
//добавляем определенные все ячейки выше в регистр.
книга.писать();
//закрываем дело с файлом.
книга.закрыть();
} catch (Исключение е) {
е.printStackTrace();
}
}
}
После компиляции и выполнения Java в текущем местоположении будет создан файл Excel.
2. Прочтите файл. Возьмите в качестве примера только что созданный файл Excel и выполните простую операцию чтения. Код программы следующий:
Java-код
/*
* Создано 30 декабря 2007 г.
*
* Чтобы изменить шаблон для этого сгенерированного файла, перейдите по ссылке
* Окно>Настройки>Java>Генерация кода>Код и комментарии.
*/
пакет JExcelTest.standard;
импортировать java.io.*;
импортировать jxl.*;
/**
* @автор Кен
*
* Чтобы изменить шаблон для этого сгенерированного комментария типа, перейдите по ссылке
* Окно>Настройки>Java>Генерация кода>Код и комментарии.
*/
публичный класс ReadXLS {
public static void main(String[] args) {
пытаться {
Книга книги = Workbook.getWorkbook(new File("d:/Test.xls"));
//получим объект Листа.
Лист лист = book.getSheet(0);
// получаем содержимое 1-го столбца, 1-й строки.
Ячейка cell =sheet.getCell(0, 0);
Строковый результат = cell.getContents();
System.out.println(результат);
книга.закрыть();
} catch (Исключение е) {
е.printStackTrace();
}
}
}
Результат выполнения программы: тест
3. Изменение файлов. Вы можете использовать jExcelAPI для изменения существующих файлов Excel. При изменении файлов Excel, за исключением различных способов открытия файла, остальные операции такие же, как при создании Excel. В следующем примере в созданный нами файл Excel добавляется лист:
Измените класс Excel и добавьте лист
Java-код
/*
* Создано 30 декабря 2007 г.
*
* Чтобы изменить шаблон для этого сгенерированного файла, перейдите по ссылке
* Окно>Настройки>Java>Генерация кода>Код и комментарии.
*/
пакет JExcelTest.standard;
импортировать java.io.*;
импортировать jxl.*;
импортировать jxl.write.*;
/**
* @автор Кен
*
* Чтобы изменить шаблон для этого сгенерированного комментария типа, перейдите по ссылке
* Окно>Настройки>Java>Генерация кода>Код и комментарии.
*/
публичный класс UpdateXLS {
public static void main(String[] args) {
пытаться {
//получить файл.
Рабочая книга wb = Workbook.getWorkbook(new File("d:/Test.xls"));
//открываем файл копии (новый файл), затем записываем содержимое с тем же содержимым с помощью Test.xls.
Книга WriteableWorkbook =
Workbook.createWorkbook(новый файл("d:/Test.xls"), wb);
//добавляем лист.
WritableSheet лист = book.createSheet("Лист_2", 1);
лист.addCell(новая метка(0, 0, "test2"));
книга.писать();
книга.закрыть();
} catch (Исключение е) {
е.printStackTrace();
}
}
}
Расширенные операции
1. Форматирование данных в Excel не требует сложных типов данных. Он относительно хорошо обрабатывает строки, числа и даты и достаточен для общих приложений.
Форматирование строк Форматирование строк включает в себя такие элементы, как шрифт, толщина, размер шрифта и т. д. Эти функции в основном отвечают за классы WritableFont и WritableCellFormat. Предположим, мы используем следующий оператор при создании ячейки, содержащей строку. Для удобства описания мы нумеруем каждую строку команды:
WritableFont font1 = новый WritableFont(WritableFont.TIMES,16,WritableFont.BOLD);
или
//Устанавливаем формат шрифта, поддерживаемый Excel
WritableFont font3 = новый WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );
① WritableCellFormat format1 = новый WritableCellFormat(font1);
② Метка label=новая метка(0,0»,тест данных 4»,формат1)
③ Среди них
I. Указан формат строки: шрифт TIMES, размер шрифта 16, отображается жирным шрифтом. WritableFont имеет очень богатый набор конструкторов для использования в различных ситуациях. Подробный список есть в java-документе jExcelAPI, который здесь не будет.
II. В приведенном выше коде используется класс WritableCellFormat. Этот класс очень важен. С его помощью можно указать различные атрибуты ячейки. В последующем форматировании ячейки будет больше описаний.
III. Конструктор класса Label используется для указания формата, в котором задается строка. В классе WritableCellFormat еще одним очень важным методом является указание выравнивания данных. Например, для нашего примера выше вы можете указать:
//Указываем горизонтальное выравнивание по центру
format1.setAlignment(jxl.format.Alignment.CENTRE);
//Указываем вертикальное выравнивание по центру
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//Устанавливаем автоматический перенос строк
format1.setWrap(истина);
2. Сотовые операции
Очень важной частью Excel являются операции с ячейками, такие как высота строки, ширина столбца, объединение ячеек и т. д. К счастью, jExcelAPI обеспечивает эту поддержку. Эти операции относительно просты, и ниже представлены только соответствующие API.
1. Объединить ячейки
WritableSheet.mergeCells(int m,int n,int p,int q);
Функция состоит в том, чтобы объединить все ячейки от (m,n) до (p,q), например:
WritableSheetsheet=book.createSheet("Первая страница",0);
//Объединяем все ячейки из первой строки первого столбца в первую строку шестого столбца
лист.mergeCells(0,0,5,0);
Слияния могут быть как горизонтальными, так и вертикальными. Объединенные ячейки нельзя объединить повторно, иначе будет вызвано исключение.
2. Высота строки и ширина столбца.
WritableSheet.setRowView(int i,int height);
Функция предназначена для указания высоты i+1-й строки, например:
//Установим высоту первой строки на 200
лист.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
Его функция — указать ширину столбца i+1, например:
//Установим ширину первого столбца на 30
лист.setColumnView(0,30);
3. Фотографии операций
Java-код
public static void write() выдает исключение {
WritableWorkbook wwb=Workbook.createWorkbook(новый файл("c:/1.xls"));
WritableSheet ws=wwb.createSheet("Тестовый лист 1",0);
Файл file=new File("C:\jbproject\PVS\WebRoot\weekhit\1109496996281.png");
WritableImage image = новый WritableImage (1, 4, 6, 18, файл);
ws.addImage(изображение);
ввб.писать();
ввб.закрыть();
}
Он очень простой и такой же, как и способ вставки ячеек, но имеет больше параметров. Класс WritableImage наследует Draw. по x, y, ширине, высоте. Обратите внимание, что ширина и высота здесь — это не ширина и высота изображения, а количество единиц, занимаемых изображением. Поскольку оно наследует Draw, его тип должен быть двойным. Подробно как это реализовано не разбирался :) Так как тороплюсь, то сначала доделаю функции, а остальное успею изучить позже. Я продолжу записывать свой опыт использования в будущем.
читать:
Идея при чтении такая: сначала используйте входной поток (InputStream) для получения файла Excel, затем используйте книгу в jxl для получения книги, используйте Sheet для получения листа из книги и используйте Cell для получения файла. определенную точку в ячейке.
InputStream->Workbook->Sheet->Cell, вы получите ячейки в файле Excel.
Java-код
String path="c:\excel.xls";//URL-адрес файла Excel
InputStream = новый FileInputStream(path);//Запись в FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); //Получить книгу
jxl.Sheet st = wb.getSheet(0);//Получаем первый лист в книге
Cell cell=st.getCell(0,0);//Получаем первую ячейку листа, то есть A1
String content=cell.getContents();//getContents() преобразует символы ячейки в строки
wb.close();//Закрываем книгу
is.close();//Закрываем входной поток
String path="c:\excel.xls";//URL-адрес файла Excel
InputStream = новый FileInputStream(path);//Запись в FileInputStream
jxl.Workbook wb = Workbook.getWorkbook(is); //Получить книгу
jxl.Sheet st = wb.getSheet(0);//Получаем первый лист в книге
Cell cell=st.getCell(0,0);//Получаем первую ячейку листа, то есть A1
String content=cell.getContents();//getContents() преобразует символы ячейки в строки
wb.close();//Закрываем книгу
is.close();//Закрываем входной поток. Мы можем получить любую ячейку с помощью метода Sheet getCell(x,y), и x, y соответствуют координатам в Excel.
Например, A1 соответствует (0,0), A2 соответствует (0,1), а D3 соответствует (3,2). Координаты в Excel начинаются с A,1, но в jxl все они начинаются с 0.
Вы также можете получить количество строк и столбцов с помощью методов getRows() и getColumns() класса Sheet и использовать их для управления циклом для вывода всего содержимого листа.
Писать:
Для записи содержимого в Excel в основном используются классы пакета jxl.write.
Идея такова:
OutputStream<-WritableWorkbook<-WritableSheet<-Label
Метка здесь представляет расположение и содержимое ячейки, записанной на листе.
Java-код
OutputStream os=new FileOutputStream("c:\test.xls");//URL-адрес выходного файла Excel
WritableWorkbook wwb = Workbook.createWorkbook(os);//Создаем записываемую книгу
WritableSheet ws = wwb.createSheet("sheet1", 0);//Создаем рабочий лист с возможностью записи
Label labelCF=new Label(0, 0, "hello");//Создаем место для записи и содержимое
ws.addCell(labelCF);//Записываем метку на лист
Конструктор Label Label(int x, int y, String aString) xy означает xy при чтении, а aString — это записанное содержимое.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//Установить шрифт письма
WritableCellFormat wcfF = новый WritableCellFormat(wf);//Set CellFormat
Label labelCF=new Label(0, 0, "hello");//Создаем место записи, содержимое и формат
Другой конструктор Label, Label(int c, int r, String cont, CellFormat st), может форматировать написанное содержимое, устанавливать шрифт и другие атрибуты.
Вы можете написать сейчас
ввб.писать();
Закрыть после написания
ввб.закрыть();
Также закройте выходной поток
ОС.закрыть;
Хорошо, если вы совмещаете чтение и запись, вы можете читать данные в N Excel и записывать их в нужную вам новую таблицу Excel, что весьма удобно.
Ниже приведен пример программы:
Java-код
sql = "выбрать * из имени таблицы";
rs = stmt.executeQuery(sql);
//Создаем новый файл Excel
String filePath=request.getRealPath("aaa.xls");
Файл myFilePath = новый файл (filePath);
если(!myFilePath.exists())
мойFilePath.createNewFile();
FileWriter resultFile = новый FileWriter (myFilePath);
PrintWriter myFile = новый PrintWriter (resultFile);
РезультатФайл.закрыть();
//Используйте JXL для добавления содержимого во вновь созданный файл
OutputStream outf = новый FileOutputStream (filePath);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);
интервал я = 0;
интервал j=0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}
в то время как (rs.next ()) {
out.println(rs.getMetaData().getColumnCount());
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
}
я++;
}
ввб.писать();
ввб.закрыть();
}catch(Исключение е){e.printStackTrace();}
окончательно{
рс.закрыть();
конн.закрыть();
}
response.sendRedirect("aaa.xls");
Эта статья взята из блога CSDN. При перепечатке указывайте источник: http://blog.csdn.net/yangf1984/archive/2009/12/28/5088933.aspx.