[JAVA] Verwendung von Apache POI

Heute möchte ich kurz erklären, wie POI verwendet wird.

Weitere Informationen finden Sie auf der offiziellen Website unten Apache POI

Erstellen Sie eine Arbeitsmappe

Erstellen Sie zunächst eine Arbeitsmappe, an der Sie arbeiten möchten Eine Einschränkung ist, dass Sie, wenn Sie eine vorhandene Datei lesen möchten, zuerst einen FileInputStream erstellen müssen. Beim Schreiben ist es in Ordnung, wenn Sie beim Schreiben einen FileOutputStream generieren

//Zum Schreiben
    Workbook workbook = new XSSFWorkbook();//Für xlsx- und xlsm-Dateien

    //Verschiedene Verarbeitung

    //Generierung des Ausgabeziels
    String filePath = "Excel-Datei.xlsx"
    tyr(FileOutputStream output = new FileOutputStream(filePash)){
        //Schreiben
        workbook.write(output);
    }

//Zum Lesen
    //Quellengenerierung
    String filePath = "Excel-Datei.xlsx"
    tyr(FileInputStream input = new FileInputStream(filePash)){
        //Arbeitsmappengenerierung
        Workbook workbook = WorkbookFactory.create(input);
    
    //Verschiedene Verarbeitung
    }

Wenn Sie mit alten XLS-Dateien arbeiten möchten, verwenden Sie HSSF-Arbeitsmappe anstelle von XSSF-Arbeitsmappe, um die Arbeitsmappe zu generieren.

Danach erstellen Sie im Grunde eine Instanz mithilfe einer Arbeitsmappe.

Erstellen Sie ein Blatt

Erstellen Sie ein Blatt, an dem Sie arbeiten möchten Verwenden Sie beim Schreiben createSheet, um ein Blatt zu generieren, und verwenden Sie beim Lesen getSheet oder getSheetAt, um ein Blatt zu generieren.

//Zum Schreiben
    Sheet sheet = workbook.createSheet("Blattname");

//Zum Lesen
    Sheet sheet = workbook.getSheetAt(0);//Holen Sie sich das 0. Blatt
    //Oder
    Sheet sheet = workbook.getSheet("Blattname")//Blattnameがわかっている場合はこちらで

Beim tatsächlichen Schreiben und Lesen von Zeichen wird mithilfe des diesmal erstellten Blattes eine dedizierte Instanz erstellt.

Erstellen Sie eine Zeile

In POI wird es zu einem Bild, dass es keinen Inhalt gibt, nur indem ein Blatt erstellt wird Sie müssen also eine Zeile generieren


//Zum Schreiben
    Row row = sheet.createRow(0);//Zeile 0 generieren(Zeilen zählen ab Zeile 0)

//Zum Lesen
    Row row = sheet.getRow(0);//Lesen Sie Zeile 0

Die Einschränkung ist, dass Sie im Voraus eine Zeile erstellen müssen. Als Verwendung denke ich, dass Sie die maximale Zeile irgendwo bestimmen und so viele Zeilen generieren können, wie es gibt ...

Generieren Sie eine Zelle

Generieren Sie für jede Zeile eine Zelle Zellen ohne Zeilen können nicht generiert werden


//Zum Schreiben
    Cell cell = row.createCell(0);

//Zum Lesen
    Cell cell = row.getCell(0);

Für diese Zelle werden Zeichen, Farben, Schriftarten usw. festgelegt.

Zeichen manipulieren

Wenn Sie dies tun können, ist der Rest einfach

//Zum Schreiben
    cell.setCellValue("AIUEO");

//Zum Lesen
    String cellValue = cell.getStringCellValue();

Verwenden Sie zum Lesen die Methode getxxxCellValue Der Datentyp kann für xxx angegeben werden

Stellen Sie die Schriftart ein

Schriftarten sind eine Eigenschaft der Arbeitsmappe und müssen aus der Arbeitsmappe generiert werden Bitte beachten Sie, dass bei einem Fehler im Bereich der Schriftart die Schriftart in allen Zellen festgelegt wird. Wenn Sie Farbe und Dicke unterscheiden möchten, generieren Sie bitte unterschiedliche Schriftarten.

Font font = workbook.createFont();

//Mach es fett
    font.setBold(true);

//Ändern Sie die Farbe der Buchstaben
    //Generieren Sie zuerst die Farbe
    XSSFColor color = new XSSFColor();
    color.setARGBHex("FF0000"/*rot*/);//Bei Angabe durch Farbcode
    //Oder
    XSSFColor color = new XSSFColor(new java.awt.Color(255,0,0)/*rot*/);//Bei Angabe in RGB
       
    //Stellen Sie die Farbe für die Schriftart ein
    XSSFFont font = (XSSFFont) workbook.createFont();
    font.setColor(color);

POI erfordert möglicherweise einen Downcast, wenn Sie eine Instanz aus einer Arbeitsmappe erhalten Wenn Sie es als Schrifttyp (Schnittstelle) anstelle des XSSFFont-Typs erhalten, wird möglicherweise ein Kompilierungsfehler in dem Teil der Methode angezeigt, den Sie verwenden möchten.

Stellen Sie die Hintergrundfarbe der Zelle ein

Wir werden den Zellenstil festlegen und den Zellenstil auf die Zelle anwenden. Der Zellenstil ist eine Arbeitsmappeneigenschaft, daher müssen Sie ihn aus der Arbeitsmappe abrufen Wie bei Schriftarten müssen Sie unterschiedliche Zellenstile generieren, wenn Sie für jede Zelle unterschiedliche Hintergrundfarben wünschen.



//Generieren Sie zuerst die Farbe
XSSFColor color = new XSSFColor();
color.setARGBHex("FF0000"/*rot*/);

//Zellenstil generieren
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();

//Stellen Sie die Farbe auf den Zellenstil ein
cellStyle.setFillForegroundColor(color);

//Legen Sie fest, wie gefüllt werden soll
cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);//Einfach ausfüllen

//Wenden Sie den Zellenstil auf die Zelle an
cell.setCellStyle(cellStyle);

Ich mache einen Downcast, wenn ich einen Zellenstil generiere Nach der ursprünglichen Java-Idee ist es besser, sie nach Schnittstellentyp (CellStyle) zu empfangen. Da es jedoch Methoden gibt, die nur mit XSSFCellStyle verwendet werden können, wird sie von XSSFCellStyle empfangen.

Rahmeneinstellung

Rahmen (Ränder) werden im Zellenstil festgelegt Wenden Sie dann den Zellenstil auf die Zelle an ...

//Zellenstil generieren
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();

//Rahmeneinstellung
cellStyle.setBorderTop(BorderStyle.THIN/*Häufig verwendete dünne Linien*/);//Einstellungen für den oberen Rand
cellStyle.setBorderLeft(BorderStyle.THIN);//Einstellung für den linken Rand
cellStyle.setBorderRight(BorderStyle.THIN);//Einstellung des rechten Randes
cellStyle.setBorderBottom(BorderStyle.THIN);//Einstellung des unteren Randes

//Wenden Sie den Zellenstil auf die Zelle an
cell.setCellStyle(cellStyle);

Automatische Anpassung der Zellenbreite

Stellen Sie die Zellenbreite für das Blatt ein Wenn Sie Japanisch haben, ist die Zellenbreite etwas schmal, es sei denn, Sie legen die Schriftart explizit fest.

//Schriftart generieren
XSSFFont font = (XSSFFont) workbook.createFont();
font.setFontName("Yu Gothic");//Sie können den Schriftnamen verwenden, indem Sie ihn direkt aus Excel kopieren.

//Generieren Sie Zellstile und wenden Sie die Schriftarteinstellungen an
XSSFCellStyle cellStyle = (XSSFCellStyle) workbook.createCellStyle();
cellStyle.setFont(font);

//Passt die Breite aller Zellen automatisch an
sheet.autoSizeColumn();

Bonus

・ Es wird empfohlen, die erforderliche Anzahl von Zeilen und Zellen im Voraus zu generieren. Wenn Sie es mit dem angewendeten Zellenstil generieren, müssen Sie nur die Werte in der Zelle ändern! Ich erhalte eine Ausnahme, wenn ich versuche, auf eine Zeile zuzugreifen, die nicht generiert wurde

-Wenn versucht wird, einen Wert in einer Zelle festzulegen, wird nichts eingegeben, wenn er null ist.

-Wenn Sie so etwas wie einen DB-Spaltennamen in eine Excel-Datei einfügen möchten, müssen Sie diesen Teil selbst erstellen.

Recommended Posts

Verwendung von Apache POI
Verwendung von Apache Derby unter Eclipse
Verwendung von Map
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von JUnit (Anfänger)
Verwendung von Ruby return
[Rails] Verwendung von Enum
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse
Wie man Big Decimal benutzt
Verwendung von String [] args
Verwendung von Rails Join
Verwendung von Java Map
Ruby: Wie man Cookies benutzt
Verwendung von abhängigen :: zerstören
Verwendung von Eclipse Debug_Shell
[Rails] Verwendung der Validierung
Verwendung von Java-Variablen
[Rails] So verwenden Sie authenticate_user!
Verwendung von GC Viewer
Wie man Lombok jetzt benutzt
[Erstellen] Verwendung von JUnit
[Schienen] Verwendung von Scope
Verwendung der link_to-Methode
Verwendung des Arrays (persönliches Memorandum)
Verwendung des Bereichs (JSP & Servlet)
Verwendung der include? -Methode
[Schienen] Verwendung von Geräten (Hinweis)
Verwendung der Methode form_with
Verwendung von EventBus3 und ThreadMode
Hinweise zur Verwendung von Spring Data JDBC
Verwendung von binding.pry [noch 53 Tage]
Verwendung von HttpClient (Post) von Java
[Java] Verwendung der Join-Methode