(Pour mon propre mémo ... mais j'espère que cela aide quelqu'un ...)
Sortie Excel parfois rencontrée dans les applications métier. Hmm. J'aime CSV.
alors, Puisque Maven est utilisé, il est défini dans pom.xml.
pom.xml
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
Définir et installer Maven.
Dépendance Maven
poi-ooxml-3.17.jar
poi-3.17.jar
commons-codec-1.10.jar
commons-collections4-4.1.jar
poi-ooxml-schemas-3.17.jar
xmlbeans-2.6.0.jar
stax-api-1.0.1.jar
curvesapi-1.04.jar
Sera inclus. (S'il s'agit d'un environnement fermé, vous devez le collecter à partir de zéro ...)
La source est ↓
Sortie Excel
private static void outputExcel() throws Exception {
String outputFilePath = "[Destination de sortie]\\tmp.xlsx";
Workbook book = null;
FileOutputStream fout = null;
try {
book = new SXSSFWorkbook();
Font font = book.createFont();
font.setFontName("MS Gothic");
font.setFontHeightInPoints((short) 9);
DataFormat format = book.createDataFormat();
//Style pour la chaîne d'en-tête
CellStyle style_header = book.createCellStyle();
style_header.setBorderBottom(BorderStyle.THIN);
App.setBorder(style_header, BorderStyle.THIN);
style_header.setFillForegroundColor(HSSFColor.HSSFColorPredefined.LIGHT_CORNFLOWER_BLUE.getIndex());
style_header.setFillPattern(FillPatternType.SOLID_FOREGROUND);
style_header.setVerticalAlignment(VerticalAlignment.TOP);
style_header.setFont(font);
//Style pour les cordes
CellStyle style_string = book.createCellStyle();
App.setBorder(style_string, BorderStyle.THIN);
style_string.setVerticalAlignment(VerticalAlignment.TOP);
style_string.setFont(font);
//Style pour les chaînes avec sauts de ligne
CellStyle style_string_wrap = book.createCellStyle();
App.setBorder(style_string_wrap, BorderStyle.THIN);
style_string_wrap.setVerticalAlignment(VerticalAlignment.TOP);
style_string_wrap.setWrapText(true);
style_string_wrap.setFont(font);
//Style pour les nombres entiers
CellStyle style_int = book.createCellStyle();
App.setBorder(style_int, BorderStyle.THIN);
style_int.setDataFormat(format.getFormat("#,##0;-#,##0"));
style_int.setVerticalAlignment(VerticalAlignment.TOP);
style_int.setFont(font);
//Style pour les fractions
CellStyle style_double = book.createCellStyle();
App.setBorder(style_double, BorderStyle.THIN);
style_double.setDataFormat(format.getFormat("#,##0.0;-#,##0.0"));
style_double.setVerticalAlignment(VerticalAlignment.TOP);
style_double.setFont(font);
//Style d'affichage circulaire
CellStyle style_yen = book.createCellStyle();
App.setBorder(style_yen, BorderStyle.THIN);
style_yen.setDataFormat(format.getFormat("\"\\\"#,##0;\"\\\"-#,##0"));
style_yen.setVerticalAlignment(VerticalAlignment.TOP);
style_yen.setFont(font);
//Style d'affichage du pourcentage
CellStyle style_percent = book.createCellStyle();
App.setBorder(style_percent, BorderStyle.THIN);
style_percent.setDataFormat(format.getFormat("0.0%"));
style_percent.setVerticalAlignment(VerticalAlignment.TOP);
style_percent.setFont(font);
//Style d'affichage de la date et de l'heure
CellStyle style_datetime = book.createCellStyle();
App.setBorder(style_datetime, BorderStyle.THIN);
style_datetime.setDataFormat(format.getFormat("yyyy/mm/dd hh:mm:ss"));
style_datetime.setVerticalAlignment(VerticalAlignment.TOP);
style_datetime.setFont(font);
Row row;
int rowNumber;
Cell cell;
int colNumber;
//Créer une feuille(Essayez de faire 3 feuilles)
Sheet sheet;
for (int i = 0; i < 3; i++) {
sheet = book.createSheet();
if (sheet instanceof SXSSFSheet) {
((SXSSFSheet) sheet).trackAllColumnsForAutoSizing();
}
//Réglage du nom de la feuille
book.setSheetName(i, "Feuille" + (i + 1));
//Créer une ligne d'en-tête
rowNumber = 0;
colNumber = 0;
row = sheet.createRow(rowNumber);
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("No.");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("Chaîne");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("Chaîne de caractères avec sauts de ligne");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("entier");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("Fraction");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("Cercle");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("pour cent");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("Date et l'heure");
cell = row.createCell(colNumber);
cell.setCellStyle(style_header);
cell.setCellType(CellType.STRING);
cell.setCellValue("Cercle(8%Taxe inclu)");
//Cadre de fenêtre fixe
sheet.createFreezePane(1, 1);
//Paramètres du filtre automatique dans la ligne d'en-tête
sheet.setAutoFilter(new CellRangeAddress(0, 0, 0, colNumber));
//Réglage automatique de la largeur de la colonne
for (int j = 0; j <= colNumber; j++) {
sheet.autoSizeColumn(j, true);
}
//Génération de lignes de données(Essayez de faire 10 lignes)
for (int j = 0; j < 10; j++) {
rowNumber++;
colNumber = 0;
row = sheet.createRow(rowNumber);
cell = row.createCell(colNumber++);
cell.setCellStyle(style_int);
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(j + 1);
cell = row.createCell(colNumber++);
cell.setCellStyle(style_string);
cell.setCellType(CellType.STRING);
cell.setCellValue("c'est" + (j + 1) + "Les données dans la ligne.");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_string_wrap);
cell.setCellType(CellType.STRING);
cell.setCellValue("c'est\n" + (j + 1) + "Ligne\n données.");
cell = row.createCell(colNumber++);
cell.setCellStyle(style_int);
cell.setCellType(CellType.STRING);
cell.setCellValue((j + 1) * 1000);
cell = row.createCell(colNumber++);
cell.setCellStyle(style_double);
cell.setCellType(CellType.STRING);
cell.setCellValue((double) (j + 1) * 1000);
cell = row.createCell(colNumber++);
cell.setCellStyle(style_yen);
cell.setCellType(CellType.STRING);
cell.setCellValue((j + 1) * 1000);
cell = row.createCell(colNumber++);
cell.setCellStyle(style_percent);
cell.setCellType(CellType.STRING);
cell.setCellValue((double) (j + 1));
cell = row.createCell(colNumber++);
cell.setCellStyle(style_datetime);
cell.setCellType(CellType.STRING);
cell.setCellValue(new Date());
cell = row.createCell(colNumber);
cell.setCellStyle(style_yen);
cell.setCellType(CellType.FORMULA);
cell.setCellFormula("ROUND(" + App.getExcelColumnString(colNumber - 3) + (rowNumber + 1) + "*1.08, 0)");
//Réglage automatique de la largeur de la colonne
for (int k = 0; k <= colNumber; k++) {
sheet.autoSizeColumn(k, true);
}
}
}
//Essayez d'effacer la feuille 3
book.removeSheetAt(2);
//Sortie de fichier
fout = new FileOutputStream(outputFilePath);
book.write(fout);
}
finally {
if (fout != null) {
try {
fout.close();
}
catch (IOException e) {
}
}
if (book != null) {
try {
/*
Parce que le classeur SXSSF produit un grand nombre de fichiers temporaires au prix d'économiser de l'espace mémoire
Vous devez disposer et supprimer les fichiers temporaires lorsque vous n'en avez plus besoin
*/
((SXSSFWorkbook) book).dispose();
}
catch (Exception e) {
}
}
}
}
private static void setBorder(CellStyle style, BorderStyle border) {
style.setBorderBottom(border);
style.setBorderTop(border);
style.setBorderLeft(border);
style.setBorderRight(border);
}
private final static String[] LIST_ALPHA = {
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
};
private static String getExcelColumnString(int column) {
String result = "";
if (column >= 0) {
if (column / App.LIST_ALPHA.length > 0) {
result += getExcelColumnString(column / App.LIST_ALPHA.length - 1);
}
result += App.LIST_ALPHA[column % App.LIST_ALPHA.length];
}
return result;
}
Cela ressemble à VBA. Cela dit, je dois regarder la page de référence.
Recommended Posts