반응형
정해진 엑셀 양식에 데이터를 넣어 다운받게 해달라는 요청이 생겨
엑셀에 데이터를 넣어 다운받을 수 있는 방법을 작성해보고자 한다!
1. 엑셀 양식
샘플로 데이터를 삽입하기 위해 만든 엑셀 양식
2. webapp 에 엑셀 양식 추가
테스트를 위해 wabapp/file/test_poi.xlsx 로 추가!
3. 데이터 삽입 코드
데이터 삽입할때 getRow와 getCell 위치를 정확히 확인해야한다.
getRow는 엑셀 왼쪽의 숫자, 행 (1,2,3,4..)으로 0번 부터 시작한다.
: 1 2 3 4 .. 는 0 1 2 3 ..
getCell은 엑셀 위의 알파벳, 열(A,B,C,D..)로 똑같이 0번 부터 시작한다.
: A B C D .. 는 0 1 2 3 .. 순서
4. 컨트롤러
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PoiController {
@RequestMapping("/excelPoi.do")
public void excelPoi(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
request.setCharacterEncoding("UTF-8");
String formPath = request.getServletContext().getRealPath("file/test_poi.xlsx"); // 양식 위치
InputStream fis = new FileInputStream(formPath);
XSSFWorkbook xssfWorkBook = new XSSFWorkbook(fis);
XSSFSheet xssfSheet = xssfWorkBook.getSheetAt(0);
xssfSheet.getRow(5).getCell(1).setCellValue("1"); // 행(6), 열(B)
xssfSheet.getRow(5).getCell(2).setCellValue("기상");// 행(6), 열(C)
xssfSheet.getRow(6).getCell(1).setCellValue("2");
xssfSheet.getRow(6).getCell(2).setCellValue("출근");
xssfSheet.getRow(7).getCell(1).setCellValue("3");
xssfSheet.getRow(7).getCell(2).setCellValue("퇴근");
xssfSheet.getRow(8).getCell(1).setCellValue("4");
xssfSheet.getRow(8).getCell(2).setCellValue("취침");
// 다운로드
String fileName = "엑셀데이터삽입.xlsx";
fileName = URLEncoder.encode(fileName,"UTF-8").replaceAll("\\+", "%20"); //한글파일 명 설정
response.setContentType("application/vsd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename=\"" + fileName + "\"");
xssfWorkBook.write(response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. 결과
테스트할때 getRow, getCell, setCellValue를 직접 입력했지만,
DB의 값을 SELECT해 뿌려주는 방식으로 사용하면 된다.
실무에서 사용했을때는 DB에서 SELECT 할때 getRow와 getCell 값을 설정한 후
컨트롤러에서는 반복문을 사용해 데이터를 삽입했다.
반응형
'SPRING' 카테고리의 다른 글
[SPRING] 스케줄러 (@Scheduled) 설정 (0) | 2023.06.01 |
---|---|
[JAVA/SPRING] javax.imageio.IIOException: Unsupported Image Type (CMYK 이미지 오류) (0) | 2023.05.30 |
[SPRING] Interceptor 개념 및 사용법 (0) | 2022.08.16 |
[SPRING] @Component 어노테이션 간단 사용법 (0) | 2022.05.11 |
[SPRIING] component-scan 사용법 (available: expected at least 1 bean which qualifies as autowire candidate. 에러) (0) | 2022.03.31 |
댓글