Apache POI: создание, чтение и редактирование файла Excel в java
Как правило, электронные таблицы широко используются в области финансов и бухгалтерского учета для облегчения расчета и создания счетов-фактур, управления отчетами и т. д. Если какая-либо часть вашего приложения требует таких операций: создание, чтение или запись, доступно несколько API, и самым мощным является API POI APACHE.POI API также обрабатывает документы Word и PowerPoint, со временем пользователи стали более уверенными.
Download
Вы можете скачать API с страница APACHE POI. После загрузки импортируйте следующие .jar: в вашем проекте:- poi
- poi-ooxml
- poi-ooxml-schemas
- xmlbeans
Создание и запись в xls
Два основных класса, которые обрабатывают файлы Excel:
HSSFWorkbook: для файлов Microsoft Excel 97 и 2003 с расширением xls.
XSSFWorkbook: для файлов Microsoft Excel 2007 с расширением xlsx.
Следующий код создает массив со значениями разных типов:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel {
public static void main(String[] args) {
//1. Создаем пустой документ
XSSFWorkbook wb = new XSSFWorkbook();
//2. Создать пустую таблицу
Sheet = wb.createSheet("new sheet");
//3. Создаем строку и помещаем в нее что-нибудь
Row row = sheet.createRow((short)0);
//4. Создать новую ячейку
ячейка ячейки = row.createCell(0);
//5. Устанавливаем значение
cell.setCellValue(1.2);
//Добавляем больше ячеек с разными типами
/*int*/row.createCell(1).setCellValue(3);
/*char*/row.createCell(2).setCellValue('c');
/*строка*/строка.createCell(3).setCellValue("строка");
/*boolean*/row.createCell(4).setCellValue(false);
FileOutputStream fileOut;
try {
fileOut = new FileOutputStream("nouveauFichier.xlsx");
wb.write(fileOut);
fileOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Хотим вставить текущую дату и время, формат Date создается следующим образом:
//вставляем в ячейку F1
cell = row.createCell((short) 6);
cell.setCellValue(new Date());
XSSFCellStyle cellStyle = wb.createCellStyle();
XSSFDataFormat xssfDataFormat = wb.createDataFormat();
//создаем формат даты и времени
cellStyle.setDataFormat(xssfDataFormat.getFormat("дд/мм/гггг ч:мм"));
cell.setCellStyle(cellStyle);
Форматирование текста
Форматирование текста включает: шрифт, размер и т.д. Italics/Bold/Underline, color, background, and alignment.
Пример выравнивания, который мы применим к ячейке Date:
Изменить шрифт
/*создать новый шрифт*/
шрифт font = wb.createFont();
//размер: 12px
font.setFontHeightInPoints((short)12);
font.setFontName("Courier New");
font.setItalic(true);
font.setBold(true);
/*создание нового стиля*/
CellStyle cs = wb.createCellStyle();
cs.setFont(шрифт);
//style ячейка 3(D1)
row.getCell(3).setCellStyle(cs);
/*изменить цвет фона*/
XSSFCellStyle csColor=wb.createCellStyle();
csColor.setFillForegroundColor(new XSSFColor(new Color(194, 154, 250)));
csColor.setFillPattern(csCouleur.SOLID_FOREGROUND);
//применить стиль к ячейке 3
row.getCell(2).setCellStyle(csColor);
/*изменить цвет шрифта*/
Шрифт шрифта = wb.createFont();
font.setColor((short)45);
CellStyle csCF = wb.createCellStyle();
csCF.setFont(font);
//применить стиль к ячейке 0
row.getCell(0).setCellStyle(csCF);
Слияние ячеек
В этом примере мы объединим и выровняем четыре ячейки по горизонтали и вертикали: B2, C2, B3, C3 с параметром addMergedRegion который принимает в качестве параметра диапазон ячеек для слияния.
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress;
public class Fusion{
public static void main(String[] args) выбрасывает FileNotFoundException {
Workbook wb = new HSSFWorkbook();
Лист листа = wb.createSheet("sheet1");
Строка строки = sheet.createRow((short) 1);
Ячейка ячейки = row.createCell((short) 1);
cell.setCellValue("тест на слияние ячеек");
sheet.addMergedRegion(new CellRangeAddress(
1, //первая строка B2
2, //последняя строка B3
1, //первый столбец C2
2 //последний столбец C3
));
/*Center*/
cell.getCellStyle().setAlignment((short)2);
cell.getCellStyle().setVerticalAlignment((short)1);
FileOutputStream fs = null;
try {
fs = new FileOutputStream("testFusion.xlsx");
wb.write(fs);
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Formula Usage
Excel в основном используется при вычислении и использовании иногда сложных формул в результирующих ячейках. Apache poi предоставляет очень эффективные способы добавления и тестирования ячеек с помощью их формул.
Следующий код имеет дело с простым вычислением среднего значения за 4 семестра. Формула будет выглядеть следующим образом: (A2+B2+C2+D2)/4.
Следующий код имеет дело с простым вычислением среднего значения за 4 семестра. Формула будет выглядеть следующим образом: (A2+B2+C2+D2)/4.
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel_formule {
public static void main(String[] args) {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("Среднее");
Строка строки = sheet.createRow((short) 0);
row.createCell(0).setCellValue("Quarter1");
row.createCell(1).setCellValue("Quarter2");
row.createCell(2).setCellValue("Quarter3");
row.createCell(3).setCellValue("Quarter4");
row.createCell(4).setCellValue("Среднее");
Строка row1 = sheet.createRow((short) 1);
row1.createCell(0).setCellValue(2);
row1.createCell(1).setCellValue(5);
row1.createCell(2).setCellValue(1);
row1.createCell(3).setCellValue(7);
row1.createCell(4).setCellFormula("(A2+B2+C2+D2)/4");
try {
FileOutputStream out = new FileOutputStream(new File("formuletest.xlsx"));
wb.write(out);
out.close();
System.out.println("Файл Excel успешно создан");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вычисляем и просматриваем ячейки
Чтобы отобразить значение ячейки, нужно знать ее тип. Apache poi предоставляет класс FormulaEvaluator.evaluateFormulaCell который устанавливает флажок, чтобы проверить, есть ли формула. Если это так, он вычисляет его и возвращает тип formula.
import java.io.File;Output
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Excel_parcourir {
public static void main(String[] args) throws IOException {
FileInputStream file = new FileInputStream(new File("formuletest.xlsx"));
//создаем экземпляр книги, который ссылается на xlsx-файл
XSSFWorkbook wb = new XSSFWorkbook(file);
XSSFSheet sheet = wb.getSheetAt(0);
FormulaEvaluator formulaEvaluator =
wb.getCreationHelper().createFormulaEvaluator();
for (Row row: sheet) {//browse rows
for (Cell cell: row) {//browse columns
//evaluate cell type
switch (formulaEvaluator.evaluateInCell(cell).getCellType())
{
box Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t\t"); < /> поместье;
box Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t"); < /> поместье;
}
}
System.out.println();
}
}
}
Quarter1 Quarter2 Quarter3 Quarter4 Average
2.0 5.0 1.0 7.0 3.75