CellReference cr = new CellReference("") gibt den falschen Wert zurück

Tiago1234

Mitglied
Ich habe eine Excel Tabelle, aus der ich Daten ablesen will. Dafür brauche ich CellReference. Hier ein Teil meines Codes:


Java:
        XSSFRow row;

        XSSFCell cell;
        
        CellReference cr = new CellReference("D4");

        row = sheet.getRow(cr.getRow());
        cell = row.getCell(cr.getCol(), Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

        if (cell != null && cell.getCellType() == CellType.NUMERIC) {
            return cell.getNumericCellValue();

        } else {
            return 0.0;
        }

"D4" ist hierbei variabel. Das problem ist jetzt, dass mir immer der falsche Wert für die Row zurückgegeben wird. für D4 wird praktisch D5 zurückgegeben, für G11 G12, für B5 B6, usw.
Hier mein gesamter Quellcode:

Code:
package utils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.*;

import javax.sound.midi.SysexMessage;
import java.io.*;
import java.util.concurrent.ThreadLocalRandom;

public class ExcelUtils {

    HashMap<String, String> namesLetters = new HashMap<>();
    HashMap<String, Integer> namesNumber = new HashMap<>();
    HashMap<Integer, String> numberLetter = new HashMap<>();

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

    HashMap<Integer, String> numberNames = new HashMap<>();

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

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

    File file = new File("/Users/thierry/Desktop/Sitzplan/data/savedPairsHashMaps.rtf");

    Path filePath = Paths.get("/Users/thierry/Desktop/Sitzplan/data/savedPairsHashMaps.rtf");

    Charset charset = StandardCharsets.UTF_8;

    String excelPath = "/Users/thierry/Desktop/Sitzplan/data/Sitzplan Sitznachbarn.xlsx";

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

    public static void main(String[] args) throws Exception {
        new ExcelUtils();
    }

    public ExcelUtils() throws IOException {
        removeTextFromTxt(file);
        putHashMapData();
        sitznachbarpaare();
    }


    public void sitznachbarpaare() throws IOException {

/*
        double overallResult = 0;
        double overallResult2 = 0;
        double result1;

        int randName1 = ThreadLocalRandom.current().nextInt(2, 32);
        int randName2 = ThreadLocalRandom.current().nextInt(2, 32);

        while (randName1 == randName2) {
            randName1 = ThreadLocalRandom.current().nextInt(2, 32);
            randName2 = ThreadLocalRandom.current().nextInt(2, 32);
        }
        int k = 0;
        String[] splittedNames;
        while (k < 30 * 29) {
            for (int i = 0; i < 15; i++) {
                double x = getCellDataByIndex(randName1, randName2);
                double y = getCellDataByIndex(randName2, randName1);

                result1 = x + y;

                overallResult2 += result1;

                String names = getNamesFromIndex(randName1, randName2);

                splittedNames = names.split("\\s+");

                pairs.put(splittedNames[0], splittedNames[1]);

                randName1 = ThreadLocalRandom.current().nextInt(2, 32);

                randName2 = ThreadLocalRandom.current().nextInt(2, 32);

                while (pairs.containsKey(numberNames.get(randName1)) ||
                        pairs.containsValue(numberNames.get(randName1)) ||
                        randName1 == randName2
                        )
                {
                    randName1 = ThreadLocalRandom.current().nextInt(2, 32);
                }

                while (pairs.containsKey(numberNames.get(randName2)) ||
                        pairs.containsValue(numberNames.get(randName2)) ||
                        randName1 == randName2)
                {
                    randName2 = ThreadLocalRandom.current().nextInt(2, 32);
                }


                System.out.println(pairs);

                //addUsedPairsFromTxt(usedPairs);

                pairs.clear();
            }

                if(overallResult2 >= overallResult)
                {
                    overallResult = overallResult2;
                }


            overallResult2 = 0;
            k++;

            writePairsInTxt(pairs);
            System.out.println(overallResult);


        }
    */

        System.out.println(getCellDataByIndex(11, 7));
        System.out.println(getNamesFromIndex(11, 7));

    }

    public void addUsedPairsFromTxt(Map<String, String> map) {

        try (BufferedReader br = Files.newBufferedReader(filePath, charset)) {
            String line;
            String[] names;
            while ((line = br.readLine()) != null) {
                names = line.split("\\s+");
                map.put(names[0], names[1]);

            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void removeTextFromTxt(File file) throws FileNotFoundException {
        PrintWriter writer = new PrintWriter(file);
        writer.close();
    }

    public void writePairsInTxt(Map<String, String> map) {

        try (BufferedWriter bf = new BufferedWriter(new FileWriter(file, true))) {

            for (Map.Entry<String, String> entry : map.entrySet()) {
                bf.write(entry.getKey() + " " + entry.getValue());
                bf.newLine();
            }

            bf.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getNamesFromIndex(int row, int column) {
        String firstName = numberNames.get(row);

        String secondName = letterNames.get(numberLetter.get(column));

        return firstName + " " + secondName;
    }

    public Double getCellDataByName(String nameRow, String nameCol) throws IOException {

        FileInputStream inputstream = new FileInputStream(excelPath);

        XSSFWorkbook workbook = new XSSFWorkbook(inputstream);

        XSSFSheet sheet = workbook.getSheetAt(0);

        XSSFRow row;

        XSSFCell cell;
        String ref = namesLetters.get(nameCol) + namesNumber.get(nameRow);
        CellReference cr = new CellReference(ref);

        row = sheet.getRow(cr.getRow());
        cell = row.getCell(cr.getCol(), Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

        if (cell != null && cell.getCellType() == CellType.NUMERIC) {
            return cell.getNumericCellValue();

        } else {
            return 0.0;
        }

    }


    public Double getCellDataByIndex(int excelrow, int excelcolumn) throws IOException {

        FileInputStream inputstream = new FileInputStream(excelPath);

        XSSFWorkbook workbook = new XSSFWorkbook(inputstream);

        XSSFSheet sheet = workbook.getSheetAt(0);

        XSSFRow row;
        XSSFCell cell;

        String name1 = numberNames.get(excelrow);
        String name2 = numberNames.get(excelcolumn);
        System.out.println(numberLetter.get(excelcolumn) + excelrow);
        CellReference cr = new CellReference(numberLetter.get(excelcolumn) + excelrow);
        row = sheet.getRow(cr.getRow());
        cell = row.getCell(cr.getCol()/*, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK*/);


        if (/*cell != null && */cell.getCellType() == CellType.NUMERIC) {
            return cell.getNumericCellValue();
        } else {
            return 0.0;
        }

    }


    public void putHashMapData() {
        namesLetters.put("Yuri", "B");
        namesLetters.put("Thierry", "C");
        namesLetters.put("Jennifer", "D");
        namesLetters.put("Béla", "E");
        namesLetters.put("Theodor", "F");
        namesLetters.put("David", "G");
        namesLetters.put("Yuliana", "H");
        namesLetters.put("Ariana", "I");
        namesLetters.put("Jonah", "J");
        namesLetters.put("Alina", "K");
        namesLetters.put("Thomas", "L");
        namesLetters.put("Bjarne", "M");
        namesLetters.put("Livia", "N");
        namesLetters.put("Till", "O");
        namesLetters.put("Jason", "P");
        namesLetters.put("Justus", "Q");
        namesLetters.put("Timofej", "R");
        namesLetters.put("Nikolai", "S");
        namesLetters.put("An", "T");
        namesLetters.put("Khoi", "U");
        namesLetters.put("Mai", "V");
        namesLetters.put("Florian", "W");
        namesLetters.put("Giuglio", "X");
        namesLetters.put("Fridtjof", "Y");
        namesLetters.put("Mark", "Z");
        namesLetters.put("Markus", "AA");
        namesLetters.put("Felix", "AB");
        namesLetters.put("Max", "AC");
        namesLetters.put("Daniil", "AD");
        namesLetters.put("Yared", "AE");

        namesNumber.put("Yuri", 3);
        namesNumber.put("Thierry", 4);
        namesNumber.put("Jennifer", 5);
        namesNumber.put("Béla", 6);
        namesNumber.put("Theodor", 7);
        namesNumber.put("David", 8);
        namesNumber.put("Yuliana", 9);
        namesNumber.put("Ariana", 10);
        namesNumber.put("Jonah", 11);
        namesNumber.put("Alina", 12);
        namesNumber.put("Thomas", 13);
        namesNumber.put("Bjarne", 14);
        namesNumber.put("Livia", 15);
        namesNumber.put("Till", 16);
        namesNumber.put("Jason", 17);
        namesNumber.put("Justus", 18);
        namesNumber.put("Timofej", 19);
        namesNumber.put("Nikolai", 20);
        namesNumber.put("An", 21);
        namesNumber.put("Khoi", 22);
        namesNumber.put("Mai", 23);
        namesNumber.put("Florian", 24);
        namesNumber.put("Giuglio", 25);
        namesNumber.put("Fridtjof", 26);
        namesNumber.put("Mark", 27);
        namesNumber.put("Markus", 28);
        namesNumber.put("Felix", 29);
        namesNumber.put("Max", 30);
        namesNumber.put("Daniil", 31);
        namesNumber.put("Yared", 32);

        numberLetter.put(1, "A");
        numberLetter.put(2, "B");
        numberLetter.put(3, "C");
        numberLetter.put(4, "D");
        numberLetter.put(5, "E");
        numberLetter.put(6, "F");
        numberLetter.put(7, "G");
        numberLetter.put(8, "H");
        numberLetter.put(9, "I");
        numberLetter.put(10, "J");
        numberLetter.put(11, "K");
        numberLetter.put(12, "L");
        numberLetter.put(13, "M");
        numberLetter.put(14, "N");
        numberLetter.put(15, "O");
        numberLetter.put(16, "P");
        numberLetter.put(17, "Q");
        numberLetter.put(18, "R");
        numberLetter.put(19, "S");
        numberLetter.put(20, "T");
        numberLetter.put(21, "U");
        numberLetter.put(22, "V");
        numberLetter.put(23, "W");
        numberLetter.put(24, "X");
        numberLetter.put(25, "Y");
        numberLetter.put(26, "Z");
        numberLetter.put(27, "AA");
        numberLetter.put(28, "AB");
        numberLetter.put(29, "AC");
        numberLetter.put(30, "AD");
        numberLetter.put(31, "AE");

        numberNames.put(3, "Yuri");
        numberNames.put(4, "Thierry");
        numberNames.put(5, "Jennifer");
        numberNames.put(6, "Béla");
        numberNames.put(7, "Theodor");
        numberNames.put(8, "David");
        numberNames.put(9, "Yuliana");
        numberNames.put(10, "Ariana");
        numberNames.put(11, "Jonah");
        numberNames.put(12, "Alina");
        numberNames.put(13, "Thomas");
        numberNames.put(14, "Bjarne");
        numberNames.put(15, "Livia");
        numberNames.put(16, "Till");
        numberNames.put(17, "Jason");
        numberNames.put(18, "Justus");
        numberNames.put(19, "Timofej");
        numberNames.put(20, "Nikolai");
        numberNames.put(21, "An");
        numberNames.put(22, "Khoi");
        numberNames.put(23, "Mai");
        numberNames.put(24, "Florian");
        numberNames.put(25, "Giuglio");
        numberNames.put(26, "Fridtjof");
        numberNames.put(27, "Mark");
        numberNames.put(28, "Markus");
        numberNames.put(29, "Felix");
        numberNames.put(30, "Max");
        numberNames.put(31, "Daniil");
        numberNames.put(32, "Yared");

        letterNames.put("B", "Yuri");
        letterNames.put("C", "Thierry");
        letterNames.put("D", "Jennifer");
        letterNames.put("E", "Béla");
        letterNames.put("F", "Theodor");
        letterNames.put("G", "David");
        letterNames.put("H", "Yuliana");
        letterNames.put("I", "Ariana");
        letterNames.put("J", "Jonah");
        letterNames.put("K", "Alina");
        letterNames.put("L", "Thomas");
        letterNames.put("M", "Bjarne");
        letterNames.put("N", "Livia");
        letterNames.put("O", "Till");
        letterNames.put("P", "Jason");
        letterNames.put("Q", "Justus");
        letterNames.put("R", "Timofej");
        letterNames.put("S", "Nikolai");
        letterNames.put("T", "An");
        letterNames.put("U", "Khoi");
        letterNames.put("V", "Mai");
        letterNames.put("W", "Florian");
        letterNames.put("X", "Giuglio");
        letterNames.put("Y", "Fridtjof");
        letterNames.put("Z", "Mark");
        letterNames.put("AA", "Markus");
        letterNames.put("AB", "Felix");
        letterNames.put("AC", "Max");
        letterNames.put("AD", "Daniil");
        letterNames.put("AE", "Yared");
    }




}

Beispielscreenshots von der Konsole: 

[ATTACH type="full"]17999[/ATTACH]

[ATTACH type="full"]18000[/ATTACH]

Anbei auch die Excel Datei (Als ZIP weil man keine .xlsx Dateien hochladen kann).

Ich bin dankbar für jede Hilfe.
 

Anhänge

wirst du im späteren verlauf die excel tabelle bkeommen oder selber erstellen? das sieht relativ nach testdaten aus

wenn du sie mit dme programm erstellst würde ich dir zu csv raten da der umgang 10 mal leichter ist
 
Java:
    numberLetter.put(1, "A");
        numberLetter.put(2, "B");
        numberLetter.put(3, "C");
        numberLetter.put(4, "D");
        numberLetter.put(5, "E");
        numberLetter.put(6, "F");
        numberLetter.put(7, "G");
        numberLetter.put(8, "H");
        numberLetter.put(9, "I");
        numberLetter.put(10, "J");
        numberLetter.put(11, "K");
        numberLetter.put(12, "L");
        numberLetter.put(13, "M");
        numberLetter.put(14, "N");
        numberLetter.put(15, "O");
        numberLetter.put(16, "P");
        numberLetter.put(17, "Q");
        numberLetter.put(18, "R");
        numberLetter.put(19, "S");
        numberLetter.put(20, "T");
        numberLetter.put(21, "U");
        numberLetter.put(22, "V");
        numberLetter.put(23, "W");
        numberLetter.put(24, "X");
        numberLetter.put(25, "Y");
        numberLetter.put(26, "Z");
        numberLetter.put(27, "AA");
        numberLetter.put(28, "AB");
        numberLetter.put(29, "AC");
        numberLetter.put(30, "AD");
        numberLetter.put(31, "AE");
wenn du 1 too much hast, warum fängst du dann bei 1 an zu zählen? und nicht bei 0


da du den anderen code entfernt hast weis ich auch nich mehr was es sonst sein könnte
 
Welchen anderen Code habe ich entfernt? Das Problem ist ja, dass mir der richtige Buchstabe und die richtige Zahl ausgegeben wird (z.B. J3), nur der Wert aus der Tabelle ist halt falsch. Es liegt also glaube ich nicht an der HashMap...
 
Erst einmal würde ich direkt mit den indices arbeiten un nicht mit den verbalen "Namen". Du hast ja die Indices und hast dann irgend einen Code, der daraus Buchstaben und so macht um dann mittels CellReference wieder zurück zu den Indices zu kommen.

Und die Dokumentation von CellReferene ist etwas lückenhaft (paar Methoden haben keine Dokumentation, was ich schade finde). Wo genau bei Dir der Fehler liegt kann ich jetzt so aus dem Codeabschnitt nicht wirklich erkennen. Aber deine Umwandlungen würde ich so erst einmal im Detail prüfen bzw. würde auf CellReference.convertColStringToIndex und CellReference.convertNumToColString setzen.

Wenn man CellReference anschaut, dann liefert das korrekte Indices, also z.B:
Java:
        CellReference ref = new CellReference("C3");
        System.out.println(ref.getRow());
        System.out.println(ref.getCol());
liefert zwei mal die Ausgabe 2 - was richtig ist, da ja bei Index 2 gestartet wird.

A ist also die 0 und nicht die 1 (Wie Du in der Hashmap falsch angegeben hast!)

Daher vermute ich, dass Du da einfach nur irgendwas generell durcheinander geworfen hast mit "Row Number" und "Row Indices". Aber bei dem Code von Dir ist das recht schwer zu sagen, da der aus meiner Sicht schlicht zu kompliziert ist.

Also was ich machen würde:
- Im Code würde ich immer mit den Indices arbeiten!
- Die Visualle Darstellung nur da verwenden, wo dies den User betrifft. Und da kann man einfach 1:1 mittels CellReference umwandeln.
 
Wenn ich die HashMaps mal ausblende und einfach z.B. D4 als Parameter eingebe (CellReference ref = new CellReference("D4")😉, dann kommt auch der falsche Wert.
 
Also ich habe jetzt die HashMaps so geändert wie ihr gesagt habt. An sich funktioniert es jetzt, zumindest kommen die richtigen Werte. Jetzt ist halt die 2. Spalte C, die 3. Spalte D usw. Ich habe die Tabelle jetzt wieder in die erste Zeile gesetzt. Jetzt ist aber ein neues Problem. Das Problem, warum ich die Tabelle erst in die zweite Spalte gesetzt habe: Wenn ich einen Wert aus der 2. Zeile lesen will, kommt immer eine NullPointerException.

1650205931591.png

Was läuft da jetzt schief?

Hier nochmal mein gesamter Quellcode:

Java:
package utils;

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.*;

import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.usermodel.*;

import java.io.*;
import java.util.concurrent.ThreadLocalRandom;

public class ExcelUtils {

    HashMap<String, String> namesLetters = new HashMap<>();
    HashMap<String, Integer> namesNumber = new HashMap<>();
    HashMap<Integer, String> numberLetter = new HashMap<>();

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

    HashMap<Integer, String> numberNames = new HashMap<>();

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

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

    File file = new File("/Users/thierry/Desktop/Sitzplan/data/savedPairsHashMaps.rtf");

    Path filePath = Paths.get("/Users/thierry/Desktop/Sitzplan/data/savedPairsHashMaps.rtf");

    Charset charset = StandardCharsets.UTF_8;

    String excelPath = "/Users/thierry/Desktop/Sitzplan/data/Sitzplan Sitznachbarn.xlsx";

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

    public static void main(String[] args) throws Exception {
        new ExcelUtils();
    }

    public ExcelUtils() throws IOException {
        removeTextFromTxt(file);
        putHashMapData();
        sitznachbarpaare();
    }


    public void sitznachbarpaare() throws IOException {

/*
        double overallResult = 0;
        double overallResult2 = 0;
        double result1;

        int randName1 = ThreadLocalRandom.current().nextInt(2, 32);
        int randName2 = ThreadLocalRandom.current().nextInt(2, 32);

        while (randName1 == randName2) {
            randName1 = ThreadLocalRandom.current().nextInt(2, 32);
            randName2 = ThreadLocalRandom.current().nextInt(2, 32);
        }
        int k = 0;
        String[] splittedNames;
        while (k < 30 * 29) {
            for (int i = 0; i < 15; i++) {
                double x = getCellDataByIndex(randName1, randName2);
                double y = getCellDataByIndex(randName2, randName1);

                result1 = x + y;

                overallResult2 += result1;

                String names = getNamesFromIndex(randName1, randName2);

                splittedNames = names.split("\\s+");

                pairs.put(splittedNames[0], splittedNames[1]);

                randName1 = ThreadLocalRandom.current().nextInt(2, 32);

                randName2 = ThreadLocalRandom.current().nextInt(2, 32);

                while (pairs.containsKey(numberNames.get(randName1)) ||
                        pairs.containsValue(numberNames.get(randName1)) ||
                        randName1 == randName2
                        )
                {
                    randName1 = ThreadLocalRandom.current().nextInt(2, 32);
                }

                while (pairs.containsKey(numberNames.get(randName2)) ||
                        pairs.containsValue(numberNames.get(randName2)) ||
                        randName1 == randName2)
                {
                    randName2 = ThreadLocalRandom.current().nextInt(2, 32);
                }


                System.out.println(pairs);

                //addUsedPairsFromTxt(usedPairs);

                pairs.clear();
            }

                if(overallResult2 >= overallResult)
                {
                    overallResult = overallResult2;
                }


            overallResult2 = 0;
            k++;

            writePairsInTxt(pairs);
            System.out.println(overallResult);


        }
    */

        System.out.println(getCellDataByIndex(2, 3));
        System.out.println(getNamesFromIndex(2, 3));
        CellReference ref = new CellReference("D4");
        System.out.println(ref.getRow());
        System.out.println(ref.getCol());



    }

    public void addUsedPairsFromTxt(Map<String, String> map) {

        try (BufferedReader br = Files.newBufferedReader(filePath, charset)) {
            String line;
            String[] names;
            while ((line = br.readLine()) != null) {
                names = line.split("\\s+");
                map.put(names[0], names[1]);

            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public void removeTextFromTxt(File file) throws FileNotFoundException {
        PrintWriter writer = new PrintWriter(file);
        writer.close();
    }

    public void writePairsInTxt(Map<String, String> map) {

        try (BufferedWriter bf = new BufferedWriter(new FileWriter(file, true))) {

            for (Map.Entry<String, String> entry : map.entrySet()) {
                bf.write(entry.getKey() + " " + entry.getValue());
                bf.newLine();
            }

            bf.flush();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public String getNamesFromIndex(int row, int column) {
        String firstName = numberNames.get(row);

        String secondName = letterNames.get(numberLetter.get(column));

        return firstName + " " + secondName;
    }

    public Double getCellDataByName(String nameRow, String nameCol) throws IOException {

        FileInputStream inputstream = new FileInputStream(excelPath);

        XSSFWorkbook workbook = new XSSFWorkbook(inputstream);

        XSSFSheet sheet = workbook.getSheetAt(0);

        XSSFRow row;

        XSSFCell cell;
        String ref = namesLetters.get(nameCol) + namesNumber.get(nameRow);
        CellReference cr = new CellReference(ref);

        row = sheet.getRow(cr.getRow());
        cell = row.getCell(cr.getCol(), Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);

        if (cell != null && cell.getCellType() == CellType.NUMERIC) {
            return cell.getNumericCellValue();

        } else {
            return 0.0;
        }

    }


    public Double getCellDataByIndex(int excelrow, int excelcolumn) throws IOException {

        FileInputStream inputstream = new FileInputStream(excelPath);

        XSSFWorkbook workbook = new XSSFWorkbook(inputstream);

        XSSFSheet sheet = workbook.getSheetAt(0);

        XSSFRow row;
        XSSFCell cell;

        String name1 = numberNames.get(excelrow);
        String name2 = numberNames.get(excelcolumn);
        System.out.println(numberLetter.get(excelcolumn) + excelrow);
        CellReference cr = new CellReference(numberLetter.get(excelcolumn) + excelrow);
        row = sheet.getRow(cr.getRow());
        cell = row.getCell(cr.getCol()/*, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK*/);


        if (/*cell != null && */cell.getCellType() == CellType.NUMERIC) {
            return cell.getNumericCellValue();
        } else {
            return 0.0;
        }

    }


    public void putHashMapData() {
        namesLetters.put("Yuri", "B");
        namesLetters.put("Thierry", "C");
        namesLetters.put("Jennifer", "D");
        namesLetters.put("Béla", "E");
        namesLetters.put("Theodor", "F");
        namesLetters.put("David", "G");
        namesLetters.put("Yuliana", "H");
        namesLetters.put("Ariana", "I");
        namesLetters.put("Jonah", "J");
        namesLetters.put("Alina", "K");
        namesLetters.put("Thomas", "L");
        namesLetters.put("Bjarne", "M");
        namesLetters.put("Livia", "N");
        namesLetters.put("Till", "O");
        namesLetters.put("Jason", "P");
        namesLetters.put("Justus", "Q");
        namesLetters.put("Timofej", "R");
        namesLetters.put("Nikolai", "S");
        namesLetters.put("An", "T");
        namesLetters.put("Khoi", "U");
        namesLetters.put("Mai", "V");
        namesLetters.put("Florian", "W");
        namesLetters.put("Giuglio", "X");
        namesLetters.put("Fridtjof", "Y");
        namesLetters.put("Mark", "Z");
        namesLetters.put("Markus", "AA");
        namesLetters.put("Felix", "AB");
        namesLetters.put("Max", "AC");
        namesLetters.put("Daniil", "AD");
        namesLetters.put("Yared", "AE");

        namesNumber.put("Yuri", 2);
        namesNumber.put("Thierry", 3);
        namesNumber.put("Jennifer", 4);
        namesNumber.put("Béla", 5);
        namesNumber.put("Theodor", 6);
        namesNumber.put("David", 7);
        namesNumber.put("Yuliana", 8);
        namesNumber.put("Ariana", 9);
        namesNumber.put("Jonah", 10);
        namesNumber.put("Alina", 11);
        namesNumber.put("Thomas", 12);
        namesNumber.put("Bjarne", 13);
        namesNumber.put("Livia", 14);
        namesNumber.put("Till", 15);
        namesNumber.put("Jason", 16);
        namesNumber.put("Justus", 17);
        namesNumber.put("Timofej", 18);
        namesNumber.put("Nikolai", 29);
        namesNumber.put("An", 22);
        namesNumber.put("Khoi", 21);
        namesNumber.put("Mai", 22);
        namesNumber.put("Florian", 23);
        namesNumber.put("Giuglio", 24);
        namesNumber.put("Fridtjof", 25);
        namesNumber.put("Mark", 26);
        namesNumber.put("Markus", 27);
        namesNumber.put("Felix", 28);
        namesNumber.put("Max", 29);
        namesNumber.put("Daniil", 30);
        namesNumber.put("Yared", 31);

        numberLetter.put(0, "A");
        numberLetter.put(1, "B");
        numberLetter.put(2, "C");
        numberLetter.put(3, "D");
        numberLetter.put(4, "E");
        numberLetter.put(5, "F");
        numberLetter.put(6, "G");
        numberLetter.put(7, "H");
        numberLetter.put(8, "I");
        numberLetter.put(9, "J");
        numberLetter.put(10, "K");
        numberLetter.put(11, "L");
        numberLetter.put(12, "M");
        numberLetter.put(13, "N");
        numberLetter.put(14, "O");
        numberLetter.put(15, "P");
        numberLetter.put(16, "Q");
        numberLetter.put(17, "R");
        numberLetter.put(18, "S");
        numberLetter.put(19, "T");
        numberLetter.put(20, "U");
        numberLetter.put(21, "V");
        numberLetter.put(22, "W");
        numberLetter.put(23, "X");
        numberLetter.put(24, "Y");
        numberLetter.put(25, "Z");
        numberLetter.put(26, "AA");
        numberLetter.put(27, "AB");
        numberLetter.put(28, "AC");
        numberLetter.put(29, "AD");
        numberLetter.put(30, "AE");
        numberLetter.put(31, "AF");
        numberLetter.put(32, "AG");

        numberNames.put(2, "Yuri");
        numberNames.put(3, "Thierry");
        numberNames.put(4, "Jennifer");
        numberNames.put(5, "Béla");
        numberNames.put(6, "Theodor");
        numberNames.put(7, "David");
        numberNames.put(8, "Yuliana");
        numberNames.put(9, "Ariana");
        numberNames.put(10, "Jonah");
        numberNames.put(11, "Alina");
        numberNames.put(12, "Thomas");
        numberNames.put(13, "Bjarne");
        numberNames.put(14, "Livia");
        numberNames.put(15, "Till");
        numberNames.put(16, "Jason");
        numberNames.put(17, "Justus");
        numberNames.put(18, "Timofej");
        numberNames.put(19, "Nikolai");
        numberNames.put(20, "An");
        numberNames.put(21, "Khoi");
        numberNames.put(22, "Mai");
        numberNames.put(23, "Florian");
        numberNames.put(24, "Giuglio");
        numberNames.put(25, "Fridtjof");
        numberNames.put(26, "Mark");
        numberNames.put(27, "Markus");
        numberNames.put(28, "Felix");
        numberNames.put(29, "Max");
        numberNames.put(30, "Daniil");
        numberNames.put(31, "Yared");

        letterNames.put("B", "Yuri");
        letterNames.put("C", "Thierry");
        letterNames.put("D", "Jennifer");
        letterNames.put("E", "Béla");
        letterNames.put("F", "Theodor");
        letterNames.put("G", "David");
        letterNames.put("H", "Yuliana");
        letterNames.put("I", "Ariana");
        letterNames.put("J", "Jonah");
        letterNames.put("K", "Alina");
        letterNames.put("L", "Thomas");
        letterNames.put("M", "Bjarne");
        letterNames.put("N", "Livia");
        letterNames.put("O", "Till");
        letterNames.put("P", "Jason");
        letterNames.put("Q", "Justus");
        letterNames.put("R", "Timofej");
        letterNames.put("S", "Nikolai");
        letterNames.put("T", "An");
        letterNames.put("U", "Khoi");
        letterNames.put("V", "Mai");
        letterNames.put("W", "Florian");
        letterNames.put("X", "Giuglio");
        letterNames.put("Y", "Fridtjof");
        letterNames.put("Z", "Mark");
        letterNames.put("AA", "Markus");
        letterNames.put("AB", "Felix");
        letterNames.put("AC", "Max");
        letterNames.put("AD", "Daniil");
        letterNames.put("AE", "Yared");
    }




}
 
In deinen Programm arbeitest du doch mit Indexen „int“ werten von wo bis wo gehen die denn?

Du willst also für die Spalte Buchstaben benutzen so jetzt überlege welchen Index du übergibst und in welchen Buchstaben du es übersetzen musst .

Ich meine nicht den Index den die Excel Tabelle benutzt wenn du nicht mit Buchstaben arbeitest .
 
Also sie gehen von 2 bis 32 in den HashMaps. Es werden random 2 Werte zwischen 2 und 32 gewählt, für die Reihe und die Spalte. Dann wird der Wert für die Spalte mithilfe der HashMap in einen Buchstaben umgewandelt und an die CellReference übergeben. So bekomme ich dann den Wert für Spalte und Reihe als Double. Wenn jetzt z.B. 2 und 5 random gewählt wurde, heißt das, dass ich den Wert aus Reihe 2 und Spalte 5 haben will (Es wird aber der Wert aus Spalte 4 genommen wie ich in meiner Antwort davor beschrieben habe.) an sich funktionieren alle Zahlen für die Reihen, nur sobald ich Reihe 2 auslesen will, klappt es nicht und es kommt die NullPointerException.
 
numberLetter.put(0, "A"); A ist 1 in deinen internen Programm.

Das ist der Index von dir (intern) nicht der den Excel benutz du wandelst ihn ja zu dem Buchstaben.

Den Buchstaben sortiert Excel selber richtig ein.-
 
so wie es am Anfang auch in anderen Thread war war es richtig.

Du nutzt ja das numberLetter um deinen index in den Buchstaben zu wandeln.
 
Java:
namesNumber.put("Yuri", 2)

numberNames.put(2, "Yuri");
........
hätte bei der Tabelle mit frei Zeile 3 sein müssen

Ps wäre wohl auch nicht gegangen.
 
Zuletzt bearbeitet:
War es ja glaube ich. Jetzt ist es Zeile 2. Was ja dann auch richtig ist. Ich frage mich nur, warum ich die NullPointerException kriege wenn ich Zeile 2 auslesen möchte...
 
Zeile 227 -->
Java:
227    if (/*cell != null && */cell.getCellType() == CellType.NUMERIC) {
228         return cell.getNumericCellValue();
229     } else {
230         return 0.0;
231     }


Ich hatte das schonmal, und dort habe ich den Bereich, der jetzt auskommentiert ist genutzt. Das ist aber schlecht, da ich so ja praktisch nicht die Werte für Zeile 2 bekomme.
 
Ich würde vermuten das etwas mit deiner Excel Tabell nicht stimmt.
ich bekomme mit dem Code aus dem voherigen Thread immer die Werte die auch in der Tabell sind.

zeige mal deine Tabelle
 
Und wenn du mit dem Debugger an der Stelle anhältst was steht da in "cell"

und wo geht er hin in den If oder Else Zweig?
 
Zuletzt bearbeitet:
Ich weiß nicht genau wieso, aber irgendwie funktioniert mein Debugger nicht... Ich weiß noch, das er gesagt hat, dass cell null ist. Da momentan im If Zweig das auskommentiert ist, dass er bei null in den Else Zweig gehen soll, bleibt er beim If Zweig. Welche IDE benutzt du? Wenn du IntelliJ benutzt, kannst du mir vielleicht sagen was mit meinem Debugger nicht stimmt?
1650214858975.png

1650214895328.png
 
Du setzt einfache einen Brack Point und startest nicht mit dem grünen Pfeil sondern oben mit dem Käfer.


Unbenannt.png
 
Zuletzt bearbeitet:
Deine Zeile Spalten Auflösung ist schon nicht richtig
Du hast den Index Row 2
Collum 3

Und bekommst D2. Es muss aber C2 sein und nicht D2
3, 2 isr C2
Also schaue dein hashmaps an.

Ich beziehe mich auf Post #41
 
Hallo um nochmal etwas klarzustellen.

Du arbeitest bei der CellReference erstellung nicht mit den Indexen sondern mit einem String und da wir mit „A1“ angefangen.
Java:
public CellReference(String cellRef);
Start mit "A1"



Bei dem Constructor mit zwei int
Java:
public CellReference(int pRow, int pCol);
wird mit 0,0 angefangen.
 
Eine Ergänzung hierzu

Java:
CellReference ref = new CellReference("D4");
System.out.println(ref.getRow());
System.out.println(ref.getCol());

Ja hier kommt 3 raus.

Warum weil "getRow()" den Excel Index zurück gibt ,
das ist aber nicht dein interner Programm Index den du durch Radom Array erstellt .
Der geht von 2-31 „B – AE“

2 -> B
 
Ja, eigentlich schon. Ich habe das extra nochmal überprüft. Ich kann auch das richtige Dokument per Doppelklick über die IDE öffnen
du benutz ja nur einen String als Path denn kannst du in der IDE nicht öffnen.
String excelPath = "/Users/thierry/Desktop/Sitzplan/data/Sitzplan Sitznachbarn.xlsx";
FileInputStream inputstream = new FileInputStream(excelPath);
es werden wohl doch zwei unterschiedliche Dateien sein.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben