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();
}
}
}
запись в excel с помощью Apache poi


Хотим вставить текущую дату и время, формат 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);
excel apache poi insert date

Форматирование текста

Форматирование текста включает: шрифт, размер и т.д. Italics/Bold/Underline, color, background, and alignment.

Пример выравнивания, который мы применим к ячейке Date:

//line height
row.setHeightInPoints(20);
//горизонтальное выравнивание
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
//вертикальное выравнивание
cellStyle.setVerticalAlignment(CellStyle.VERTICAL_TOP);
Выравнивание строк и столбцов Apache POI в Excel

Изменить шрифт

/*создать новый шрифт*/
шрифт 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);
apache poi изменить шрифт excel

Цвет и фон

/*изменить цвет фона*/
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);
apache poi изменить цвет шрифта и фон excel

Слияние ячеек

В этом примере мы объединим и выровняем четыре ячейки по горизонтали и вертикали: 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();
}
}
}
excel Apache Poi fusion cells

Formula Usage

Excel в основном используется при вычислении и использовании иногда сложных формул в результирующих ячейках. Apache poi предоставляет очень эффективные способы добавления и тестирования ячеек с помощью их формул.

Следующий код имеет дело с простым вычислением среднего значения за 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();
}
}
}
Excel apache poi calculus with formula

Вычисляем и просматриваем ячейки

Чтобы отобразить значение ячейки, нужно знать ее тип. Apache poi предоставляет класс  FormulaEvaluator.evaluateFormulaCell который устанавливает флажок, чтобы проверить, есть ли формула. Если это так, он вычисляет его и возвращает тип formula.

import java.io.File; 
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();

}
}
Output

Quarter1 Quarter2 Quarter3 Quarter4 Average 
2.0 5.0 1.0 7.0 3.75