Как разбить столбцы после определенного столбца на следующую строку [закрыто]

Вопрос или проблема

У меня есть конкретное требование, которое выглядит следующим образом.

Единица cl ml el
Ar    1 1  1
Br.   1 1. 1
Vr.   1 1. 1

.    Wo Fo hp
Ar.   1 1. 1
Br.   2 3. 3
Vr.   3 1. 1

Я привел это так

Единица. Cl el ml wo Fo hp
Ar.   1.  1. 1 1. 1.  1
Br.   2.  2  2  3. 3. 1
Vr.   4.  5. 1. 2.  1. 1

Я хочу обрезать столбцы после ml и разместить их ниже после трех строк. Как я могу подойти к решению этой задачи, используя Java?

Я создал класс, который содержит следующее:

Public Class LeaveSummary{
    String unit;
    String elcount;
    String clcount;
    String mlcount;
    String wocount;
     ....
      Getter..
      Setter...
 
}
Class main {
Public void main(){
     count = 0;
     List<LeaveSummary> leavesummary = new arraylist<>;
    ....
    For ( leaves leave : leaves){
    
       ......
       If(leave.getLeavetype(). equal() = 'el'){
    
    leaveSummary.setelcount(count +1);
     }
      Тот же логический вывод для добавления остальных переменных... 
    }
    Логика записи списка в excel...
}

Ответ или решение

Чтобы решить вашу задачу с размещением столбцов после определенного столбца в следующую строку с использованием Java, давайте подробнее разберем подход к реализации. Мы будем использовать список объектов LeaveSummary для представления данных, а затем реализуем логику, которая разделит данные и перенесет их в нужные строки.

1. Структура класса LeaveSummary

Ваш класс LeaveSummary должен содержать необходимые поля для хранения данных:

public class LeaveSummary {
    private String unit;
    private int elCount;
    private int clCount;
    private int mlCount;
    private int woCount;
    private int foCount;
    private int hpCount;

    // Геттеры и сеттеры 
    public String getUnit() {
        return unit;
    }

    public void setUnit(String unit) {
        this.unit = unit;
    }

    public int getElCount() {
        return elCount;
    }

    public void setElCount(int elCount) {
        this.elCount = elCount;
    }

    public int getClCount() {
        return clCount;
    }

    public void setClCount(int clCount) {
        this.clCount = clCount;
    }

    public int getMlCount() {
        return mlCount;
    }

    public void setMlCount(int mlCount) {
        this.mlCount = mlCount;
    }

    public int getWoCount() {
        return woCount;
    }

    public void setWoCount(int woCount) {
        this.woCount = woCount;
    }

    public int getFoCount() {
        return foCount;
    }

    public void setFoCount(int foCount) {
        this.foCount = foCount;
    }

    public int getHpCount() {
        return hpCount;
    }

    public void setHpCount(int hpCount) {
        this.hpCount = hpCount;
    }
}

2. Логика основного класса

Теперь мы создадим основной класс, который будет управлять логикой работы с данными. Например, вы можете загрузить данные в список LeaveSummary, а затем произвести манипуляции, чтобы разделить столбцы после mlCount.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<LeaveSummary> leaveSummaryList = new ArrayList<>();

        // Пример заполнения данных
        LeaveSummary leaveSummary1 = new LeaveSummary();
        leaveSummary1.setUnit("Ar");
        leaveSummary1.setElCount(1);
        leaveSummary1.setClCount(1);
        leaveSummary1.setMlCount(1);
        leaveSummary1.setWoCount(1);
        leaveSummary1.setFoCount(1);
        leaveSummary1.setHpCount(1);
        leaveSummaryList.add(leaveSummary1);

        // Добавление остальных записей аналогичным образом...

        // Логика по переносу столбцов
        List<String[]> formattedData = formatLeaveSummary(leaveSummaryList);

        // Вывод результатов
        for (String[] row : formattedData) {
            System.out.println(String.join("\t", row));
        }
    }

    private static List<String[]> formatLeaveSummary(List<LeaveSummary> leaveSummaryList) {
        List<String[]> result = new ArrayList<>();
        String[] header = {"Unit", "El", "Cl", "Ml", "Wo", "Fo", "Hp"};
        result.add(header);

        for (int i = 0; i < leaveSummaryList.size(); i++) {
            LeaveSummary leave = leaveSummaryList.get(i);
            String[] row = {
                leave.getUnit(),
                String.valueOf(leave.getElCount()),
                String.valueOf(leave.getClCount()),
                String.valueOf(leave.getMlCount())
            };
            result.add(row);

            if ((i + 1) % 3 == 0) {
                String[] continuationRow = {
                    "", "", "", "", // Пустые значения для первых четырех столбцов
                    String.valueOf(leave.getWoCount()),
                    String.valueOf(leave.getFoCount()),
                    String.valueOf(leave.getHpCount())
                };
                result.add(continuationRow);
            }
        }

        return result;
    }
}

3. Пояснение к коду

  • В начале мы создали класс LeaveSummary, который содержит все необходимые поля с геттерами и сеттерами.
  • В основном классе Main мы создали список leaveSummaryList для хранения данных.
  • Логика в методе formatLeaveSummary берет данные, форматирует их в строки и распределяет их по правилам, предполагая перенос столбцов после mlCount в 3-й строке.
  • Мы выводим данные с помощью System.out.println.

Заключение

Этот подход позволяет гибко управлять вашими данными, обеспечивая необходимую структуру для вывода результатов. Во избежание ошибок, уделите внимание заполнению данных в соответствии с вашим исходным форматом. Оптимизация кода для работы с Excel требует дополнительных библиотек, таких как Apache POI, если вам нужно сохранить результат в файле.

Оцените материал
Добавить комментарий

Капча загружается...