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

  • Sitzplan Sitznachbarn Kopie.xlsx.zip
    11 KB · Aufrufe: 6
  • 1650193086372.png
    1650193086372.png
    27 KB · Aufrufe: 4
  • 1650193190677.png
    1650193190677.png
    12,4 KB · Aufrufe: 8
Y

yfons123

Gast
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
 
Y

yfons123

Gast
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
 

Tiago1234

Mitglied
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...
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

Tiago1234

Mitglied
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.
 

Tiago1234

Mitglied
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");
    }




}
 

Jw456

Top Contributor
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 .
 

Tiago1234

Mitglied
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.
 

Jw456

Top Contributor
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.-
 

Jw456

Top Contributor
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.
 

Jw456

Top Contributor
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:

Tiago1234

Mitglied
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...
 

Tiago1234

Mitglied
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.
 

Jw456

Top Contributor
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
 

Jw456

Top Contributor
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:

Tiago1234

Mitglied
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
 

Jw456

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


Unbenannt.png
 
Zuletzt bearbeitet:

Tiago1234

Mitglied
Ja, eigentlich schon. Ich habe das extra nochmal überprüft. Ich kann auch das richtige Dokument per Doppelklick über die IDE öffnen.
 

Jw456

Top Contributor
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
 

Jw456

Top Contributor
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.
 

Jw456

Top Contributor
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
 

Jw456

Top Contributor
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Gibt es eine saubere Dokumentation von Jfoenix? Allgemeine Java-Themen 1
T Verschachtelte For-Schleife gibt falschen Wert zurück, Abbruchbedingung evtl. falsch? Allgemeine Java-Themen 9
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
F Gibt es mittlerweile eine Alternative zu DaisyDiff Allgemeine Java-Themen 2
Jose05 Gibt es einen Nachteil bei dem JDK 8? Allgemeine Java-Themen 7
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
M Warum gibt es Unterschiedliche Kommentar Zeichen Allgemeine Java-Themen 15
Tobero Eclipse Window builder gibt es da sowas wie @ignore? Allgemeine Java-Themen 1
pkm javax.script.ScriptEngineManager gibt mir keine Engine Allgemeine Java-Themen 4
M Openjdk - gibt es auch eine Openjre? Allgemeine Java-Themen 7
Zrebna Gibt es eine Möglichkeit eine NPE zu vermeiden, wenn null returned wird? Allgemeine Java-Themen 3
S Gibt es eine Moeglichkeit die Runtime Ausführung zu analysieren..? Allgemeine Java-Themen 7
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
F Überprüfen ob es Überschneidungen von Uhrzeiten (vom Typ Calendar) gibt Allgemeine Java-Themen 10
M Gibt es eine API die den aktuellen Wert eines Indikators beim Trading zurückgibt? Allgemeine Java-Themen 7
X Collections Gibt es eine Klasse welche die Vorteile von List und HashMap vereint, aber konstante Laufzeit (O(1)) hat in Java? Allgemeine Java-Themen 4
LimDul Spezifkation, wann es deprecation Warnings gibt Allgemeine Java-Themen 1
C Variablen == gibt immer false aus. Allgemeine Java-Themen 2
E gibt es BigDouble in Java ? Allgemeine Java-Themen 14
S Gibt es eigentlich Java Source Code Interpreter..? Allgemeine Java-Themen 13
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
R JDK installieren Gibt es ab 2019 überhaupt noch Java? Allgemeine Java-Themen 6
P JSpinner gibt leeren Wert zurück Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
N Gibt es etwas allgemeineres as Object? Allgemeine Java-Themen 16
T Input/Output Konsole gibt trotz printf keine Umlaute aus Allgemeine Java-Themen 17
H NetBeans geotools 15 oder 16 - welche Abhängingkeiten gibt es? Welche Jars brauche ich? Allgemeine Java-Themen 4
P Prüfen ob es Variable mit Namen gibt der als String übergeben wird Allgemeine Java-Themen 7
S Welche Java Techologien gibt es fürs Frontend Allgemeine Java-Themen 4
V Gibt es eine Möglichkeit die Internet auslastung mit Java auszulesen Allgemeine Java-Themen 11
L Gibt es in Java einen Property Editor? Allgemeine Java-Themen 2
S gibt testText nicht aus Allgemeine Java-Themen 3
R Es gibt keine dummen Fragen (hab ich mal gehört) Allgemeine Java-Themen 11
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
L Konsole gibt Smileys aus Allgemeine Java-Themen 3
K Gepacktes Jar-File gibt beim Doppelklick eine Exception aus Allgemeine Java-Themen 4
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
G Threads Gibt es eine Möglichkeit des Nichtblokierens? Allgemeine Java-Themen 5
C Vergleich von Enums gibt inkorrekte Werte Allgemeine Java-Themen 6
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
J Eclipse Elipse gibt mir keine Vorschläge mehr :( Allgemeine Java-Themen 6
G Gibt es so eine SortedMap? Allgemeine Java-Themen 21
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
J Warum gibt es keinen Webbrowser auf Java-Basis? Allgemeine Java-Themen 8
E Gibt es Befehle für Kursor auf Konsole ? Allgemeine Java-Themen 3
J Logger gibt nicht alle Level aus Allgemeine Java-Themen 3
B Gibt es einen Unterschied zwischen Java 1.2 und Java 2? Allgemeine Java-Themen 7
J Calendar gibt falsche Wochenanzahl zurück Allgemeine Java-Themen 3
E Gibt es so etwas wie einen Windows Listener? Allgemeine Java-Themen 6
M Gibt es ein Jar - das alle Componente Automatisch anpasst? Allgemeine Java-Themen 14
R Gibt es eine JVM, die besser mit dem Speicher umgeht? Allgemeine Java-Themen 7
G Jarfile gibt keine Textnachrichten aus Allgemeine Java-Themen 2
S [1/2done] Woher bekommt man libarys die es erst ab 1.6 gibt. Allgemeine Java-Themen 10
G Gibt es etwas ähnliches wie den ReadKey bei Pascal? Allgemeine Java-Themen 3
D Gibt es indizierte Arrays in Java? Allgemeine Java-Themen 3
S Decimalformat gibt falsche Werte aus Allgemeine Java-Themen 3
G Da Jikes nicht mit java 5 geht, gibt es eine andere. Allgemeine Java-Themen 4
M Gibt es eigentlich einen Standalone-Java-ICQ-clone Allgemeine Java-Themen 19
M Gibt es ein Foren-System, dass in Java programmiert ist? Allgemeine Java-Themen 51
N char.At gibt Zeichenkette aus. aber leider 2x Allgemeine Java-Themen 10
G was gibt es für mögliche datenbanken? Allgemeine Java-Themen 6
TRunKX Gibt es ne fertige Java Funktion die Dateien vergleicht? Allgemeine Java-Themen 4
S auf einmal gibt es einen fehler. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben