Hinweise zum Lesen und Generieren von XLSX-Dateien aus Java mit Apache POI

Über diesen Artikel

Ziel ist es, dass Benutzer, die Apache POI verwenden möchten, Excel-Dateien während des Kopierens bearbeiten können. Das hier gezeigte Implementierungsbeispiel ist nur die Mindestimplementierung zum Ausführen von Apache POI, und die Fehlerbehandlung ist separat erforderlich. Die Version, die für die Arbeit mit dem Code bestätigt wurde, ist 4.1.0.

Apache POI vorbereiten

Sie können es von hier aus vorbereiten. https://poi.apache.org/download.html

Objekte in Apache POI

org.apache.poi.ss.usermodel.Workbook repräsentiert die gesamte Arbeitsmappe der xlsx-Datei.

Damit die xlsx-Datei gelesen oder geschrieben werden kann, geben Sie zuerst das Zielblatt an, nachdem Sie das Objekt "Arbeitsmappe" erstellt haben. Dies ist "org.apache.poi.ss.usermodel.Sheet".

Geben Sie die Zeile zum Lesen / Schreiben an, nachdem Sie das Objekt "Sheet" aus dem Objekt "Workbook" abgerufen haben. Dies ist org.apache.poi.ss.usermodel.Row.

Geben Sie nach dem Abrufen des "Row" -Objekts aus dem "Sheet" -Objekt die Zelle an, die gelesen oder geschrieben werden soll. Geben Sie die Spalte und die Zelle an. Dies ist "org.apache.poi.ss.usermodel.Cell".

Nachdem Sie das Objekt "Zelle" aus dem Objekt "Zeile" abgerufen haben, können Sie wie in Excel Werte in die Zelle lesen und schreiben.

Lesen Sie die XLSX-Datei

Cell-Objekt abrufen

Holen Sie sich zuerst das Objekt "Arbeitsmappe" aus dem Dateipfad.

Workbook workbook = WorkbookFactory.create(new FileInputStream(filePath));

Das "Blatt" -Objekt kann aus dem Blattnamen und dem Index abgerufen werden (beginnend mit 0 vom Blatt ganz links).

//Erhalten aus dem Blattnamen
Sheet sheet = workbook.getSheet(name);

//Vom Index abrufen
Sheet sheet = workbook.getSheetAt(index);

Holen Sie sich aus dem Objekt "Sheet" das Objekt "Row" und dann das Objekt "Cell".

Row row = sheet.getRow(rowIndex);
Cell cell = row.getCell(columIndex);

Grundsätzlich ist es zum Abrufen des "Row" -Objekts und des "Cell" -Objekts erforderlich, den Index 0 start wie die Zeile und die Spalte anzugeben. Bei Verwendung von "CellReference" ist dies jedoch in Excel bekannt. Es ist auch möglich, im A1-Format anzugeben.

CellReference reference = new CellReference(a1Position);
Row row = sheet.getRow(reference.getRow());
Cell cell = row.getCell(reference.getCol());

Holen Sie sich den Inhalt der Zelle

Wenn Sie nach dem Abrufen des Objekts "Cell" den Inhalt der Zelle als Zeichenfolge abrufen möchten, führen Sie die Methode "Cell.getCellType ()" aus, um den in der Zelle enthaltenen Wertetyp und die Anzahl der jeweiligen Werte abzurufen Oder Sie müssen die entsprechende Methode individuell gestalten.

Wenn der Zelleninhalt eine Zeichenfolge ("STRING") ist, kann er mit dem Standard "Cell.getStringCellValue ()" gelesen werden.

Bei einer Zahl (NUMERIC) wird das Datum ebenfalls als Zahl behandelt. Es ist daher besser, darauf zu achten und Ihre eigene Methode vorzubereiten. Bei Datumsangaben möchten Sie in den meisten Fällen einen Wert mit einem gestalteten Anzeigeformat, sodass Sie dies mit Ihrer eigenen Methode behandeln können.

Im Fall des Wahrheitswertes (BOOLEAN) können Sie den Wert von boolean mit dem StandardwertCell.getBooleanCellValue ()abrufen, also konvertieren Sie ihn in eine Zeichenfolge.

Wenn Sie für einen Funktionswert (FORMULA) nur den Funktionsausdruck als Zeichenfolge möchten, können Sie ihn mit Cell.getCellFormula () abrufen. Im Allgemeinen denke ich jedoch, dass Sie in den meisten Fällen das Berechnungsergebnis der Funktion wünschen. Bereiten Sie in diesem Fall Ihre eigene Methode vor.

Wenn es keinen Wert gibt (BLANK), handelt es sich häufig um eine zusammengeführte Zelle. Die zusammengeführte Zelle soll einen Wert in der oberen linken Zelle des zusammengeführten Bereichs haben, sodass das Lesen einer anderen Zelle im zusammengeführten Bereich als leer behandelt wird. Da die zusammengeführten Zellen bei Verwendung von Excel auf besondere Weise gespeichert werden, bereiten wir eine separate Methode vor, um dies zu handhaben.

Hier ist eine einfache Implementierung einer Methode, die ein "Cell" -Objekt verwendet und einen "String" zurückgibt: Wir werden unten über unsere eigenen Methoden sprechen.

String readCell(Cell cell) {
    switch (cell.getCellType()) {
    //String(Standard)
    case STRING:
    	return cell.getStringCellValue();
    //Numerischer Wert(Besitzen)
    case NUMERIC:
    	return getStringNmericValue(cell);
    //Wahrheitswert(Standard)
    case BOOLEAN:
    	return Boolean.toString(cell.getBooleanCellValue());
    //Funktionswert(Besitzen)
    case FORMULA:
    	return getStringFormulaValue(cell);
    //Leer(Besitzen)
    case BLANK:
    	return getStringRangeValue(cell);
    default:
    	System.out.println("Unexpected Type: "+cell.getCellType());
    	return null;
    }
}

Eigene Methode des numerischen Wertes (NUMERIC)

Wenn der Wert in der Zelle nur eine Zahl ist, können Sie ihn in eine Zeichenfolge konvertieren und zurückgeben. Wenn es sich jedoch um ein Datum handelt, passen Sie den Stil an und rufen Sie ihn dann als Zeichenfolge ab.

Für Standard-Datumsformate können Sie es als Zeichenfolge mit "java.time" abrufen. Für benutzerdefinierte Typen verwenden Sie jedoch "org.apache.poi.ss.format.CellFormat", um es zu formatieren. Ruft den Wert dieses Textes nach dem Anpassen ab.

Das Folgende ist ein einfaches Implementierungsbeispiel.

//Holen Sie sich die Nummer unter Berücksichtigung des Datums
String getStringNmericValue(Cell cell) {
	//Für Standarddaten
	if(DateUtil.isCellDateFormatted(cell)) {
		Date date = cell.getDateCellValue();
		//java.time.Stringify mit DateTimeFormatter
		DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss.SSS");
		LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
		return dateTimeFormatter.format(localDateTime);
	}
	//Wenn Sie das Datum in einem benutzerdefinierten Typ festgelegt haben
	if(BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX <= cell.getCellStyle().getDataFormat()) {
		CellFormat cellFormat = CellFormat.getInstance(cell.getCellStyle().getDataFormatString());
		return cellFormat.apply(cell).text;
	}
	//Wenn es kein Datum ist, wird eine Nummer zurückgegeben.
	return Double.toString(cell.getNumericCellValue());
}

Eigene Methode des Funktionswertes (FORMEL)

Um das Berechnungsergebnis der Funktion zu erhalten, übergeben Sie das Zielobjekt "Zelle" an das Objekt "FormulaEvaluator" und erhalten Sie das Berechnungsergebnis.

Da das Berechnungsergebnis jedoch als "CellValue" -Objekt anstelle einer Zeichenfolge zurückgegeben wird, wird es erneut durch "CellValue.getCellType ()" beurteilt, ob das Berechnungsergebnis eine Zeichenfolge, ein numerischer Wert oder ein Wahrheitswert ist, und jedes wird bestimmt. , Lesen Sie den Wert mit der Standard-POI-Methode.

Beachten Sie auch, dass es einige Funktionen gibt, die das FormulaEvaluator-Objekt nicht unterstützt. Bitte beachten Sie die Liste der aktuell unterstützten Funktionen am Ende. Wenn Sie eine nicht unterstützte Funktion ausführen, wird eine "EvaluationException" ausgelöst.

Wenn Sie eine benutzerdefinierte Funktion ausführen möchten, lesen Sie bitte hier. https://poi.apache.org/components/spreadsheet/user-defined-functions.html

Das Folgende ist ein einfaches Implementierungsbeispiel für die eigene Methode der eigenen FORMULA-Methode.

//Funktion ausführen und lesen
String getStringFormulaValue(Cell cell) {
	try {
        //Funktionsausführung
		CreationHelper helper = workbook.getCreationHelper();
		FormulaEvaluator evaluator = helper.createFormulaEvaluator();
		CellValue value = evaluator.evaluate(cell);

        //Ändern Sie das Aufrufziel der Methode entsprechend dem Inhalt des Berechnungsergebnisses.
		switch (value.getCellType()) {
		case STRING:
			return value.getStringValue();
		case NUMERIC:
			return Double.toString(value.getNumberValue());
		case BOOLEAN:
			return Boolean.toString(value.getBooleanValue());
		default:
			System.out.println("Unexpected Type: "+value.getCellType());
			return null;
		}
	}catch(Exception e) {
		return cell.getCellFormula();
	}
}

Leere (BLANK) eigene Methode

Im Fall von "BLANK" spielt es keine Rolle, ob es sich nur um eine leere Zelle handelt, aber wenn es sich um eine zusammengeführte Zelle handelt, spielt es keine Rolle, ob sie nicht gelesen werden kann. Stellen Sie daher sicher, dass sie der zusammengeführten Zelle entspricht.

Die zusammengeführten Zellen werden gemeinsam in einem speziellen Bereich des Blattes gespeichert. Um festzustellen, ob es sich bei der zu lesenden Zelle um eine zusammengeführte Zelle handelt, nehmen Sie die Liste des zusammengeführten Zellenbereichs heraus und lesen Sie sie. Legt fest, ob ein zusammengeführter Bereich Zellen enthält.

Wenn es einen zusammengeführten Bereich gibt, in dem die zu lesende Zelle im Bereich enthalten ist, geben Sie oben links den Bereich an, in dem der Wert gelesen werden soll.

Zu diesem Zeitpunkt kann der Typ des Zelleninhalts nicht ohne Verwendung von "Cell.getCellType ()" bestimmt werden, sodass die obere linke Zelle an die Methode übergeben wird, die "String" erneut von "Cell" zurückgibt. (ReadCell-Methode im obigen Implementierungsbeispiel)

Das Folgende ist ein einfaches Implementierungsbeispiel.

//Zusammengeführte Zellen lesen
String getStringRangeValue(Cell cell) {
    //Ruft den Index der zu lesenden Zelle ab
	int rowIndex = cell.getRowIndex();
	int columnIndex = cell.getColumnIndex();

    //Suchen Sie sorgfältig, um festzustellen, ob es im kombinierten Bereich enthalten ist.
	int size = sheet.getNumMergedRegions();
	for (int i = 0; i < size; i++) {
		CellRangeAddress range = sheet.getMergedRegion(i);
        //Wenn ein Bereich enthalten ist
		if (range.isInRange(rowIndex, columnIndex)) {
			//Holen Sie sich die obere linke Zelle
			Cell firstCell = sheet.getRow(range.getFirstRow()).getCell(range.getFirstColumn());
            //Cell->Zur String-Methode wechseln.
			return readCell(firstCell);
		}
	}
	return null;
}

Schreiben einer XLSX-Datei

Erstellen von "Arbeitsmappe" -, "Blatt" -, "Zeilen" -, "Zellen" -Objekten

Wenn Sie eine neue Arbeitsmappe im xlsx-Format erstellen, erstellen Sie eine Instanz von "org.apache.poi.xssf.usermodel.XSSFWorkbook" und empfangen Sie sie als Variable vom Typ "Arbeitsmappe".

Wenn Sie ein "Blatt" -Objekt erstellen möchten, ist es besser, es in einen Namen zu konvertieren, der für ein Blatt mit "WorkbookUtil.createSafeSheetName ()" verwendet werden kann, und es dann zu erstellen.

In Bezug auf das "Row" -Objekt und das "Cell" -Objekt sind im "Sheet" -Objekt im Ausgangszustand alle Zeilen und Zellen "Null", sodass jedes Objekt einmal erstellt wird, bevor in die Zelle geschrieben wird. wird gebraucht. Wenn Sie die Zeile / Spalte im A1-Format angeben möchten, verwenden Sie "CellReference" wie oben beschrieben.

//Erstellen eines Arbeitsmappenobjekts
Workbook workbook = new XSSFWorkbook();

//Blattobjekt generieren
String safeName = WorkbookUtil.createSafeSheetName(name);
Sheet sheet = workbook.createSheet(safeName);

//Konvertierung vom A1-Format in den Index
CellReference reference = new CellReference(a1Position);
int rowIndex = reference.getRow();
int columIndex = reference.getCol();

//Generieren eines Zeilenobjekts
Row row = sheet.createRow(rowIndex);

//Erstellen eines Zellenobjekts
Cell cell = row.createCell(columIndex);

Dateiausgabe

Nachdem Sie die verschiedenen unten gezeigten Änderungen am Objekt "Arbeitsmappe" vorgenommen haben, verwenden Sie "FileOutputStream", um die xlsx-Datei endgültig zu exportieren. (Obwohl der Kürze halber weggelassen, schreiben Sie bitte try-catch entsprechend in den tatsächlichen Code.)

FileOutputStream fileOut = new FileOutputStream(filePath);
workbook.write(fileOut);
fileOut.close();

Schreiben einer Zeichenfolge in eine Zelle

Das Schreiben einer Zeichenfolge ist sehr einfach. Rufen Sie einfach "Cell.setvalue ()" auf. Wenn Sie jedoch eine Methode erstellen, die Zellen durch Angabe des Index schreibt, ist es besser, das Objekt "Row" oder "Cell" an dieser Position auf Null zu überprüfen.

Hier ist ein einfaches Implementierungsbeispiel.

void writeCellAt(int rowIndex, int columIndex, String value) {
    //Row,Zell-Null-Prüfung
	Row row = sheet.getRow(rowIndex);
    if(row == null) {
        row = sheet.createRow(rowIndex);
    }
	Cell cell = row.getCell(columIndex);
    if(cell == null) {
		cell = row.createCell(columIndex);
	}

    //Eine Zeichenfolge schreiben
	cell.setCellValue(value);
}

Grundsätzlich denke ich, dass eine komplizierte Verarbeitung mit Java-Funktionen und -Bibliotheken implementiert werden kann, solange Sie eine Zeichenfolge schreiben können.

Wenn es sich um ein einfaches Tabellenformat handelt, ist es mit einer CSV-Datei möglich, aber ich denke, es gibt einige Zelldekorationen als Grund für die Verwendung von xlsx. Ich denke, dass es viele Menschen in der Umgebung gibt, in denen xlsx als erstes Dokument anstelle von PDF und dox verwendet wird. Daher wird die grundlegende Dekorationsmethode unten gezeigt. Es ist immer noch besser, die Null von "Row" und "Cell" für die unten gezeigten Dekorationen zu überprüfen.

Zellen verbinden

Verwenden Sie diesmal "Sheet.addMergedRegion ()", um sich beim "Sheet" -Objekt zu registrieren, so wie es beim Lesen der zusammengeführten Zellen vom "Sheet" -Objekt erhalten wurde.

//topRow: Zeilenindex der oberen linken Zelle
//topColum: Spaltenindex der oberen linken Zelle
//bottomRow: Zeilenindex der unteren rechten Zelle
//bottomColum: Spaltenindex der unteren rechten Zelle
CellRangeAddress cellRangeAddress = new CellRangeAddress(topRow, bottomRow, topColum, bottomColum);
sheet.addMergedRegion(cellRangeAddress);

Zeilenhöhe ändern

Sie können die Zeilenhöhe mit "Row.setHeightInPoints ()" ändern. Wenn es schwierig ist, eine bestimmte Höhe anzugeben, können Sie diese in Vielfachen des Standardwerts angeben.

//mehrere
float mult = 2.0f;
//Auf den doppelten Standardwert einstellen
row.setHeightInPoints(mult*sheet.getDefaultRowHeightInPoints());

Verwenden Sie zum Umschließen und Anzeigen des Ganzen "CellStyle" für das Zielobjekt "Cell" wie folgt:

CellStyle style = workbook.createCellStyle();
style.setWrapText(true);
cell.setCellStyle(style);

Wenn Sie dadurch keine gute dynamische Passform erhalten, lesen Sie bitte hier. https://stackoverflow.com/questions/19145628/auto-size-height-for-rows-in-apache-poi

Wenn die Höheneinstellung nicht funktioniert, scheint es auch eine Möglichkeit zu geben, Zeilenumbrüche zu zählen und als Vielfaches festzulegen. https://stackoverflow.com/questions/45387206/how-to-increase-the-height-of-the-excel-row-using-apache-poi-having-merged-cell/45388037

Randzeichnung

Um einen Rahmen zu zeichnen, verwenden Sie "CellStyle", um das Zielobjekt "Cell" einzeln anzugeben, nach oben, unten, links und rechts, wie unten gezeigt. Die Dicke wird durch "BorderStyle" angegeben. Es ist ein verwirrender Name, aber "BorderStyle.THIN" steht im Allgemeinen für einen dicken Rand und "BorderStyle.MEDIUM" für einen dicken Rand.

CellStyle style = workbook.createCellStyle();
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);

cell.setCellStyle(style);

Ändern Sie die Schriftfarbe

Die Schriftfarbe kann auch mit "CellStyle" für das Ziel "Cell" -Objekt geändert werden.

Für Farben wird im Voraus eine Standardfarbpalette als Variable erstellt. Farbmuster finden Sie hier. https://lincolnminto.wordpress.com/2014/04/07/apache-poi-referencia-para-estilos-de-celulas-apache-poi-cellstyles-reference/

CellStyle style = workbook.createCellStyle();
Font font = workbook.createFont();
font.setColor(IndexedColors.WHITE.getIndex());
style.setFont(font);
cell.setCellStyle(style);

Zellen füllen

Die Zellenfüllung kann auch mit CellStyle für das Objekt Cell geändert werden.

Verwenden Sie verwirrenderweise "CellStyle.setFillForegroundColor ()" anstelle von "CellStyle.setFillBackgroundColor ()".

CellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.CORAL.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
cell.setCellStyle(style);

Ich habe nicht bestätigt, dass es ordnungsgemäß funktioniert, aber es scheint eine Möglichkeit zu geben, RGB für die Schriftfarbe und die Zellenfüllfarbe wie folgt anzugeben.

IndexedColorMap colorMap = workbook.getStylesSource().getIndexedColors();
XSSFColor grey = new XSSFColor(new java.awt.Color(192,192,192), colorMap);
cellStyle.setFillForegroundColor(grey);

Referenz: https://stackoverflow.com/questions/10912578/apache-poi-xssfcolor-from-hex-code

Bild einfügen

Fügen Sie das Bild in das Objekt "Arbeitsmappe" ein.

Nachdem Sie mit "IOUtils.toByteArray ()" in eine Byte-Zeichenfolge konvertiert und diese mit "Workbook.addPicture ()" im Buch registriert haben, erhalten Sie den Index des Bildes als Rückgabewert. Einige der Dateiformate, die zu diesem Zeitpunkt angegeben werden können, sind unten aufgeführt.

Konstante Format
PICTURE_TYPE_DIB bmp
PICTURE_TYPE_JPEG jpeg
PICTURE_TYPE_PNG png

Die Position und Größe des Bildes werden mit "ClientAnchor" festgelegt. Geben Sie die obere linke Zelle und die untere rechte Zelle an, um Position und Größe anzupassen. "ClientAnchor.setCol2 ()" und "ClientAnchor.setRow2 ()", die die untere rechte Zelle angeben, werden jedoch tatsächlich gestreckt, da sie auf die angegebene Index-1-Position (eine obere linke Zelle) gestreckt werden. Geben Sie den Wert von Index + 1 in der unteren rechten Zelle des gewünschten Bereichs an.

Der Ankertyp ist das, was Excel als Eigenschaftsformatierungsfeld für Formen bezeichnet. Hier können Sie angeben, ob Änderungen am Bild vorgenommen werden sollen, wenn Zellen verschoben oder in der Größe geändert werden. Das Folgende ist eine Liste von Konstanten und Einstellungen.

Konstante Erläuterung
DONT_MOVE_AND_RESIZE Selbst wenn die Größe der Zeile / Spalte geändert wird, wird das Bild nicht verschoben / in der Größe geändert.
DONT_MOVE_DO_RESIZE Das Bild wird nicht verschoben, aber an die Ankerzelle angepasst.
MOVE_AND_RESIZE Verschieben und Größe ändern.
MOVE_DONT_RESIZE Es bewegt sich entsprechend der Zelle des Ankers

Verwenden Sie abschließend das Objekt "Zeichnen", um das Bild mit dem angegebenen Index an der angegebenen Ankerposition einzufügen. Das Folgende ist ein einfaches Implementierungsbeispiel. (Obwohl der Kürze halber weggelassen, schreiben Sie bitte try-catch entsprechend in den tatsächlichen Code.)

//In Byte-String konvertieren
InputStream in = new FileInputStream(filePath);
byte[] bytes = IOUtils.toByteArray(in);
in.close();

//Bildregistrierung, Indexerfassung
int pictureIndex = workbook.addPicture(byteWorkbook.PICTURE_TYPE_PNG);

//Geben Sie die Position und Größe mit dem Anker an
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
anchor.setCol1(topColum);
anchor.setRow1(topRow);
anchor.setCol2(bottomColum+1);
anchor.setRow2(bottomRow+1);
anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE);

//Fügen Sie das Bild des angegebenen Index an der Position des angegebenen Ankers ein
Drawing patriarch = sheet.createDrawingPatriarch();
patriarch.createPicture(anchor, pictureIndex);

[Anhang] Vom POI unterstützte integrierte Funktionen

Referenz: https://poi.apache.org/components/spreadsheet/eval-devguide.html

ABS ACOS ACOSH ADDRESS AND
ASIN ASINH ATAN ATAN2 ATANH
AVEDEV AVERAGE BIN2DEC CEILING CHAR
CHOOSE CLEAN CODE COLUMN COLUMNS
COMBIN COMPLEX CONCATENATE COS COSH
COUNT COUNTA COUNTBLANK COUNTIF COUNTIFS
DATE DAY DAYS360 DEC2BIN DEC2HEX
DEGREES DELTA DEVSQ DGET DMIN
DOLLAR EDATE EOMONTH ERROR.TYPE EVEN
EXACT EXP FACT FACTDOUBLE FALSE
FIND FIXED FLOOR FV HEX2DEC
HLOOKUP HOUR HYPERLINK IF IFERROR
IMAGINARY IMREAL INDEX INDIRECT INT
INTERCEPT IPMT IRR ISBLANK ISERR
ISERROR ISEVEN ISLOGICAL ISNA ISNONTEXT
ISNUMBER ISODD ISREF ISTEXT LARGE
LEFT LEN LN LOG LOG10
LOOKUP LOWER MATCH MAX MAXA
MDETERM MEDIAN MID MIN MINA
MINUTE MINVERSE MIRR MMULT MOD
MODE MONTH MROUND NA NETWORKDAYS
NOT NOW NPER NPV OCT2DEC
ODD OFFSET OR PERCENTILE PI
PMT POISSON POWER PPMT PRODUCT
PROPER PV QUOTIENT RADIANS RAND
RANDBETWEEN RANK RATE REPLACE REPT
RIGHT ROMAN ROUND ROUNDDOWN ROUNDUP
ROW ROWS SEARCH SECOND SIGN
SIN SINH SLOPE SMALL SQRT
STDEV SUBSTITUTE SUBTOTAL SUM SUMIF
SUMIFS SUMPRODUCT SUMSQ SUMX2MY2 SUMX2PY2
SUMXMY2 T TAN TANH TEXT
TIME TODAY TRANSPOSE TRIM TRUE
TRUNC UPPER VALUE VAR VARP
VLOOKUP WEEKDAY WEEKNUM WORKDAY YEAR
YEARFRAC

Referenzierte Websites / Artikel

--Hishidamas Homepage Apache POI http://www.ne.jp/asahi/hishidama/home/tech/apache/poi/

--Lass die Programmierung Excel mit Apache POI betreiben https://www.javadrive.jp/poi/

--Sukeros Geschichte Fügen Sie mit POI ein Bild in EXCEL ein https://www.sukerou.com/2019/03/poiexcel.html

Recommended Posts

Hinweise zum Lesen und Generieren von XLSX-Dateien aus Java mit Apache POI
[Java] Textextraktion aus PowerPoint (ppt) mit Apache POI
[Java] Behandeln Sie Excel-Dateien mit Apache POI
[Java] Lesen und Schreiben von Dateien mit OpenCSV
Lesen und Schreiben von GZIP-Dateien in Java
Lesen Sie den Hinweis zur Dateikopie von Java 1.7 oder höher
[Review] Lesen und Schreiben von Dateien mit Java (JDK6)
Umgeschaltete Eigenschaftendateien für Entwicklung und Produktion mit JMockit
JSP-Fehleranzeige vom Servlet
Ein einfaches CRUD-Beispiel mit Java Servlet / JSP und MySQL
Klassen und Instanzen Java für Anfänger
Hinweise zum Lesen und Generieren von XLSX-Dateien aus Java mit Apache POI
[Für mich] Übertragung der Servlet-Klassenverarbeitung
Schreiben Sie Code mit Ruby-Klassen und -Instanzen
Konvertieren Sie große XLSX-Dateien mit Apache POI in CSV
Umgeschaltete Eigenschaftendateien für Entwicklung und Produktion mit JMockit
[Java] Entwicklung mit mehreren Dateien mittels Paket und Import
Schreiben und Notizen bei der Migration von VB zu JAVA
Tipps zur Verwendung von Salesforce SOAP und Bulk API in Java
Excel-Operation mit Apache POI
Versuchen Sie, mit Java zu kratzen [Hinweis]
Apache Hadoop und Java 9 (Teil 1)
Apache POI persönliches Memo Crossfish21
Verwenden von Docker von Java Gradle
Java während und für Anweisungen
Ausgabe nach Excel mit Apache POI!
Hinweise zum Erstellen der Kotlin-Entwicklungsumgebung und zur Migration von Java nach Kotlin