티스토리 뷰

 

나중에 참고하기 위해 기록을 해본다.

 

프로젝트에 필요한 데이터를 확보하는데 한 군데에서 구하지 못하고 여기저기 긁어 모아야했다.

처음에 모든 데이터가 담긴 엑셀 파일을 DB에 저장하려고 했다가 방법이 바뀌게 됐다.

 

엑셀 파일을 읽는 것 까지 성공했고 DB에 insert하는 것은 해보지 못하고 다른 방식으로 저장하게 되어서 다음에 이 방법을 시도해보고 싶다. 

 

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component //빈으로 등록
public class ExcelReadController {

    private static final Logger logger = LoggerFactory.getLogger(ExcelReadController.class);
    private List<String> excelData = new ArrayList<>();

    @Scheduled(fixedRate = 60000) // 60초마다 실행
    public void readExcelFiles() {
        ClassPathResource resource = new ClassPathResource("excel/example.xlsx");

        try (InputStream is = resource.getInputStream()) {
            Workbook workbook = WorkbookFactory.create(is);
            processWorkbook(workbook);
        } catch (IOException e) {
            logger.error("Error reading Excel file", e);
        }
    }

    private void processWorkbook(Workbook workbook) {
        // 엑셀 파일을 처리하는 로직
        Sheet sheet = workbook.getSheetAt(0);
        for (Row row : sheet) {
            for (Cell cell : row) {
                String cellValue = getCellValue(cell);
                excelData.add(cellValue);
                logger.info("Cell Value: {}", cellValue);
            }
        }
    }

    private String getCellValue(Cell cell) {
        switch (cell.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    return cell.getDateCellValue().toString();
                } else {
                    return String.valueOf(cell.getNumericCellValue());
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula();
            case BLANK:
                return "";
            default:
                return "Unknown Cell Type";
        }
    }

    public List<String> getExcelData() {
        return new ArrayList<>(excelData);
    }
}
 @Autowired
    private ExcelReadController excelReadController;
    
    @Autowired
    private CategoryRepository categoryRepository;
    

    //@Test
    public void testReadExcelFiles() {
        excelReadController.readExcelFiles();  // 직접 호출하여 읽기

        List<String> excelData = excelReadController.getExcelData();
        assertNotNull(excelData, "Excel data should not be null");
        assertFalse(excelData.isEmpty(), "Excel data should not be empty");

        for (String data : excelData) {
            System.out.println("Excel Data: " + data);
        }
    }

 

=> 테스트로 실행해서 콘솔에 읽히는 것 까지 확인

'JAVA' 카테고리의 다른 글

JPA고급매핑 - 복합키  (0) 2024.08.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
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
글 보관함