Apache POI에서 Excel 파일 처리
개요
업무 중에는 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.javaimport 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 열로 출력됩니다.
Reference
이 문제에 관하여(Apache POI에서 Excel 파일 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakani1210/items/60403e903e15fda70c3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
아파치 POI 공식 홈페이지 창고를 가져옵니다.
(2020년 3월의 최신 버전은 4.1.2이고 이번에는 비즈니스 대응의 최신 버전이며 3.17 구현)
예제 코드
기존 Excel 파일에서 값을 가져와 내용을 추적한 후 다른 Excel 파일로 내보내는 샘플입니다.
코드
ApachePoiSample.javaimport 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 열로 출력됩니다.
Reference
이 문제에 관하여(Apache POI에서 Excel 파일 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nakani1210/items/60403e903e15fda70c3c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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();
}
}
}
<入力>
A1 : sample
A2 : 1.23
A3 : A2*2
<出力>
B1 : samplesample
B2 : 2.46
A3 : B2*2
Reference
이 문제에 관하여(Apache POI에서 Excel 파일 처리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakani1210/items/60403e903e15fda70c3c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)