반응형
apache poi를 사용해서 View에서 엑셀 파일을 첨부받아 Controller로 가져와 리스트에 담아봤다.
implementation 'org.ahache.poi:poi:4.1.2'
implementation 'org.apache.poi:poi-ooxml:4.1.2'
의존성을 추가한다.
<form th:action="@{/carManagement/csv}" method="post" enctype="multipart/form-data">
<ul>
<li>첨부파일<input th:type="file" name="fileUpload"></li>
</ul>
<input th:type="submit" th:value="전송">
</form>
input의 type을 file로 설정하고 파일을 받아온다.
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
...
@PostMapping("/csv")
public String addCsvCar(@RequestParam(value = "fileUpload")MultipartFile mf, Model model) throws Exception{
List<CarDTO> list = new ArrayList<CarDTO>();
OPCPackage opcPackage = OPCPackage.open(mf.getInputStream());
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);
// 첫 번째 시트를 불러온다.
XSSFSheet sheet = workbook.getSheetAt(0);
// i는 몇 번째 행 부터 체크를 할 것인지 정한다.
for (int i=0; i<sheet.getLastRowNum() + 1; i++) {
CarDTO carDTO = new CarDTO();
XSSFRow row = sheet.getRow(i);
// 행이 존재하지 않으면 패스한다.
if (null == row) {
continue;
}
// 행의 첫 번째 열(이름)
XSSFCell cell = row.getCell(0);
if (null != cell) {
carDTO.setName(cell.getStringCellValue());
}
// 행의 두 번째 열(핸드폰번호)
cell = row.getCell(1);
if (null != cell){
carDTO.setPhoneNumber(cell.getStringCellValue());
}
// 행의 세 번째 열(차량번호)
cell = row.getCell(2);
if (null != cell) {
carDTO.setCarNumber(cell.getStringCellValue());
}
// 행의 네 번째 열(주소)
cell = row.getCell(3);
if (null != cell) {
carDTO.setAddress(cell.getStringCellValue());
}
// 리스트에 담는다.
list.add(carDTO);
log.debug("리스트 안에 옮겨 담기 : {}", carDTO);
}
return "carManagement/carManagement";
}
컨트롤러에서 poi라이브러리를 사용하여 엑셀에 있는 값을 list로 옮겨 담아주었다.
그 뒤, debug로 체크해 보니 값이 정상적으로 들어간 것을 확인할 수 있었다.
엑셀 파일 내용은 간단하게 테스트용으로 만들어 주었다.
맨 위에 구분 행은 i를 0으로 바꾸면 출력되지 않는데 아직 처리를 고민중이다.
이제 값을 JSON 구조로 바꾸고 mongoDB에 넣는 작업과, 위 작업을 Controller가 아니라 Service에서 할 수 있게 하는 것에 신경을 쓰면 될 것 같다.
https://ohju96.notion.site/apache-poi-view-excel-8e49ced4674b42b5bf8e6196450370bb
반응형
'Project > 소경관' 카테고리의 다른 글
[소경관] : 직접 차량 등록하기 기능 추가 (0) | 2022.05.09 |
---|---|
[소경관] : Spring Boot Apache poi 사용해서 excel 읽고, MongoDB에 저장하기 (0) | 2022.05.07 |
[소경관] : 카카오 주소 API 사용하기 (0) | 2022.04.21 |
[소경관] : 회원가입 로직 검증 다듬어주기, Spring Bean Validator 사용 (0) | 2022.04.18 |
[소경관] : Filter 적용하여 미인증 사용자 체크하기 (0) | 2022.04.17 |
댓글