[Java] Création d'un fichier Excel à l'aide d'Apache POI

introduction

Je sortirai de ce que j'ai appris au quotidien dans l'entreprise. Cette fois, nous allons créer un fichier Excel (.xlsx) en utilisant "Apache POI".

Qu'est-ce que Apache POI?

apache_logo.png À partir d'applications Java telles que "Excel" et "Word" API pour la lecture et l'écriture de fichiers de format de produits Microsoft.

Préparation préalable

Préparez la bibliothèque à partir de l'URL suivante. Cette fois, nous utiliserons la dernière version de "poi-bin-3.17-20170915". (En décembre 2017)

Classe principalement utilisée

Il existe deux formats pour ces classes, "HSSF" et "XSSF".

Que signifient "HSSF" et "XSSF"?

Il fait référence au format de fichier Excel.

type format de fichier
HSSF Format de fichier jusqu'à Excel 2003
XSSF Format de fichier au format OOXML dans Excel 2007

Créer un fichier Excel

classeur

python


/**
 *Créer un classeur
*/

// HSSF
HSSFWorkbook workbook1 = new HSSFWorkbook();

// XSSF
XSSFWorkbook workbook2 = new XSSFWorkbook();

// Workbook (Interface commune pour la classe HSSFWorkbook et la classe XSSFWorkbook)
Workbook workbook3 = new HSSFWorkbook();

Workbook workbook4 = new XSSFWorkbook();

Feuille

python


/**
  *Créer une feuille, spécifier une feuille
*/

// HSSF
HSSFSheet sheet1 = workbook1.createSheet();

//Désignation par nom de feuille
sheet1 = workbook1.getSheet("Feuille 1");

//Désigné par index(Les numéros de feuille commencent à 0)
sheet1 = workbook1.getSheetAt(0);
	    
// XSSF
XSSFSheet sheet2 = workbook2.createSheet();
/*Spécification de feuille omise*/
	    
// Sheet (Interface commune à la classe HSSFSheet et à la classe XSSFSheet)
Sheet sheet3 = workbook3.createSheet();
/*Spécification de feuille omise*/

Sheet sheet4 = workbook4.createSheet();
/*Spécification de feuille omise*/

ligne

python


/**
  *Créer une ligne, spécifier une ligne
*/

// HSSF (Les numéros de ligne commencent à 0)
HSSFRow row1 = sheet1.createRow(0);
	    
//Spécifier une ligne(Les numéros de ligne commencent à 0)
row1 = sheet1.getRow(0);
	    
// XSSF (Les numéros de ligne commencent à 0)
XSSFRow row2 = sheet2.createRow(0);
/*Spécification de ligne omise*/
	    
// Row (Interface commune aux classes HSSFRow et XSSFRow)
Row row3 = sheet3.createRow(0);
/*Spécification de ligne omise*/
	    
Row row4 = sheet4.createRow(0);
/*Spécification de ligne omise*/

cellule

python


/**
  *Créer une cellule, spécifier la cellule, définir la valeur dans la cellule
*/

// HSSF (Le numéro de cellule commence à 0)
HSSFCell cell1 = row1.getCell(0);
	    
//Spécification de la cellule(Le numéro de cellule commence à 0)
cell1 = row1.getCell(0);
	    
//Définir la valeur dans la cellule(Définir la chaîne de caractères)
/*
  *Types de données pouvant être définis dans des cellules
  *Type booléen: setCellValue(boolean value) 
  *Type de chaîne: setCellValue(java.lang.String value)
  *Type RichTextString: setCellValue(RichTextString value)
  *Type de calendrier: setCellValue(java.util.Calendar value)
  *Type de date: setCellValue(java.util.Date value)
  *Type double: setCellValue(double value) 
*/
cell1.setCellValue("Test 1");
	    
// XSSF (Le numéro de cellule commence à 0)
XSSFCell cell2 = row2.getCell(0);
/*La spécification des cellules et la définition des valeurs de cellule sont omises.*/
	    
// Cell (Interface commune à la classe HSSFCell et à la classe XSSFCell)
Cell cell3 = row3.getCell(0);
/*La spécification des cellules et la définition des valeurs de cellule sont omises.*/
	    
Cell cell4 = row4.getCell(0);
/*La spécification des cellules et la définition des valeurs de cellule sont omises.*/

Style de cellule

python


/**
 *Créer un style de cellule, spécifier le style de cellule, définir la valeur du style de cellule
*/

// HSSF
HSSFCellStyle cellstyle1 = workbook1.createCellStyle();
	    
//Définir une valeur pour le style de cellule(Police de caractère)
Font font = workbook1.createFont();
font.setFontName("MS gothique");
font.setColor(IndexedColors.RED.getIndex());
font.setFontHeightInPoints((short)14);
cellstyle1.setFont(font);
	    
//Spécification du style de cellule
cell1.setCellStyle(cellstyle1);
	    
// XSSF
XSSFCellStyle cellstyle2 = workbook2.createCellStyle();
/*La spécification du style de cellule et la définition de la valeur du style de cellule sont omises.*/
	    
// CellStyle (Interface commune à la classe HSSFCellStyle et à la classe XSSFCellStyle)
CellStyle cellstyle3 = workbook3.createCellStyle();
/*La spécification du style de cellule et la définition de la valeur du style de cellule sont omises.*/
	    
CellStyle cellstyle4 = workbook4.createCellStyle();
/*La spécification du style de cellule et la définition de la valeur du style de cellule sont omises.*/

Le style de cellule étant volumineux, reportez-vous à l'URL ci-dessous. URL : https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellStyle.html

Sortie de fichier Excel

python


/**
 *Sortie de fichier Excel
*/

//Paramètres du fichier de sortie
FileOutputStream outExcelFile = null;	    
String outputPath = "Chemin du fichier que vous souhaitez générer";
String fileName = "test.xlsx";

try{
     //Fichier de sortie
     outExcelFile = new FileOutputStream(outputPath + fileName);
     workbook1.write(outExcelFile);
}catch(Exception e){
     System.out.println(e.toString());
}finally{
     try {
	    outExcelFile.close();
     }catch(Exception e){
	    System.out.println(e.toString());
     }
}

J'ai essayé de le faire

Cette fois, j'ai essayé de sortir "Ninety-nine Table" dans Excel. Je veux juste l'afficher dans Excel, donc je l'ai fait assez de force. Notez s'il vous plaît.

kuku.png

python


package apache_poi.kuku;

import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;



/**
 *Exportez le tableau de quatre-vingt-dix-neuf dans un fichier Excel
 * @author s-tsuchida
 *
 */
public class Kuku_Poi {
	
	public static void main(String[] args) {
		
		//classeur
		XSSFWorkbook workBook = null;
		//Feuille
		XSSFSheet sheet = null;
		//Fichier de sortie
		FileOutputStream outPutFile = null;
		//Chemin du fichier de sortie
		String outPutFilePath = null;
		//Nom du fichier de sortie
		String outPutFileName = null;
		
		//Créer un fichier Excel
		try {
			
			//Créer un classeur
			workBook = new XSSFWorkbook();
			
			//Paramètres de la feuille
			sheet = workBook.createSheet();
			workBook.setSheetName(0, "Quatre-vingt-dix-neuf table");
			sheet = workBook.getSheet("Quatre-vingt-dix-neuf table");
			
			//Créer la ligne initiale
			XSSFRow row = sheet.createRow(2);
			
			//Paramètres de style de cellule "Titre"
			XSSFCellStyle titleCellStyle = workBook.createCellStyle();
			XSSFCell cell = row.createCell(7);
			XSSFFont titleFont = workBook.createFont();
			titleFont.setFontName("MS gothique");
			titleFont.setFontHeightInPoints((short)36);
			titleFont.setUnderline(XSSFFont.U_SINGLE);
			titleCellStyle.setFont(titleFont);
			cell.setCellStyle(titleCellStyle);
			
			//Définir "Titre" dans la cellule
			cell.setCellValue("Quatre-vingt-dix-neuf table");
			
			//Paramètres de style de cellule "En-tête de tableau"
			XSSFCellStyle headerCellStyle = workBook.createCellStyle();
			XSSFFont headerFont = workBook.createFont();
			headerFont.setFontName("MS gothique");
			headerFont.setFontHeightInPoints((short)25);
			headerCellStyle.setFont(headerFont);
			headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
			headerCellStyle.setAlignment(HorizontalAlignment.CENTER);
			headerCellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.index);
			headerCellStyle.setBorderTop(BorderStyle.MEDIUM);
			headerCellStyle.setBorderBottom(BorderStyle.MEDIUM);
			headerCellStyle.setBorderRight(BorderStyle.MEDIUM);
			headerCellStyle.setBorderLeft(BorderStyle.MEDIUM);
			
			//Définir "en-tête de tableau" dans la cellule
			row = sheet.createRow(5);
			//côté
			for(int i = 3 , j = 0; i < 13 ; i++, j++) {
				cell = row.createCell(i);
				cell.setCellStyle(headerCellStyle);
				if(i == 3) {
					cell.setCellValue("");
				}else {
					cell.setCellValue(j);
				}
			}
			//Verticale
			for(int i = 6 , j = 1 ; i < 15 ; i++, j++) {
				row = sheet.createRow(i);
				cell = row.createCell(3);
				cell.setCellStyle(headerCellStyle);
				cell.setCellValue(j);
			}
			
			//Paramètre de style de cellule du "résultat du calcul"
			XSSFCellStyle resultCellStyle = workBook.createCellStyle();
			XSSFFont resultFont = workBook.createFont();
			resultFont.setFontName("MS gothique");
			resultFont.setFontHeightInPoints((short)25);
			resultCellStyle.setFont(resultFont);
			resultCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
			resultCellStyle.setAlignment(HorizontalAlignment.CENTER);
			resultCellStyle.setFillForegroundColor(IndexedColors.WHITE.index);
			resultCellStyle.setBorderTop(BorderStyle.MEDIUM);
			resultCellStyle.setBorderBottom(BorderStyle.MEDIUM);
			resultCellStyle.setBorderRight(BorderStyle.MEDIUM);
			resultCellStyle.setBorderLeft(BorderStyle.MEDIUM);
			
			//Définir "en-tête de tableau" dans la cellule
			double num1 = 0;
			double num2 = 0;
			double result = 0;
			for(int i = 6 ; i < 15 ; i++) {
				for(int j = 4 ; j < 13 ; j++) {
					//Quatre-vingt-dix-neuf calculs
					num1 = sheet.getRow(5).getCell(j).getNumericCellValue();
					num2 = sheet.getRow(i).getCell(3).getNumericCellValue();
					result = num1 * num2;

					row = sheet.getRow(i);
					cell = row.createCell(j);
					cell.setCellStyle(resultCellStyle);
					cell.setCellValue(result);
				}
			}
			
			//Fichier Excel de sortie
			try {
				
				//Obtenez la date actuelle
				Date date = new Date();
				SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
				
				//Spécification du chemin et du nom du fichier
				outPutFilePath = "Chemin du fichier que vous souhaitez générer";
				outPutFileName = "kuku_" + dateFormat.format(date).toString() +  ".xlsx";
				
				//Fichier Excel de sortie
				outPutFile = new FileOutputStream(outPutFilePath + outPutFileName);
				workBook.write(outPutFile);
				
				System.out.println("「" + outPutFilePath + outPutFileName + "A été sortie.");
				
			}catch(IOException e) {
				System.out.println(e.toString());
			}
			
		}catch(Exception e) {
			System.out.println(e.toString());
		}
	
	}

}

Résumé

Cette fois, j'ai utilisé "Apache POI" pour la première fois, J'ai senti que l'opération était plus facile et plus facile à utiliser que ce à quoi je m'attendais. Je ne peux pas nier le sentiment de tâtons, alors je vais continuer à étudier.

Recommended Posts

[Java] Création d'un fichier Excel à l'aide d'Apache POI
Opération Excel avec Apache POI
Sortie vers Excel en utilisant Apache POI!
Créer un fichier Excel avec POI
[Java] Gérer les fichiers Excel avec Apache POI
[Java] Extraction de texte de PowerPoint (ppt) à l'aide d'Apache POI
Remplacer le texte dans la forme automatique du fichier Excel par Apache POI
[Apache POI] Version Excel correspondante
Java crée des documents Excel
Manipuler Excel avec Apache POI
Apache POI Excel avec Kotlin
Mémo d'apprentissage Java (création d'un tableau)
Télécharger des fichiers à l'aide de Java HttpURLConnection
exportation courante pour exceller en utilisant poi
Exemple de mise à jour de fichier EXCEL avec JAVA
Comment formater enum à l'aide de formatter-maven-plugin (Java)
Mapper sans utiliser de tableau en java
[Java] Envoyer un e-mail à l'aide d'Amazon SES
Notes pour lire et générer des fichiers xlsx à partir de Java à l'aide d'Apache POI
À utiliser sans préparer de fichier d'authentification lors de l'utilisation du SDK Firebase Admin dans Java
Comment créer un formulaire Excel à l'aide d'un fichier modèle avec Spring MVC
Création d'une fonction de saisie semi-automatique à l'aide d'actes-comme-taggable-on et Tagit.js
création de fichier java
Etudier java8 (comme lire des fichiers à l'aide de Stream)
Enregistrer les données d'un fichier Excel à l'aide de Rails Gem Roo
Tester le contenu d'un fichier Excel avec JUnit
J'ai essayé d'utiliser l'instruction Extended for en Java
Un mémorandum pour créer un enregistreur étendu à l'aide de org.slf4j.Logger