JavaFX Apache POI Программа входа в Excel - PullRequest
2 голосов
/ 04 марта 2020

Я новичок в Java и уже некоторое время изучаю его

Я хочу создать программу для входа в систему, используя Excel для хранения информации.

Проблема в том, что что я не знаю, как кодировать кнопку входа в систему. Я искал и придумал этот код, используя итератор, чтобы найти значения внутри XSSFSheet.

Может кто-нибудь мне помочь? Наибольшая благодарность тем, кто ответит.

public void logInButtonPressed() {
    try {
        String user = userLogTF.getText();
        String pass = passLogPF.getText();

        FileInputStream inputStream = new FileInputStream(new File("Database.xlsx"));
        Workbook workbook = WorkbookFactory.create(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        int i = 0;
        boolean found = false;

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

        while (rows.hasNext() || !found) {
            XSSFRow row = (XSSFRow) rows.next();
            XSSFCell cell = row.getCell(i++);
            String userName = cell.toString();
            Iterator<Cell> cellIterator = row.iterator();
            if (userName.equals(user)) {
                found = true;

            } else {
                i++;
            }

            while (cellIterator.hasNext()) {
                Cell passCell = cellIterator.next();
                String passWord = passCell.toString();
                if (passWord.equals(pass)) {
                    JOptionPane.showMessageDialog(null, "Logged In");
                    break;
                } else {
                    JOptionPane.showMessageDialog(null, "Invalid Input");
                    break;
                }

            }

        }
    } catch (Exception e) {
    }
}

Это файл Excel

enter image description here

Это Gui

enter image description here

1 Ответ

2 голосов
/ 04 марта 2020

Вам не нужно iterator, если вы знаете столбцы для имени пользователя и пароля. Вы можете просто выполнить итерацию по индексу строки и получить прямой доступ к столбцам по индексам 1 и 2.
. Просмотрите следующий пример и внимательно прочитайте комментарии к коду:

public void logInButtonPressed() {
    String user = userLogTF.getText();
    String pass = passLogPF.getText();
    // provide some flags for the items to be found and matched
    boolean foundUser = false;
    boolean passwordMatchesUser = false;

    try (FileInputStream fis = new FileInputStream(new File("Database.xlsx"))) {
        Workbook workbook = new XSSFWorkbook(fis);
        // there is only one sheet in your workbook, so take the first one
        Sheet sheet = workbook.getSheetAt(0);

        // the values start at row 1 (on a zero-based index), first row contains headers
        for (int r = 1; r < sheet.getPhysicalNumberOfRows(); r++) {
            Row row = sheet.getRow(r);
            // you know the users are stored in column 2 (or B), again: zero-based index
            Cell userCell = row.getCell(1);

            // check for a match in the user cells
            if (userCell.toString().equals(username)) {
                // set the flag to true if the user was found
                foundUser = true;
                // then directly switch to the password cell in the next column
                Cell passwordCell = row.getCell(2);

                // and check if the password is correct
                if (passwordCell.toString().equals(password)) {
                    // if it is, set the flag
                    passwordMatchesUser = true;
                    // and exit the loop
                    break;
                }
            }
        }

        // afterwards, check if both flags are true
        if (foundUser && passwordMatchesUser) {
            JOptionPane.showMessageDialog(null, "Logged In");
        } else {
            JOptionPane.showMessageDialog(null, "Invalid Input");
        }

    } catch (FileNotFoundException e) {
        System.err.println("Workbook could not be found");
        e.printStackTrace();
    } catch (IOException e) {
        System.err.println("Workbook could not be read");
        e.printStackTrace();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...