일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- github
- 구멍가게코딩단
- query
- Tomcat
- insertAll
- bulkinsert
- Ajax
- vue Carousel
- JAXBContext
- mysql
- MariaDB
- 부스트코스
- JSON
- spring
- egov
- 기출문제
- NoSQL
- JQuery
- checkbox
- jdbc
- INSERT
- 정보처리산업기사
- vue.js
- mybatis
- jsp
- vscode tutorial
- java
- 마스킹
- 오라클
- swipe 배너
- Today
- Total
개발새발
[spring] list에 뿌려진 데이터 excel download 본문
*Color Scripter 사용에 불편이 있어 줄맞춤을 직접 띄워쓰기로 한점 참고 해주십셔,,
자자자, 화면에 뿌려진 리스트 데이터들을 excel 파일로 만들고 싶다구여?
먼저, jsp에 엑셀다운로드 버튼을 만들어줍니다,,
예를들어, input태그의 type="submit" 버튼을 쓴다고 하면
1. jsp
<form action="/examples/test/excelDown.do" method="post"> |
: 엑셀 다운로드 버튼을 누르면 form태그에 있는 action을 타겠쥬?
2. controller
@RequestMapping(value = "/examples/test/excelDown.do") @ResponseBody public void excelDown(@ModelAttribute TestVO testVO, HttpServletResponse response testService.excelDown(testVO, response); } |
: controller에서 excelDown 메소드를 타서 testService에 있는 excelDown메소드를 찾습니다.
3. service
void excelDown(TestVO testVO, HttpServletResponse response) throws Exception; |
4. serviceImpl
@Service("testService") @Transactional public class testServiceImpl implements TestService{
@Autowired private TestMapper testDao; @Override public void excelDown(TestVO testVO, HttpServletResponse response) throws Exception {
List<TestVO> testList = testDao.selectTestList(testVO);
try { //Excel Down 시작 Workbook workbook = new HSSFWorkbook();
//시트생성 Sheet sheet = workbook.createSheet("***_관리");
//행, 열, 열번호 Row row = null; Cell cell = null; int rowNo = 0;
// 테이블 헤더용 스타일 CellStyle headStyle = workbook.createCellStyle(); // 가는 경계선을 가집니다. headStyle.setBorderTop(BorderStyle.THIN); headStyle.setBorderBottom(BorderStyle.THIN); headStyle.setBorderLeft(BorderStyle.THIN); headStyle.setBorderRight(BorderStyle.THIN); // 배경색은 노란색입니다. headStyle.setFillForegroundColor(HSSFColorPredefined.YELLOW.getIndex()); headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 데이터용 경계 스타일 테두리만 지정 CellStyle bodyStyle = workbook.createCellStyle(); bodyStyle.setBorderTop(BorderStyle.THIN); bodyStyle.setBorderBottom(BorderStyle.THIN); bodyStyle.setBorderLeft(BorderStyle.THIN); bodyStyle.setBorderRight(BorderStyle.THIN);
// 헤더명 설정 String[] headerArray = {"NO", "제목","내용","등록일","등록자","사용여부"}; row = sheet.createRow(rowNo++); for(int i=0; i<headerArray.length; i++) { cell = row.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(headerArray[i]); }
for(TestVO excelData : testList ) {
row = sheet.createRow(rowNo++); cell = row.createCell(0); cell.setCellStyle(bodyStyle); cell.setCellValue(excelData.getRowNum());
cell = row.createCell(1); cell.setCellStyle(bodyStyle); cell.setCellValue(excelData.getTitle()); cell = row.createCell(2); cell.setCellStyle(bodyStyle); cell.setCellValue(excelData.getCnts());
cell = row.createCell(3); cell.setCellStyle(bodyStyle); cell.setCellValue(excelData.getRegDt());
cell = row.createCell(4); cell.setCellStyle(bodyStyle); cell.setCellValue(excelData.getRegNm());
cell = row.createCell(5); cell.setCellStyle(bodyStyle); cell.setCellValue(excelData.getUseYn()); }
// 컨텐츠 타입과 파일명 지정 response.setContentType("ms-vnd/excel"); response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("***_관리.xls", "UTF8"));
// 엑셀 출력 workbook.write(response.getOutputStream()); workbook.close(); } catch (Exception e) { e.printStackTrace(); }
} } |
: serviceImpl에서 excel에 보여질 셀들을 그려주고
헤더명에 맞는 컬럼들을 향상된 포문을 돌려 데이터를 가져옵니다
5. mapper
List<TestVO> selectTestList(TestVO testVO) throws Exception; |
: 쿼리는 따로 만들지 않고 리스트가져오는 쿼리를 그대로 쓰면 되겠쥬?
6. xml (mariadb)
//sql-config.xml에서 설정을 해주면 별칭으로 testVO라고 쓸 수 있음 <select id="selectTestList" parameterType="testVO" resultType="testVO"> <include refid="common.pagingTop" /> SELECT (row_number() over()) as rowNum , BOARD_ID , TITLE , CNTS , START_DISP_DT , END_DISP_DT , CONCAT(STR_TO_DATE(START_DISP_DT, '%Y%m%d'), ' ~ ', STR_TO_DATE(END_DISP_DT, '%Y%m%d')) as topStartEndDispDT , USE_YN , DEL_YN , DATE_FORMAT(REG_DT, '%Y-%m-%d') AS REG_DT , REG_NM , UPD_DT , UPD_NO FROM board <where> <if test="startDispDt != null and startDispDt != '' and endDispDt != null and endDispDt != ''"> STR_TO_DATE(START_DISP_DT, '%Y%m%d') <![CDATA[>=]]> #{startDispDt} AND STR_TO_DATE(END_DISP_DT, '%Y%m%d') <![CDATA[<=]]> #{endDispDt} </if> <if test="title != null and title != ''"> AND TITLE LIKE '%' #{title} '%' </if> <if test="useYn != null and useYn != ''"> AND USE_YN = #{useYn} </if> AND DEL_YN = 'N' </where> <include refid="common.pagingBttom" /> </select> |
good,,
'[YOGOJOGO]' 카테고리의 다른 글
[java] .equals / 변수.equals("a") or "a".equals(변수) ? (0) | 2020.10.30 |
---|---|
[script] checkbox value값 db저장 후 출력 (0) | 2020.10.30 |
[javaScript] 클릭한 버튼 ID값 가져오기 (0) | 2020.10.29 |
[mybatis] insert 된 key값으로 update 또는 insert (0) | 2020.10.26 |
정보처리산업기사 기출문제 (0) | 2020.10.16 |