반응형
Apache POI를 이용하여 Excel에 원하는 정보를 담아 다운로드하는 방법에 대해 알아보려고 합니다.
2. Apache POI란?
- Apache POI는 아파치에서 만든 라이브러리입니다.
- 마이크로소프트 오피스 파일 포맷을 자바 언어를 사용하여 읽고 쓸 수 있는 기능을 제공합니다.
3. 라이브러리 import
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
- 아래 예제에 필요한 것들을 import 했습니다.
3. Java 예제 코드
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
HttpSession session = request.getSession();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=sample.xls");
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sheet1");
Map<Integer, Object[]> data = new HashMap<Integer, Object[]>();
data.put(1, new Object[]{
"No.",
"이름",
"제출일"
});
int count;
try {
Base.open("java:comp/env/jdbc/mysql");
String id = "1";
String name = "나나";
String date = "2020-08-26";
// 데이터베이스 가져오기
count = 2;
data.put(count, new Object[]{
id
, name
, date
});
} catch (Exception e) {
System.out.print(e);
} finally {
Base.close();
}
Set<Integer> keyset = data.keySet();
int rownum = 0;
for (Integer key : keyset) {
Row row = sheet.createRow(rownum++);
Object [] objArr = data.get(key);
int cellnum = 0;
for (Object obj : objArr) {
Cell cell = row.createCell(cellnum++);
if(obj instanceof Date)
cell.setCellValue((Date)obj);
else if(obj instanceof Boolean)
cell.setCellValue((Boolean)obj);
else if(obj instanceof String)
cell.setCellValue((String)obj);
else if(obj instanceof Double)
cell.setCellValue((Double)obj);
}
}
try {
workbook.write(response.getOutputStream()); // Write workbook to response.
workbook.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
- filename은 sample.xls로 설정해두었기 때문에 다운로드를 하게 되면 sample.xls로 다운로드가 됩니다.
- 시트 이름은 Sheet1로 생성했습니다.
- Map을 선언해서 입력할 항목들을 넣었습니다.
- 엑셀 첫 번째 줄에 No., 이름, 제출일 세 가지 항목을 넣어보았습니다.
- 두 번째 줄에는 id, name, date 값을 각각 넣었습니다.
- 여러 데이터를 출력해야 하는 경우 "데이터베이스 가져오기" 주석 부분에 리스트로 뽑아서 반복문에 data.put을 돌리면 됩니다.
- 현재 제가 만든 예제를 excel 파일로 출력하면 아래와 같이 됩니다.
4. 출력 예상 모습
No. | 이름 | 제출일 |
1 | 나나 | 2020-08-26 |
이상으로 아파치 POI 라이브러리를 이용하여 Excel 다운로드 기능을 개발해보았습니다.
반응형
'Web Developer's Story > JAVA' 카테고리의 다른 글
[JAVA] 이미지 리사이즈, 썸네일 만들기 - Thumbnails.of (0) | 2020.09.02 |
---|---|
[JAVA] String 문자열에서 배열, 코드 한 줄로 바꾸기 (0) | 2020.08.30 |
[JAVA] 반복문 사용법 총 정리 - while문, do-while문 (0) | 2020.08.21 |
[JAVA] 반복문 사용법 총 정리 - for문, 이중 for문 (0) | 2020.08.19 |
[JAVA] 조건문 변수 타입별 사용법 - switch문 (0) | 2020.08.14 |