Export To Excel! ๐Ÿ˜ฎ


์šฐ๋ฆฌ๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ ๋ชจ์ธ ์‚ฌ์šฉ์ž, ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—…์„ ํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜๊ธฐ ์œ„ํ•ด Excel์„ ์ด์šฉํ•˜๊ณค ํ•˜๋Š”๋ฐ

์•„์ง..?~

๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ํ™˜๊ฒฝ์œผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ณต๊ธฐํ•˜๋Š” ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒ ๋‹ค.

ํ•™๋ถ€์‹œ์ ˆ FILEIO ๊ธฐ์–ตํ•˜์ž

๋‹จ์ˆœํ•˜๊ฒŒ String์„ ์ฝ์–ด์™€ ๋ฐฐ์—ด์— ๋‹ด๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค file์„ openํ•ด R/W ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด write๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

Spring๋„ ๋‹จ์ˆœํ•˜๋‹ค, ๋ฐ”๋กœ POI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ !

์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด poi ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฝ์–ด์™€ maven/gradle์— ์„ค์น˜ํ•ด์ฃผ์ž

 <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.16</version>
</dependency>

๊ฐ„๋‹จํ•˜๊ฒŒ ์š”์•ฝ๋งŒ

String fileName = "  _" + DateFormatUtils.format(new Date(), "yyyyMMdd_HHmmss") + ".xls";

ํŒŒ์ผ์„ ์ƒ์„ฑํ• ๊ฑด๋ฐ filename์€ null์ด๋ฉด 'X' ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ์— ์•ž์„œ File์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด name์„ ์„ค์ •ํ•˜์ž,

๋Œ€๋ถ€๋ถ„ ๋™์ ์œผ๋กœ excel์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ผํšŒ์„ฑ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ธฐ ๋–„๋ฌธ์— ๋™์ ์œผ๋กœ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง€๊ธˆ์˜ ๋‚ ์ž๋ฅผ ๋ฐ›์•„ fomatingํ•ด์„œ .xls ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

fileName = new String(fileName.getBytes(), "ISO8859-1");
            response.setContentType("application/octet-stream;charset=UTF-8");
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            response.addHeader("Pargam", "no-cache");
            response.addHeader("Cache-Control", "no-cache");

ํŒŒ์ผ์˜ ์ €์žฅ์— ์žˆ์–ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฑด, Http respone๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€ ์š”์ฒญ์ด ๋งž๋Š”์ง€ ํ™•์ธ,

Restํ•œ ์›น์‚ฌ์ดํŠธ๋ฅผ ์œ„ํ•ด Header์— ํŒŒ์ผ์— ๋Œ€ํ•œ ์š”์•ฝ์ด๋‚˜ ์„ค์ •์„ ์„ธํŒ…ํ•œ๋‹ค

-> ๋Œ€์ถฉ file encdoing์€ ๋ญ๊ณ  ์บ์‹ฑ์„ ๋ฐช์ดํ•œ๋А์ง€ ๋ญํ•˜๋Š” ์ปจํ…์ธ ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„ response ํ—ค๋”์— ์‹ค์–ด ๋ณด๋‚ด์ž

  OutputStream os = response.getOutputStream();
            wb.write(os);
            os.flush();
            os.close();

-> Java ์—์„œ ํŒŒ์ผ์˜ ์ž…์ถœ๋ ฅ์„ ๋‹น๋‹ดํ•˜๋Š” ์นœ๊ตฌ โ€œOutPutStreamโ€ WB๋Š” Workbook์ด๋‹ค.

Excel ํ”„๋กœ์ ํŠธ์˜ ํ†ตํ•ฉ ๋ฌธ์„œ๋ฅผ ๋œปํ•จ!

flush๋Š” ์ŠคํŠธ๋ฆผ ๋ฒ„ํผ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ•์ œ์ ์œผ๋กœ ์ถœ๋ ฅ์‹œ์ผœ!

๊ธฐ๋ณธ์ ์ธ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ๋ฒ„ํผ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋“์ฐจ์•ผ ์ถœ๋ ฅํ•˜๋Š”๋ฐ, ์ด ๋ฉ”์†Œ๋“œ๋Š” ๋ฐ”๋กœ! ์ถœ๋ ฅํ•ด

๊ทธ์ดํ›„์— Sheet์™€ HeaderCel / BodyCel์„ ์ •์˜ํ•ด!

์˜ˆ๋ฅผ ๋“ค๋ฉด

row.sheet.createCell();
hadercel = sheet.createrow();
hadercel.setcallvaule();
row.setcallvaule();

์ด๋Ÿฐ์‹์œผ๋กœ ์…€์˜ ์„ ์–ธ๊ณผ ํ—ค๋”์˜ ์„ ์–ธ ๊ทธ๋ฆฌ๊ณ  set

File I/o๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋“ค์ธ ์š”์ฃผ์˜ ๋ฉ”์†Œ๋“œ๋Š”

sheet.autoSizeColumn(i);

write๊ฐ€ ๋‹ค๋œ excel ํ•„๋“œ๋“ค์„ ์‚ฌ์ด์ฆˆ์— ๋งž๊ฒŒ ์ž๋™์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ๋Š”๋ฐ

1ํŠธ -> writeํ•˜๊ธฐ์ „ excel์˜ entity์— ์ฃผ์ž… -> ์‹คํŒจ

2ํŠธ -> writeํ•˜๊ณ  colum(1)์— autosizing -> ์‹คํŒจ

3ํŠธ -> writeํ•˜๊ณ  for๋ฌธ๋Œ๋ ค์„œ inputdate.size์— ๋งž๊ฒŒ ์ฃผ์ž… -> ์‹คํŒจ

4ํŠธ -> writeํ•˜๊ณ  for๋ฌธ๋Œ๋ ค์„œ inputdate.size+1์—,index๋Š” +1ํ•ด์„œ ์‹คํ–‰ ->์„ฑ๊ณต

=> ๋ฉ์ฒญํ•˜๊ฒŒ ํ—ค๋”ํ•„๋“œ ์ž๋ฆฌ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ •๋ ฌํ•จ (๊ฐ€์žฅ ํฐ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ง€๋‚˜์นจ..)


๐Ÿ“Œ FEELINGS/FINDINGS

์‘ ~ํ‡ด๊ทผ~!