@tr1ck1

Как в groovy (java) сделать проверку на на одинаковые значения в двух ячейках excel?

Привет всем. Есть excel файл, в нем 3 колонки. Если значение в 1 и 2 колонке повторяются в нескольких строках, то должна выдаваться ошибка. Если была бы одна колонка, было бы проще, но так как значения в двух должны совпадать, то не могу понять. Думал сделать цикл в цикле, но полагаю, что не лучший вариант) Читал про poi, но не совсем разобрался, как это реализовать. Как это сделать в коде правильно?

import groovy.sql.Sql
import java.sql.Connection
import java.sql.DriverManager

import org.apache.poi.ss.usermodel.*
import org.apache.poi.hssf.usermodel.*

class XM_PARSE_XLS {

    def execute(Connection conn, InputStream p_file, String p_filename) {

        Sql sql = new Sql(conn);

        HSSFWorkbook wb = new HSSFWorkbook(p_file);

        ArrayList<HashMap<String, String>> arrAllData = new ArrayList<HashMap<String, String>>();

        String strsql
        Integer cntStr = 0
        String z_code_list = ""
        String cl_code_list = ""

        // парсим строку названия файла p_filename (первые 4 числа в гггг, следующие 2 числа в мм

        String PYYYY = p_filename.substring(0, 4);
        String PMM = p_filename.substring(4, 6);

        // идем по листам в файле
        wb.each { HSSFSheet myExcelSheet ->
            DataFormatter formatter = new DataFormatter();

            // идем по страницам файла
            myExcelSheet.each{  Row myrow ->

                HashMap<String, String> hm = new HashMap<String, String>();

                if (cntStr >= 0) {
                    // идем по строкам с данными
                    Integer numCell = 0;
                    String typ = '';

                    myrow.each { Cell mycell ->
                        String value = ""; // приводит любые ячейки к строковому формату

                        // если тип Строка
                        if (mycell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
                            value = mycell.getStringCellValue();
                            typ = 'S'
                            // если тип число
                        }  else {
                            // а для числовых ячеек или ячеек даты значение будет отформатировано на основе правил форматирования / стиля, примененных к ячейке, а затем возвращено как строка
                            value = formatter.formatCellValue(mycell);
                            typ = 'N'
                        }
                        if (cntStr == 0) {
                            Boolean Err = false;
                            switch(numCell) {
                                case 0:
                                    Err=(value.toUpperCase()!='Код завода');
                                    break;
                                case 1:
                                    Err=(value.toUpperCase()!='Код клиента');
                                    break;
                                case 2:
                                    Err=(value.toUpperCase()!='Описание');
                                    break;
                            }
                            numCell = numCell + 1;
                            if (Err) {
                                throw new Exception("Неверный заголовок столбца "+ value)
                            }
                        } else {
                            if((typ!='S')&&(numCell>0)&&(numCell<2)){
                                throw new Exception("Неверные данные для загрузки "+ value)
                            }
                            switch(numCell) {
                                case 0:
                                    hm.put("z_code", value);
                                    break;
                                case 1:
                                    hm.put("cl_code", value);
                                    break;
                                case 2:
                                    hm.put("desc", value);
                                    break;
                            }
                            numCell = numCell + 1;

                        }

                    }
                }
                if(hm) arrAllData.add(hm);
                cntStr = cntStr + 1;
            }
        }

        for (int i = 0; i < arrAllData.size(); i++) {
            HashMap <String, String> hm = arrAllData.get(i);

            if ("".equals(z_code_list)) {
                z_code_list = hm?.z_code}
            else{
                z_code_list = z_code_list+";"+hm?.z_code}

            if ("".equals(cl_code_list)) {
                cl_code_list = hm?.cl_code}
            else{
                cl_code_list = cl_code_list+";"+hm?.cl_code}

            strsql = """plsql code
""";

          
            sql.execute( strsql);
        }

        HashMap<String, Object> res = new HashMap<>();
        res.put("P_CNT",cntStr-1);
        res.put("P_SQL",strsql);
        res.put("PYYYY",PYYYY);
        res.put("PMM",PMM);
        res.put("P_Z_CODE_LIST",z_code_list);
        res.put("P_CL_CODE_LIST",cl_code_list);
        return res;
    }
    static void main(String... args) {
      
    }

}
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы