[Java] Erstellen einer Excel-Datei mit Apache POI

Einführung

Ich werde täglich von dem, was ich im Unternehmen gelernt habe, etwas ausgeben. Erstellen Sie dieses Mal eine Excel-Datei (.xlsx) mit "Apache POI".

Was ist Apache POI?

apache_logo.png Aus Java-Anwendungen wie "Excel" und "Word" API zum Lesen und Schreiben von Formatdateien von Microsoft-Produkten.

Vorbereitungen

Bereiten Sie die Bibliothek unter der folgenden URL vor. Dieses Mal werden wir die neueste Version von "poi-bin-3.17-20170915" verwenden. (Stand Dezember 2017)

Hauptsächlich verwendete Klasse

--WorkBook-Klasse (für Arbeitsmappen)

Für diese Klassen gibt es zwei Formate: "HSSF" und "XSSF".

Was sind "HSSF" und "XSSF"?

Es bezieht sich auf das Excel-Dateiformat.

Art Datei Format
HSSF Dateiformat bis Excel 2003
XSSF Dateiformat im OOXML-Format in Excel 2007

Erstellen einer Excel-Datei

Arbeitsmappe

python


/**
 *Arbeitsmappe erstellen
*/

// HSSF
HSSFWorkbook workbook1 = new HSSFWorkbook();

// XSSF
XSSFWorkbook workbook2 = new XSSFWorkbook();

// Workbook (Gemeinsame Schnittstelle für die HSSFWorkbook-Klasse und die XSSFWorkbook-Klasse)
Workbook workbook3 = new HSSFWorkbook();

Workbook workbook4 = new XSSFWorkbook();

Blatt

python


/**
  *Erstellen eines Blattes, Angeben eines Blattes
*/

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

//Bezeichnung nach Blattname
sheet1 = workbook1.getSheet("Blatt1");

//Bezeichnet durch Index(Die Blattnummern beginnen bei 0)
sheet1 = workbook1.getSheetAt(0);
	    
// XSSF
XSSFSheet sheet2 = workbook2.createSheet();
/*Blattspezifikation weggelassen*/
	    
// Sheet (Gemeinsame Schnittstelle für HSSFSheet-Klasse und XSSFSheet-Klasse)
Sheet sheet3 = workbook3.createSheet();
/*Blattspezifikation weggelassen*/

Sheet sheet4 = workbook4.createSheet();
/*Blattspezifikation weggelassen*/

Linie

python


/**
  *Linie erstellen, Linie angeben
*/

// HSSF (Zeilennummern beginnen bei 0)
HSSFRow row1 = sheet1.createRow(0);
	    
//Angeben einer Zeile(Zeilennummern beginnen bei 0)
row1 = sheet1.getRow(0);
	    
// XSSF (Zeilennummern beginnen bei 0)
XSSFRow row2 = sheet2.createRow(0);
/*Leitungsspezifikation weggelassen*/
	    
// Row (Gemeinsame Schnittstelle für HSSFRow- und XSSFRow-Klassen)
Row row3 = sheet3.createRow(0);
/*Leitungsspezifikation weggelassen*/
	    
Row row4 = sheet4.createRow(0);
/*Leitungsspezifikation weggelassen*/

Zelle

python


/**
  *Zelle erstellen, Zelle angeben, Wert in Zelle setzen
*/

// HSSF (Die Zellennummer beginnt bei 0)
HSSFCell cell1 = row1.getCell(0);
	    
//Zellspezifikation(Die Zellennummer beginnt bei 0)
cell1 = row1.getCell(0);
	    
//Wert in Zelle einstellen(Zeichenkette setzen)
/*
  *Datentypen, die in Zellen festgelegt werden können
  *Boolescher Typ: setCellValue(boolean value) 
  *Zeichenfolgentyp: setCellValue(java.lang.String value)
  *RichTextString-Typ: setCellValue(RichTextString value)
  *Kalendertyp: setCellValue(java.util.Calendar value)
  *Datumstyp: setCellValue(java.util.Date value)
  *Doppeltyp: setCellValue(double value) 
*/
cell1.setCellValue("Test 1");
	    
// XSSF (Die Zellennummer beginnt bei 0)
XSSFCell cell2 = row2.getCell(0);
/*Das Angeben von Zellen und das Festlegen von Zellenwerten entfällt.*/
	    
// Cell (Gemeinsame Schnittstelle für HSSFCell-Klasse und XSSFCell-Klasse)
Cell cell3 = row3.getCell(0);
/*Das Angeben von Zellen und das Festlegen von Zellenwerten entfällt.*/
	    
Cell cell4 = row4.getCell(0);
/*Das Angeben von Zellen und das Festlegen von Zellenwerten entfällt.*/

Zellstil

python


/**
 *Erstellen Sie einen Zellenstil, geben Sie den Zellenstil an und legen Sie den Wert für den Zellenstil fest
*/

// HSSF
HSSFCellStyle cellstyle1 = workbook1.createCellStyle();
	    
//Legen Sie einen Wert für den Zellenstil fest(Schriftart)
Font font = workbook1.createFont();
font.setFontName("MS Gothic");
font.setColor(IndexedColors.RED.getIndex());
font.setFontHeightInPoints((short)14);
cellstyle1.setFont(font);
	    
//Spezifikation des Zellstils
cell1.setCellStyle(cellstyle1);
	    
// XSSF
XSSFCellStyle cellstyle2 = workbook2.createCellStyle();
/*Das Festlegen des Zellenstils und das Festlegen des Werts des Zellenstils entfallen.*/
	    
// CellStyle (Gemeinsame Schnittstelle für die HSSFCellStyle-Klasse und die XSSFCellStyle-Klasse)
CellStyle cellstyle3 = workbook3.createCellStyle();
/*Das Festlegen des Zellenstils und das Festlegen des Werts des Zellenstils entfallen.*/
	    
CellStyle cellstyle4 = workbook4.createCellStyle();
/*Das Festlegen des Zellenstils und das Festlegen des Werts des Zellenstils entfallen.*/

Da der Zellenstil groß ist, beziehen Sie sich auf die unten stehende URL. URL : https://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/CellStyle.html

Ausgabe einer Excel-Datei

python


/**
 *Ausgabe einer Excel-Datei
*/

//Ausgabedateieinstellungen
FileOutputStream outExcelFile = null;	    
String outputPath = "Dateipfad, den Sie ausgeben möchten";
String fileName = "test.xlsx";

try{
     //Ausgabedatei
     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());
     }
}

Versuchte es zu schaffen

Dieses Mal habe ich versucht, "Neunundneunzig Tabelle" in Excel auszugeben. Ich möchte es nur in Excel anzeigen, also habe ich es ziemlich gewaltsam gemacht. Bitte beachten Sie.

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;



/**
 *Geben Sie die Tabelle mit neunundneunzig in eine Excel-Datei aus
 * @author s-tsuchida
 *
 */
public class Kuku_Poi {
	
	public static void main(String[] args) {
		
		//Arbeitsmappe
		XSSFWorkbook workBook = null;
		//Blatt
		XSSFSheet sheet = null;
		//Ausgabedatei
		FileOutputStream outPutFile = null;
		//Pfad der Ausgabedatei
		String outPutFilePath = null;
		//Name der Ausgabedatei
		String outPutFileName = null;
		
		//Erstellen einer Excel-Datei
		try {
			
			//Arbeitsmappe erstellen
			workBook = new XSSFWorkbook();
			
			//Blatteinstellungen
			sheet = workBook.createSheet();
			workBook.setSheetName(0, "Neunundneunzig Tisch");
			sheet = workBook.getSheet("Neunundneunzig Tisch");
			
			//Erstellen Sie die erste Zeile
			XSSFRow row = sheet.createRow(2);
			
			//Einstellungen für den Zellenstil "Titel"
			XSSFCellStyle titleCellStyle = workBook.createCellStyle();
			XSSFCell cell = row.createCell(7);
			XSSFFont titleFont = workBook.createFont();
			titleFont.setFontName("MS Gothic");
			titleFont.setFontHeightInPoints((short)36);
			titleFont.setUnderline(XSSFFont.U_SINGLE);
			titleCellStyle.setFont(titleFont);
			cell.setCellStyle(titleCellStyle);
			
			//Stellen Sie "Titel" in der Zelle ein
			cell.setCellValue("Neunundneunzig Tisch");
			
			//Einstellungen für den Zellenstil "Tabellenkopf"
			XSSFCellStyle headerCellStyle = workBook.createCellStyle();
			XSSFFont headerFont = workBook.createFont();
			headerFont.setFontName("MS Gothic");
			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);
			
			//Setze "Tabellenkopf" in Zelle
			row = sheet.createRow(5);
			//Seite
			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);
				}
			}
			//Vertikal
			for(int i = 6 , j = 1 ; i < 15 ; i++, j++) {
				row = sheet.createRow(i);
				cell = row.createCell(3);
				cell.setCellStyle(headerCellStyle);
				cell.setCellValue(j);
			}
			
			//Einstellung des Zellenstils von "Berechnungsergebnis"
			XSSFCellStyle resultCellStyle = workBook.createCellStyle();
			XSSFFont resultFont = workBook.createFont();
			resultFont.setFontName("MS Gothic");
			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);
			
			//Setze "Tabellenkopf" in Zelle
			double num1 = 0;
			double num2 = 0;
			double result = 0;
			for(int i = 6 ; i < 15 ; i++) {
				for(int j = 4 ; j < 13 ; j++) {
					//Neunundneunzig Berechnungen
					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);
				}
			}
			
			//Excel-Datei ausgeben
			try {
				
				//Holen Sie sich das aktuelle Datum
				Date date = new Date();
				SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
				
				//Angeben des Dateipfads und des Dateinamens
				outPutFilePath = "Dateipfad, den Sie ausgeben möchten";
				outPutFileName = "kuku_" + dateFormat.format(date).toString() +  ".xlsx";
				
				//Excel-Datei ausgeben
				outPutFile = new FileOutputStream(outPutFilePath + outPutFileName);
				workBook.write(outPutFile);
				
				System.out.println("「" + outPutFilePath + outPutFileName + "Wurde ausgegeben.");
				
			}catch(IOException e) {
				System.out.println(e.toString());
			}
			
		}catch(Exception e) {
			System.out.println(e.toString());
		}
	
	}

}

Zusammenfassung

Dieses Mal habe ich zum ersten Mal "Apache POI" verwendet. Ich hatte das Gefühl, dass die Operation einfacher und benutzerfreundlicher war als erwartet. Ich kann das Gefühl des Tappens nicht leugnen, also werde ich weiter lernen.

Recommended Posts

[Java] Erstellen einer Excel-Datei mit Apache POI
Excel-Operation mit Apache POI
Ausgabe nach Excel mit Apache POI!
Erstellen Sie eine Excel-Datei mit poi
[Java] Behandeln Sie Excel-Dateien mit Apache POI
[Java] Textextraktion aus PowerPoint (ppt) mit Apache POI
Ersetzen Sie Text in der AutoShape of Excel-Datei durch Apache POI
[Apache POI] Entsprechende Excel-Version
Java erstellt Excel-Dokumente
Bearbeiten Sie Excel mit Apache POI
Apache POI Excel mit Kotlin
Java-Lernnotiz (Erstellen eines Arrays)
Laden Sie Dateien mit Java HttpURLConnection hoch
gemeinsamer Export, um mit Poi zu übertreffen
Beispiel für eine EXCEL-Dateiaktualisierung mit JAVA
So formatieren Sie Enum mit dem Formatierer-Maven-Plugin (Java)
Map ohne Verwendung eines Arrays in Java
[Java] Senden Sie eine E-Mail mit Amazon SES
Hinweise zum Lesen und Generieren von XLSX-Dateien aus Java mit Apache POI
Verwenden Sie diese Option, ohne eine Authentifizierungsdatei vorzubereiten, wenn Sie das Firebase Admin SDK in Java verwenden
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
Erstellen einer Funktion zur automatischen Vervollständigung mit Acts-as-Taggable-On und Tagit.js
Erstellung von Java-Dateien
Studieren von Java8 (z. B. Lesen von Dateien mit Stream)
Speichern Sie Daten aus einer Excel-Datei mit Rails gem roo
Testen Sie den Inhalt einer Excel-Datei mit JUnit
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
Ein Memorandum zum Erstellen eines erweiterten Loggers mit org.slf4j.Logger