일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- css
- 공모주
- 주식
- linux
- 제이쿼리
- php
- 코드이그나이터
- Stock ipo
- 6월 공모주 청약 일정
- 자바스크립트
- Oracle
- codeigniter
- Stock
- IPO
- Eclipse
- 오라클
- java
- 공모주 청약
- html
- jquery
- 맥
- 자바
- 공모주 청약 일정
- 주식 청약
- 주식 청약 일정
- SQL
- 리눅스
- MYSQL
- 7월 공모주 청약 일정
- JavaScript
- Today
- Total
개발자의 끄적끄적
[egov] 전자정부프레임워크 XSSFWorkbook 으로 엑셀 다운받기 본문
[egov] 전자정부프레임워크 XSSFWorkbook 으로 엑셀 다운받기
전자정부 3.6.0에 포함된 spring 에서 기본으로 제공하는 엑셀 다운로드는
HSSFWorkbook 을 사용하기 때문에 65536 레코드가 넘어가면 에러가 발생한다.
XSSFWorkbook 형태로 다운로드 받기 위해서는 AbstractView를 직접 구현해 주어야 한다.
1. pom.xml에 poi, poi-ooxml dependency 추가
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
2. AbstractView 구현
package com.incree.excel;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFDataFormat;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component;
@Component("listExcelView")
public class ListExcelView extends AbstractView {
private static final String CONTENT_TYPE = "application/vnd.ms-excel";
public ListExcelView() {
setContentType(CONTENT_TYPE);
}
/**
* 스프링 AbstractExcelView 에 있는 함수 편리하게 쓰기 위해 추가
*/
protected XSSFCell getCell(XSSFSheet sheet, int row, int col) {
XSSFRow sheetRow = sheet.getRow(row);
if (sheetRow == null) {
sheetRow = sheet.createRow(row);
}
XSSFCell cell = sheetRow.getCell(col);
if (cell == null) {
cell = sheetRow.createCell(col);
}
return cell;
}
/**
* 스프링 AbstractExcelView 에 있는 함수 편리하게 쓰기 위해 추가
*/
protected void setText(XSSFCell cell, String text) {
cell.setCellType(CellType.STRING); // 스프링엔 cell.setCellType(HSSFCell.CELL_TYPE_STRING); 로 돼 있지만 deprecated 됐으므로 수정
cell.setCellValue(text);
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = (XSSFSheet) wb.createSheet("쉬트이름");
XSSFCell cell = null;
XSSFDataFormat format = wb.createDataFormat();
XSSFCellStyle style = wb.createCellStyle();
style.setDataFormat(format.getFormat("#,###"));
int cellStartIndex = 2;
// set header information
setText(getCell(sheet, 1, 0), "셀내용");
setText(getCell(sheet, 2, 1), "셀내용2");
setText(getCell(sheet, 3, 2), "셀내용3");
// List resultList = (List) model.get("resultList");
..............
..............
..............
ServletOutputStream out = response.getOutputStream();
wb.write(out);
if (out != null) out.close();
if (wb != null) wb.close();
}
}
3. controller 구현
package com.incree.excel;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class ListController {
@RequestMapping("/listExcelDownload.do")
public ModelAndView listExcelDownload(Model model, HttpServletResponse response) throws Exception{
// List resultList = getList();
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("resultList", resultList);
response.setHeader("Content-Disposition", "attachment; fileName=\"list_excel.xlsx\";");
response.setHeader("Content-Transfer-Encoding", "binary");
return new ModelAndView("listExcelView", map);
}
}
'개발 > java & jsp' 카테고리의 다른 글
[JAVA] Date 클래스 [펌] (0) | 2020.03.17 |
---|---|
[Java] Apache POI : 다운로드 및 설치 (0) | 2020.03.16 |
[java] poi 엑셀 업로드 excel upload 심플한 방법 [펌] (0) | 2020.03.15 |
[java] 스프링 엑셀파일 업로드 다운로드 기본(POI 라이브러리) (0) | 2020.03.15 |
[eclipse] ERMaster 내보내기 (0) | 2020.03.10 |