Java 您可以使用查看您在行中的位置,而不是通过cellNumber++

Java 您可以使用查看您在行中的位置,而不是通过cellNumber++,java,excel,apache-poi,Java,Excel,Apache Poi,自己进行计数。这是由Microsoft设计的Excel文件格式,Excel稀疏地存储单元格,即仅存储已定义的单元格,而不是现有单元格之间的空单元格 因此,没有计划在ApachePOI中改变这一点。您的代码需要对此进行调整,Row.getCell()将为此类单元格返回null。迭代器不会返回这些空单元格 迭代时,您可以使用查看行中的位置,而不是通过cellNumber++@AxelRichter进行自己的计数。此时,我没有阅读任何内容。这是中行中所有单元格的屏幕iterator@AxelRicht

自己进行计数。这是由Microsoft设计的Excel文件格式,Excel稀疏地存储单元格,即仅存储已定义的单元格,而不是现有单元格之间的空单元格

因此,没有计划在ApachePOI中改变这一点。您的代码需要对此进行调整,Row.getCell()将为此类单元格返回null。迭代器不会返回这些空单元格


迭代时,您可以使用查看行中的位置,而不是通过
cellNumber++

@AxelRichter进行自己的计数。此时,我没有阅读任何内容。这是中行中所有单元格的屏幕iterator@AxelRichter添加一个代码。@AxelRichter这是一个问题,是否可以以某种方式更正此问题,是否有任何选项可以解释为什么无法从中获取这些单元格Excel@AxelRichter在这一点上,我没有读任何东西。这是中行中所有单元格的屏幕iterator@AxelRichter添加一个代码。@AxelRichter这是一个问题,这个问题是否可以以某种方式更正,是否有任何选项可以解释为什么无法从Excel中获取这些单元格这实际上是一个很好的答案。我花了几个小时来解决隐藏电池的问题,我们不应该把它算是最好的答案。这实际上是一个非常好的答案。我花了几个小时来解决隐藏电池的问题,我们不应该认为这是最好的答案。
XSSFWorkbook workbook = new XSSFWorkbook(Main.class.getResourceAsStream("/schedule/" + fileName));

    XSSFSheet sheet = workbook.getSheetAt(0);

    Iterator<Row> rowIterator = sheet.iterator();

    while (rowIterator.hasNext())
    {
        Row row = rowIterator.next();

        int rowNum = row.getRowNum();

        Iterator<Cell> cellIterator = row.cellIterator();

        int cellNumber = -1;

        while (cellIterator.hasNext())
        {
            cellNumber++;

            Cell cell = cellIterator.next();

            CellType cellType = cell.getCellTypeEnum();

            switch (cellType)
            {
                case STRING:
                    if (checkGroupCellPlus(cell.getStringCellValue()))
                    {
                        Group = cell.getStringCellValue();

                        Main._Log.info("Группа " + Group + " подана на разбор");

                        groupId++;

                        groupDao.Insert(groupId, Group);

                        Iterator<Row> rowIteratorSchedule = sheet.iterator();

                        Row rowSchedule = rowIteratorSchedule.next();

                        for (int i=0; i < rowNum+1; i++)
                        {
                            rowSchedule = rowIteratorSchedule.next();
                        }

                        Integer classTime = 1;
                        Short dayOfWeek = 0;
                        Short numberOfWeek = 1;

                        while (rowSchedule.getRowNum() < 74)
                        {

                            rowSchedule = rowIteratorSchedule.next();

                            String subject = "";
                            String subjectType = "";
                            String teacher = "";
                            String classroom = "";
                            String teacherName = "";
                            String teacherSername = "";
                            String teacherSecondName = "";

                            Iterator<Cell> cellIteratorSchedule = rowSchedule.iterator();

                            Cell cellSchedule = cellIteratorSchedule.next();

                            String day = cellSchedule.getStringCellValue();

                            switch(day.toLowerCase())
                            {
                                case("понедельник"):
                                    dayOfWeek = 1;
                                    break;
                                case("вторник"):
                                    dayOfWeek = 2;
                                    break;
                                case("среда"):
                                    dayOfWeek = 3;
                                    break;
                                case("четверг"):
                                    dayOfWeek = 4;
                                    break;
                                case("пятница"):
                                    dayOfWeek = 5;
                                    break;
                                case("суббота"):
                                    dayOfWeek = 6;
                                    break;
                            }

                            /**Integer cellNumber1 = cellNumber;
                            if (numberOfWeek == 2)
                                cellNumber1 = cellSchedule.getColumnIndex();*/

                            for (int i=0; i < cellNumber; i++)
                            {
                                cellSchedule = cellIteratorSchedule.next();
                            }

                            switch (cellSchedule.getCellTypeEnum())
                            {
                                case STRING:
                                    if (!cellSchedule.getStringCellValue().toLowerCase().
                                            replaceAll("[^A-Za-zА-Яа-я]", "").equals("") &&
                                            !cellSchedule.getStringCellValue().toLowerCase().equals("день") &&
                                            !cellSchedule.getStringCellValue().toLowerCase().equals("самостоятельных")
                                            && !cellSchedule.getStringCellValue().toLowerCase().equals("занятий") &&
                                            !cellSchedule.getStringCellValue().toLowerCase().equals("военная") &&
                                            !cellSchedule.getStringCellValue().toLowerCase().equals("подготовка") &&
                                            !cellSchedule.getStringCellValue().toLowerCase().
                                                    equals("военная подготовка") &&
                                            !cellSchedule.getStringCellValue().toLowerCase().
                                                    equals("занятия по адресу:") && !cellSchedule.getStringCellValue().
                                            toLowerCase().equals("ул. М.Пироговская, д.1"))
                                    {
                                        subject = cellSchedule.getStringCellValue();
                                    }
                                    break;
                                case NUMERIC:
                                    Double subject1 = cellSchedule.getNumericCellValue();
                                    subject = subject1.toString();
                            }
                            cellSchedule = cellIteratorSchedule.next();

                                switch (cellSchedule.getCellTypeEnum())
                                        {
                                            case STRING:
                                                if (!cellSchedule.getStringCellValue().toLowerCase().
                                                        replaceAll("[^A-Za-zА-Яа-я]", "").equals(""))
                                                {
                                                    subjectType = cellSchedule.getStringCellValue();
                                                }
                                                break;

                                            case NUMERIC:
                                                Double subjectType1 = cellSchedule.getNumericCellValue();
                                                subjectType = subjectType1.toString();
                                                break;
                                        }

                            cellSchedule = cellIteratorSchedule.next();

                            switch (cellSchedule.getCellTypeEnum())
                            {
                                case STRING:
                                    if (!cellSchedule.getStringCellValue().toLowerCase().
                                            replaceAll("[^A-Za-zА-Яа-я]", "").equals(""))
                                    {
                                        teacher = cellSchedule.getStringCellValue();
                                    }
                                    break;

                                case NUMERIC:
                                    Double teacher1 = cellSchedule.getNumericCellValue();
                                    teacher = teacher1.toString();
                                    break;
                            }

                            cellSchedule = cellIteratorSchedule.next();

                            switch (cellSchedule.getCellTypeEnum())
                            {
                                case STRING:
                                    if (!cellSchedule.getStringCellValue().toLowerCase().
                                            replaceAll("[^A-Za-zА-Яа-я]", "").equals(""))
                                    {
                                        classroom = cellSchedule.getStringCellValue();
                                    }
                                    break;

                                case NUMERIC:
                                    Double classroom1 = cellSchedule.getNumericCellValue();
                                    classroom = classroom1.toString();
                                    break;
                            }

                                if (teacher.matches("[А-Я]([а-я]{1,})\\s[А-Я]\\.[А-Я]\\."))
                                {

                                    teacherSecondName = teacher.substring(0, teacher.indexOf(" "));
                                    teacher = teacher.replaceFirst(teacherSecondName, "");
                                    teacherName = teacher.substring(0, teacher.indexOf("."));
                                    teacher = teacher.replaceFirst(teacherName, "");
                                    teacher = teacher.replaceFirst("\\.", "");
                                    teacherSername = teacher.substring(0, teacher.indexOf("."));
                                }
                                else if (!teacher.contains(".")) teacherSecondName = teacher;


                               Main._Log.info("Разобрана запись " + fileName + " " + Group + " " + subject + " " + subjectType + " " + teacherSecondName + " " + dayOfWeek + " " + numberOfWeek + " " + classTime + " " + classroom);

                                if (!teacherSecondName.equals("") || !subject.equals("") || !subjectType.equals("") ||
                                        !classroom.equals(""))
                                {
                                    teacherDao.Insert(teacherId, teacherName, teacherSername, teacherSecondName,
                                            null, null);

                                    subjectDao.Insert(subjectId, subject, teacherId);

                                    classroomDao.Insert(classroomId, classroom, null);

                                    subjectTypeDao.Insert(subjectTypeId, subjectId, subjectType);

                                    scheduleDao.Insert(scheduleId, classTime, classroomId, subjectId, dayOfWeek,
                                            numberOfWeek);

                                    teacherId++;
                                    subjectId++;
                                    classroomId++;
                                    subjectTypeId++;
                                    scheduleId++;
                                }

                                if (numberOfWeek == 1)
                                    numberOfWeek++;
                                else if (numberOfWeek == 2)
                                {
                                    numberOfWeek = 1;
                                    classTime++;
                                }

                                if (classTime == 7)
                                    classTime = 1;
                        }

                    }
                    break;

                case NUMERIC:
                    break;
            }
        }
    }