값비교엑셀

beombeom1·2024년 11월 8일
0

// 두 해의 데이터 리스트를 가져온다고 가정 (예: 1월과 6월 데이터)
List januaryGroups = getGroupData("20240101");
List juneGroups = getGroupData("20240601");

// 엑셀 시트에 출력 시작
for (GroupDTO januaryGroup : januaryGroups) {
boolean isMatched = false;

// 1월 데이터 출력
Row groupRow = sheet.createRow(rowCount++);
for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
    switch (cellIndex) {
        case 0 -> groupRow.createCell(cellIndex).setCellValue(januaryGroup.getGroupName());
        case 1 -> groupRow.createCell(cellIndex).setCellValue(januaryGroup.getTotalAmount());
        case 2 -> groupRow.createCell(cellIndex).setCellValue(januaryGroup.getTotalPercentage());
    }
}

// 6월 데이터와 매칭되는 그룹이 있는지 찾음
for (GroupDTO juneGroup : juneGroups) {
    if (januaryGroup.getGroupName().equals(juneGroup.getGroupName())) {
        // 6월 데이터 출력
        for (int cellIndex = 3; cellIndex < 5; cellIndex++) {
            switch (cellIndex) {
                case 3 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalAmount());
                case 4 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalPercentage());
            }
        }

        // 항목 비교 및 출력
        for (ItemDTO januaryItem : januaryGroup.getItems()) {
            Row itemRow = sheet.createRow(rowCount++);
            for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
                switch (cellIndex) {
                    case 0 -> itemRow.createCell(cellIndex).setCellValue(januaryItem.getItemName());
                    case 1 -> itemRow.createCell(cellIndex).setCellValue(januaryItem.getAmountHeld());
                    case 2 -> itemRow.createCell(cellIndex).setCellValue(januaryItem.getPercentageHeld());
                }
            }

            // 6월 데이터에서 동일 항목 찾기
            for (ItemDTO juneItem : juneGroup.getItems()) {
                if (januaryItem.getItemName().equals(juneItem.getItemName())) {
                    itemRow.createCell(3).setCellValue(juneItem.getAmountHeld());
                    itemRow.createCell(4).setCellValue(juneItem.getPercentageHeld());
                    break;
                }
            }
        }

        isMatched = true;
        break;
    }
}

// 만약 6월에 해당 그룹이 없으면 빈칸 출력
if (!isMatched) {
    for (int cellIndex = 3; cellIndex < 5; cellIndex++) {
        groupRow.createCell(cellIndex).setCellValue("");
    }
}

}

// 6월 데이터 중 1월에 없는 그룹 출력
for (GroupDTO juneGroup : juneGroups) {
boolean isPresentInJanuary = false;
for (GroupDTO januaryGroup : januaryGroups) {
if (januaryGroup.getGroupName().equals(juneGroup.getGroupName())) {
isPresentInJanuary = true;
break;
}
}

if (!isPresentInJanuary) {
    Row groupRow = sheet.createRow(rowCount++);
    for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
        switch (cellIndex) {
            case 0 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getGroupName());
            case 3 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalAmount());
            case 4 -> groupRow.createCell(cellIndex).setCellValue(juneGroup.getTotalPercentage());
        }
    }

    // 6월 항목 출력
    for (ItemDTO juneItem : juneGroup.getItems()) {
        Row itemRow = sheet.createRow(rowCount++);
        for (int cellIndex = 0; cellIndex < 5; cellIndex++) {
            switch (cellIndex) {
                case 0 -> itemRow.createCell(cellIndex).setCellValue(juneItem.getItemName());
                case 3 -> itemRow.createCell(cellIndex).setCellValue(juneItem.getAmountHeld());
                case 4 -> itemRow.createCell(cellIndex).setCellValue(juneItem.getPercentageHeld());
            }
        }
    }
}

}

profile
가보자

0개의 댓글