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
์ ~ํด๊ทผ~!