Необходимость работы с файлами Microsoft Excel в Java-приложении возникает не так уж и редко. Самый распространенный сценарий - требуется реализовать формирование какого-либо отчета. Проще всего это можно реализовать через использование отличной открытой библиотеки Apache POI.
Библиотека Apache POI позволяет работать практически со всеми форматами Microsoft Office - поддерживается работа с файлами Excel, Word, PowerPoint и так далее. Причем поддерживается как классическая реализация форматов, так и современная реализация Open XML (docx, xlsx и так далее).
Перейдем от лирики к практике. Вот пример простейшего кода с использованием Apache POI:
Покажу пару конструкций, которые мне пригодились в работе. Например, вот так можно работать со стилями ячеек:
Библиотека Apache POI позволяет работать практически со всеми форматами Microsoft Office - поддерживается работа с файлами Excel, Word, PowerPoint и так далее. Причем поддерживается как классическая реализация форматов, так и современная реализация Open XML (docx, xlsx и так далее).
Перейдем от лирики к практике. Вот пример простейшего кода с использованием Apache POI:
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("input.xls"));Данный код открывает существующий файл Excel, заменяет значение первой ячейки каждой строки и потом записывает результат в новый файл. Как видите работать с файлами Excel с помощью POI элементарно.
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = null;
HSSFCell cell = null;
int rows = sheet.getPhysicalNumberOfRows(); //получаем актуальное число строк
for(int r = 0; r < rows; r++) {
row = sheet.getRow(r); //берем строку
if(row != null) {
cell = row.getCell(0); //берем первую ячейку
if(cell != null) {
cell.setCellValue("Modified " + r); //задаем значение ячейки
}
}
}
FileOutputStream fileOut = new FileOutputStream("output.xls");
wb.write(fileOut);
fileOut.close();
Покажу пару конструкций, которые мне пригодились в работе. Например, вот так можно работать со стилями ячеек:
CellStyle cs = wb.createCellStyle();А вот так можно вставить новую строку в середине таблицы:
cs.setWrapText(true);
...
cell.setCellStyle(cs);
sheet.shiftRows(r, sheet.getLastRowNum(), 1);Еще один полезный кусочек кода. Вот так можно сгруппировать определенное количество строк и свернуть их по умолчанию (другими словами при открытии документа будет видна только самая верхняя строка и плюсик для открытия остальных - здорово помогает в больших таблицах):
sheet.createRow(r).createCell(0).setCellValue("New row!");
sheet.groupRow(r, j);В POI есть одна небольшая проблема - нет удаления со сдвигом как привыкли пользователи Microsoft Excel. При удалении строки средствами POI вместо нее остается пустое место. Вот решение проблемы:
sheet.setRowGroupCollapsed(r, true);
public static void removeRow(HSSFSheet sheet, int rowIndex) {В общем, POI - это очень просто. Пользуйтесь на здоровье!
int lastRowNum = sheet.getLastRowNum();
if(rowIndex >= 0 && rowIndex < lastRowNum){
sheet.shiftRows(rowIndex+1,lastRowNum, -1);
}
if(rowIndex == lastRowNum){
HSSFRow removingRow = sheet.getRow(rowIndex);
if(removingRow != null){
sheet.removeRow(removingRow);
}
}
}
Может мне начать писать примеры по 1Ске? :)
ОтветитьУдалитьЧестно говоря на первом курсе я как баран на новые ворота смотрел на программирование, с трудом все понимал и завидовал тем кто еще до универа понимал тонкости программирования ..
Я только сейчас смотря на код разных языков, могу понять на ~90% о чем идет речь и что большинство современных языков интуитивно понятны .. и если задаться целью и прочесть пару книжек/мануалов можно за короткое время освоить любой язык ..
Юрик, хорошая идея!
УдалитьДа, любой современный язык можно очень быстро освоить. Вообще, по моему мнению, самое сложное в программировании - понять и научиться правильно использовать различные шаблоны и алгоритмы, чтобы не изобретать каждый раз велосипед.
кстати, если придираться )) то для заинтересованных лиц, не помешала бы ссылка на офф. сайт, где можно скачать библиотечку .. :)
ОтветитьУдалитьДобавил :-)
Удалить