2024. 4. 15. 14:55γSpring/κ°λ° κ΄λ ¨
μ΅κ·Όμ κ°λ¨ν μΆκ° κ°λ°λ‘ μμ λ€μ΄λ‘λ κΈ°λ₯ μμ²μ΄ λ€μ΄μλ€.
μμ λ€μ΄λ‘λ κΈ°λ₯ ꡬνμ΄μΌ μ½μ§~ νκ³ μ μΌ λ§μ§λ§μΌλ‘ λ―Έλ€λλ€κ° λμ κ°λ° λ¬΄μ§ (?) λ‘ μΈν΄μ 1 ~ 2μκ°μ΄λ©΄ μμ±ν κ²μ μ€κ°μ λ€λ₯Έ μΌλ νλ©΄μ μ€λ₯ νμ νλλΌ.. 3μΌλμ λμλ κ² κ°λ€.
μΌλ¨ μ΄κ±Έ λͺ°λΌμ 3μΌ λμ λμλ λ΄κ° λ무 νμ¬ (?) ν΄μ.. λ€μμ λκ°μ μ€μ νκ³ μΆμ§ μμμ κΈ°λ‘νλ€.
( Okky μμ 7λ μ μ μ§λ¬Ένμ λΆ λλΆμ μ κ° μ΄μμ΅λλ€.. κ°μ¬λ₯Ό.. π )
μ΄μ tmi μκ³ ,
λ°μμλΆν°λ μ΄μ μλ°λ‘ Apache Poiλ₯Ό μ΄μ©ν΄ κ°λ¨ν μμ νμΌμ λ§λ€μ΄ λ€μ΄λ‘λ νλ λ°©λ²μ λλ€.
0οΈβ£ Apache poi λΌμ΄λΈλ¬λ¦¬ λ€μ΄
https://mvnrepository.com/artifact/org.apache.poi/poi/4.1.2
-> μ΄ μ¬μ΄νΈμμ Apache Poi λΌμ΄λΈλ¬λ¦¬λ₯Ό λ€μ΄λ°μ μ μλ€. λλ μμ νλ‘μ νΈλΌμ (κ±°μ ~~ 10λ μ νλ‘μ νΈμΈκ² κ°μ,, ) Apache Poi λΌμ΄λΈλ¬λ¦¬ λ²μ μ 3.9μ΄μ§λ§ μ΄ κΈμ 보μλ λΆλ€μ λΉκ΅μ μ΅κ·Ό + λ§μ΄ λ€μ΄λ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμκΈ°λ₯Ό ..!
(λ²μ λ³λ‘ μ°¨μ΄ μλ€λ κΈμ μ΄λμ κ° λ³Έ κ² κ°κΈ°λ ν©λλ€λ§... μ΄κ±΄ μ νΌμ μ λλ€) κ΅³μ΄ μμ λΌμ΄λΈλ¬λ¦¬ μ¬μ©ν νμλ μμΌλ...
1οΈβ£ Controller μμ±
@RequestMapping(value = "/downloadExcel")
public void downloadExcel(HttpServletRequest request, HttpServletResponse response)
{
xxxService.selectExcelDataList(request, response);
}
-> μ΄λ°μμΌλ‘ ν΄λΌμ΄μΈνΈμμ μμ λ€μ΄λ‘λ GET μμ²μ νλ©΄, μλ²μμ μμ λ°μ΄ν°λ₯Ό μμ±ν΄μ μμ νμΌ λ€μ΄λ‘λ ν μ μλλ‘ νλ€!
μμ μ½λλ μμ μ½λλ‘ ν μ€νΈμ©μ΄λΌλ©΄ κ΅³μ΄ DB μ‘°νλ₯Ό νμ§ μμλ λλ, μ§μ μμ λ°μ΄ν°λ₯Ό μ‘°κΈ λ§λ€μ΄μ ꡬνν΄λ λ λ―νλ€. μ λ DB μ‘°νλ₯Ό ν΄μ λ§λ€μ΄μΌ νκΈ° λλ¬Έμ Serviceλ λ°λ‘ λ§λ κ²μ λλ€ ~_~
2οΈβ£ Service μμ±
@Override
public void selectExcelDataList(HttpServletRequest request, HttpServletResponse response)
{
List<xxxVo> resultList = xxxDao.selectExcelDataList(smishingVo);
ExcelUtil.downloadExcel(resultList, request, response);
}
-> μ΄λ°μμΌλ‘ μλΉμ€λ₯Ό λ§λ€μ΄μ μ°μ μμ νμΌμ λ£μ λ°μ΄ν°λ₯Ό DBμμ μ‘°νν΄μ resultListμ λ΄κ³ , ExcelUtilμ΄λΌλ Util ν΄λμ€λ₯Ό λ§λ€κ³ κ±°κΈ°μ μμ λ€μ΄ λ©μλμ resultListλ₯Ό λ겨쀬λ€.
3οΈβ£ Excel, Sheet, Header μμ±
public static void downloadExcel(List<xxxVo> resultLit,
HttpServletRequest request, HttpServletResponse response)
{
String fileName = "Excel_" + DateUtil.getTodayDateTime("yyyyMMddHHmmss") + ".xlsx";
String sheetName = "λ°μ΄ν° μνΈ";
try
{
// WorkBook μ΄κΈ°ν
Workbook workbook = new SXSSFWorkbook();
// Sheet μ΄κΈ°ν
Sheet sheet = workbook.createSheet(sheetName);
// Row μμ±
Row row = sheet.createRow(0);
// Cell μμ±
Cell cell1 = row.createCell(1);
cell1.setCellValue("Cell1");
cell1.setCellStyle(titleStyle);
Cell cell2 = row.createCell(2);
cell2.setCellValue("Cell2");
cell2.setCellStyle(titleStyle);
Cell cell3 = row.createCell(3);
cell3.setCellValue("Cell3");
cell3.setCellStyle(titleStyle);
Cell cell4 = row.createCell(4);
cell4.setCellValue("Cell4");
cell4.setCellStyle(titleStyle);
Cell cell5 = row.createCell(5);
cell5.setCellValue("Cell15");
cell5.setCellStyle(titleStyle);
int i = 0;
if (!resultLit.isEmpty()) {
for (xxxVo vo : resultLit)
{
row = sheet.createRow((i + 1));
cell1 = row.createCell(1);
cell1.setCellValue();
cell1.setCellStyle(stringStyle);
cell2 = row.createCell(2);
cell2.setCellValue();
cell2.setCellStyle(stringStyle);
cell3 = row.createCell(3);
cell3.setCellValue();
cell3.setCellStyle(stringStyle);
cell4 = row.createCell(4);
cell4.setCellValue();
cell4.setCellStyle(stringStyle);
cell5 = row.createCell(5);
cell5.setCellValue();
cell5.setCellStyle(stringStyle);
i++;
}
}
//μλ μ»¬λΌ μ¬μ΄μ¦ (λλ΅ 10κΈμ)
sheet.setColumnWidth(1, 30*256);
sheet.setColumnWidth(2, 20*256);
sheet.setColumnWidth(3, 20*256);
sheet.setColumnWidth(4, 20*256);
sheet.setColumnWidth(5, 20*256);
response.setContentType("application/x-msdownload");
String encodedFileName = HttpUtil.getDisposition(fileName, HttpUtil.getBrowser(request));
response.setHeader("Content-Disposition", encodedFileName);
workbook.write(response.getOutputStream());
}
catch (Exception e) {
e.printStackTrace();
}
}
- λ¨Όμ λ€μ΄λ‘λ λ°μ νμΌμ μ΄λ¦μ fileNameμ μ€μ ν΄μ€λ€. (λλ λ€μ΄ λ°μ λ λ§λ€, νμΌλͺ μ΄ (1), (2)... μ΄λ κ² λ€μ΄λ°λκ² μ«μ΄μ λ μ§ + μκ°μ ν¬ν¨ν΄μ μ λͺ©μ λ£μ΄λλ€.)
- κ·Έλ¦¬κ³ μνΈ μ΄λ¦μ κ·Έλ₯ μμλ‘ 'λ°μ΄ν° μνΈ'λΌκ³ νλλ° μ΄κ±΄ μ¬μ©νλ μ¬λμ΄ μνλ μνΈλͺ μ λ£μΌλ©΄ λλ€.
- WorkBookμ μ΄κΈ°νν΄μ€λ€.
Workbook workbook = new SXSSFWorkbook();
μ΄λ SXSSF λ λμ©λ μμ νμΌμ μΆλ ₯ν λ μ¬μ©νλ€.
HSSF : .xls νμΌ ν¬λ§·μ μ¬μ©ν λ μ¬μ©
XSSF : .xlsx νμΌ ν¬λ§·μ μ¬μ©ν λ μ¬μ©
SXSSF : λμ©λ μμ νμΌμ μΆλ ₯ν λ μ¬μ©
- κ·Έλ¦¬κ³ μ€νμΌμ μ§μ λ³κ²½ν μλ μλλ°.. μ€νμΌμ΄ μ§κΈ μ€μνμ§ μκΈ° λλ¬Έμ κ·Έλ₯ κΈ°λ³Έ μ€νμΌλ‘ μ§νν μμ μ΄λ€.
(ꡬκΈλ§νλ©΄ μμ μ€νμΌ λ°κΎΈλ λ°©λ²μ λ§μ΅λλ€..!)
- WorkBoot μ΄κΈ°ννμλ μ°λ¦¬κ° λ§λ μνΈ μ΄λ¦μΌλ‘ μνΈλ₯Ό μμ±νλ€.
// Sheet μ΄κΈ°ν
Sheet sheet = workbook.createSheet(sheetName);
- 맨 μ²μ νμ΄ν rowλ₯Ό λ§λ€μ΄μ€μΌ νκΈ° λλ¬Έμ rowλ₯Ό μμ±νκ³ , νμ΄ν κ°λ€μ μ μν΄μ€λ€.
// Row μμ±
Row row = sheet.createRow(0);
// Cell μμ±
Cell cell1 = row.createCell(1);
cell1.setCellValue("Cell1");
cell1.setCellStyle(titleStyle);
Cell cell2 = row.createCell(2);
cell2.setCellValue("Cell2");
cell2.setCellStyle(titleStyle);
Cell cell3 = row.createCell(3);
cell3.setCellValue("Cell3");
cell3.setCellStyle(titleStyle);
Cell cell4 = row.createCell(4);
cell4.setCellValue("Cell4");
cell4.setCellStyle(titleStyle);
Cell cell5 = row.createCell(5);
cell5.setCellValue("Cell15");
cell5.setCellStyle(titleStyle);
- κ·Έλ¦¬κ³ DBμμ μ‘°νν΄ μ¨ λ°μ΄ν°μΈ resultListλ₯Ό λ°λ³΅λ¬Έμ ν΅ν΄ row μμ±ν΄μ€λ€.
int i = 0;
if (!resultLit.isEmpty()) {
for (xxxVo vo : resultLit)
{
row = sheet.createRow((i + 1));
cell1 = row.createCell(1);
cell1.setCellValue();
cell1.setCellStyle(stringStyle);
cell2 = row.createCell(2);
cell2.setCellValue();
cell2.setCellStyle(stringStyle);
cell3 = row.createCell(3);
cell3.setCellValue();
cell3.setCellStyle(stringStyle);
cell4 = row.createCell(4);
cell4.setCellValue();
cell4.setCellStyle(stringStyle);
cell5 = row.createCell(5);
cell5.setCellValue();
cell5.setCellStyle(stringStyle);
i++;
}
}
- κ·Έλ¦¬κ³ λ°μ΄ν° κΈΈμ΄λλ¬Έμ μμ μ²μ λ€μ΄λ°κ³ λ°μ΄ν° νμΈν λ μΉΈμ΄ μ’μΌλκΉ μλμΌλ‘ μ»¬λΌ μ¬μ΄μ¦λ₯Ό μ‘°μ νλ€.
(μ΄κ²λ μ°Ύμ보면 μλμΌλ‘ μ»¬λΌ μ¬μ΄μ¦ μ‘°μ νλ κΈλ€μ΄ λ§μ΄ μμ΄μ !)
//μλ μ»¬λΌ μ¬μ΄μ¦ (λλ΅ 10κΈμ)
sheet.setColumnWidth(1, 30*256);
sheet.setColumnWidth(2, 20*256);
sheet.setColumnWidth(3, 20*256);
sheet.setColumnWidth(4, 20*256);
sheet.setColumnWidth(5, 20*256);
- μ΄λ κ² νλ©΄ μμ νμΌμ μ€νμΌμ λ³λ‘κ² μ§λ§ κΈ°λ³Έμ μΌλ‘λ μμ±μ΄ λλ€..!
κ·Έλ¦¬κ³ μ΄μ μΉμ΄λΌκ³ νλ€λ©΄ μμ λ€μ΄λ‘λ λ²νΌμ΄ μμ κ²μ΄κ³ κ·Έ λ²νΌμ λλ μ λ μμ μ νμΌλ‘ λ€μ΄λ‘λ ν μ μλ λ°©λ²μ΄λ€.
response.setContentType("application/x-msdownload");
String encodedFileName = HttpUtil.getDisposition(fileName, HttpUtil.getBrowser(request));
response.setHeader("Content-Disposition", encodedFileName);
workbook.write(response.getOutputStream());
κ·Έλ¦¬κ³ νΉμ νκΈ νμΌλ‘ λ€μ΄λ‘λ νκ³ μΆλ€λ©΄ μΈμ½λ©μ ν΄μΌ νλ€.
String encodedFileName = new String(filename.getBytes("UTF-8"), "ISO-8859-1");
rtnFileName = String.format("attachment; filename=\"%s\";", encodedFileName);
-> ν¬λ‘¬μΌ κ²½μ°μλ μ΄λ κ² μΈμ½λ©ν rtnFileNameμΌλ‘ response headerμ λ΄μμΌ νλ€.
+ κ·Έλ¦¬κ³ νΉμ μμ λ€μ΄λ‘λ κΈ°λ₯ ꡬννλλ° 'νμΌ νμ λλ νμΌ νμ₯λͺ μ΄ μλͺ»λμ΄ xlsx νμΌμ μ΄ μ μμ΅λλ€.' μ΄λ° μ€λ₯κ° λ°μνλ€λ©΄ workbook.write(response.getOutputStream()); <= μ΄ μ½λ μμ± νλμ§ νμΈν΄λ³΄μΈμ..γ γ μ λ λΉΌλ¨Ήκ³ νλ€κ° κ³~μ λΉμ°ν λ€μ΄λ§ λκ³ μμ΄λ €μ λ νμ°Έμ λ΄€λ€μ γ γ γ ν...
+ κ·Έλ¦¬κ³ νΉμ λ€ ~~ ꡬν νλλ° λ€μ΄λ‘λ λ²νΌμ λλ λλ° λμμ μνλ€λ©΄... ajaxλ‘ λμνλλ‘ νλμ§ νμΈν΄λ³΄μΈμ... location.hrefλ‘ ν΄μΌ νλ€κ³ νλλΌκ³ μ...? κΈ°λ³Έμ μΌλ‘ ajaxλ νμΌ λ€μ΄λ‘λλ₯Ό λͺ»νλ€λ μ¬μ€μ μ λλ‘ μμ§ λͺ»νμ΅λλ€..... μ§μ§ λ©μ².... ππππ κ΅ν μ¨κ² μ»κ³ κ°λλ€ γ γ γ
μνΌ μ΄λ κ² κ°λ¨νκ² μμ νμΌ λ€μ΄λ‘λ ꡬννλ λ°©λ²μ λν΄μ κΈ°λ‘μ λ¨κΉλλ€.
μ κΈμ΄... μ΄λ€ ν λΆμκ²λΌλ λμμ΄ λκΈΈ πππ
'Spring > κ°λ° κ΄λ ¨' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Tomcat νΉμ λ²μ μ€μΉνλ λ°©λ² (9.0.68) (0) | 2022.12.05 |
---|---|
[JAVA] μ΄λ₯Ό μΌ/μ/λΆ/μ΄λ‘ λ³ννλ λ°©λ² (0) | 2022.11.28 |