Apache POI에서 Excel 파일 처리

15144 단어 ApachePoiJava

개요


업무 중에는 Java 프로그램에서 Excel 파일을 참조하여 출력(제작)해야 하는데 아파치 POI를 사용하여 대응하기 때문에 기본적인 조작을 정리했다.

Apache POI란 무엇입니까?


Apache 프로젝트 중 하나로 Word와 Excel 등 Microsoft Office 형식의 파일을 100% Java 라이브러리로 읽을 수 있습니다.
※ POI라는 명칭은 Office의 파일 형식을 역공정할 때 형식이 의도적이고 중도에 폐기되어 이해하기 어렵기 때문에'Poor Obfuscation Implementation'(질이 떨어지는 읽기 어려운 설치)이라고 풍자하지만 첫 글자에서 유래한 것이다.

Apache POI의 시작


아파치 POI 공식 홈페이지 창고를 가져옵니다.
(2020년 3월의 최신 버전은 4.1.2이고 이번에는 비즈니스 대응의 최신 버전이며 3.17 구현)

예제 코드


기존 Excel 파일에서 값을 가져와 내용을 추적한 후 다른 Excel 파일로 내보내는 샘플입니다.

코드


ApachePoiSample.java
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ApachePoiSample {

    /** 入力Excelファイルパス */
    public static final String IN_EXCEL_FILE_PATH = "excel/in/sample.xlsx";
    /** 出力Excelファイルパス */
    public static final String OUT_EXCEL_FILE_PATH = "excel/out/output.xlsx";

    public static void main(String[] args) {

        //---- Excelファイルを開く ----
        Workbook wb = null;
        try ( InputStream is = new FileInputStream(IN_EXCEL_FILE_PATH); ) {
            wb = WorkbookFactory.create(is);
        } catch (FileNotFoundException e) {
            // 対象のExcelファイルが存在しない場合に発生
            e.printStackTrace();
        } catch (IOException e) {
            // 対象のExcelファイルの読み込みに失敗した場合に発生
            e.printStackTrace();
        } catch (EncryptedDocumentException e) {
            // 対象のExcelファイルにパスワードが設定されている場合に発生
            e.printStackTrace();
        } catch (InvalidFormatException e) {
            // 対象のExcelファイルが無効な形式である場合に発生
            e.printStackTrace();
        }

        // 対象のシートを選択する
        Sheet sheet1 = wb.getSheet("Sheet1");

        //---- A列の各セルから値を取得する ----
        System.out.println("<入力>");

        // 文字列を取得する
        Row row = sheet1.getRow(0);     // 1行目
        Cell cell = row.getCell(0);     // A列
        String a1 = cell.getStringCellValue();
        System.out.println("A1 : " + a1);

        // 数値を取得する
        row = sheet1.getRow(1);         // 2行目
        cell = row.getCell(0);          // A列
        double a2 = cell.getNumericCellValue();
        System.out.println("A2 : " + a2);

        // 数式を取得する
        row = sheet1.getRow(2);         // 3行目
        cell = row.getCell(0);          // A列
        String a3 = cell.getCellFormula();
        System.out.println("A3 : " + a3);

        //---- 出力用にB列に値を追記する(B列は空のため、新規にセルを作成する)----
        System.out.println("<出力>");

        // 文字列を出力する
        row = sheet1.getRow(0);         // 1行目
        cell = row.createCell(1);       // B列の作成
        cell.setCellValue(a1 + a1);
        System.out.println("B1 : " + cell.getStringCellValue());

        // 数値を出力する
        row = sheet1.getRow(1);         // 2行目
        cell = row.createCell(1);       // B列の作成
        cell.setCellValue(a2 + a2);
        System.out.println("B2 : " + cell.getNumericCellValue());

        // 数式を出力する
        row = sheet1.getRow(2);         // 3行目
        cell = row.createCell(1);       // B列の作成
        cell.setCellFormula("B2*2");
        System.out.println("A3 : " + cell.getCellFormula());

        //---- Excelファイルに出力する ----
        try ( FileOutputStream os = new FileOutputStream(OUT_EXCEL_FILE_PATH); ) {
            wb.write(os);
        } catch (FileNotFoundException e) {
            // 出力先に指定されたパスが存在しない場合に発生
            e.printStackTrace();
        } catch (IOException e) {
            // Excelファイルの出力に失敗した場合に発生
            e.printStackTrace();
        }
    }

}

실행 결과


파일 입력(sample.xlsx)
A1 셀에 문자열(Sample), A2 셀에 수치(1.23), A3 셀에 방정식(A2*2)을 입력합니다.

콘솔 로그
입력한 파일의 A 열에 대한 값을 가져옵니다.
또한 출력 파일에 사용할 값을 다음과 같이 설정합니다.
<入力>
A1 : sample
A2 : 1.23
A3 : A2*2
<出力>
B1 : samplesample
B2 : 2.46
A3 : B2*2
출력 파일(output.xlsx)
프로그램에서 설정한 값이 B 열로 출력됩니다.

좋은 웹페이지 즐겨찾기