wie zu Lesen einen Wert aus der Spalte Name in Excel, Java
Wie kann ich Lesen Sie den Wert im Zusammenhang mit Bestimmten Spaltennamen mit Apache POI in Excel (xlsx).
Spaltennamen ist mein 1. Zeile der Excel-Tabelle .
Wert ist die Zeile, Die Y als Wert der Zelle .
Mein Input ist nur die Spalte Name ,
Ich brauche den Wert für den Namen der Spalte und Zeile hat den Wert "Y"
hier ich wenn geben Sie der Spalte den Namen "Namen" , sollte es wieder Wert ist "Jose"
Und "Alter" sollte es wieder 23
Habe ich versucht und gefunden, zwei codes mit verschiedenen loop-system , aber immer einige Fehler
public static void main(String[] args) throws Exception {
File file = new File("D:\\xcel.xlsx");
FileInputStream inputStream = new FileInputStream(file);
Workbook wb = new XSSFWorkbook(inputStream);
Sheet sh = wb.getSheet("Sheet1");
// Find the Column number Which has column name and row number 0
Row row1 = sh.getRow(0);
int colNum = -1;
for (int i = 0 ;i<=row1.getLastCellNum();i++){
Cell cell1 = row1.getCell(i,Row.CREATE_NULL_AS_BLANK);
String cellValue1 = cell1.getStringCellValue();
if ("Employee".equals(cellValue1)){
colNum = i ;
break;}
}
// Find the Row number Which is "Y" and column number 1
int rowNum = -1;
for (int j = 0 ;j<=sh.getLastRowNum()+1;j++){
Row row2 = sh.getRow(j);
Cell cell2 = row2.getCell(1,Row.CREATE_NULL_AS_BLANK);
String cellValue2 = cell2.getStringCellValue();
if ("Y".equals(cellValue2))
{ rowNum = j ;
break;}
}
Row r = sh.getRow(rowNum);
String val = r.getCell(colNum).getStringCellValue();
System.out.println("Row number is "+rowNum);
System.out.println("Last row number :"+sh.getLastRowNum());
System.out.println("Column number is "+colNum);
System.out.println("Last Column number :"+sh.getRow(0).getLastCellNum());
System.out.println("Value is "+val);
}
Wenn ich den oben stehenden code ausführen , bekomme ich die Spalte mit der Nummer, selbst wenn es eine leere Zelle vorhanden ist, bevor es ,
aber für die Zeile , wenn es eine leere Zelle vorhanden sind, bevor Sie es , bekomme ich die Fehlermeldung Exception in thread "main" java.lang.NullPointerException
Aber es funktioniert gut, wenn es keine schwarzen Zelle.
Wieder in diese folgenden code , ich bekomme keine Fehler
Aber wenn meine Spalte name vorhanden ist, in der letzten Zelle ,dann wird die Letzte Handy-Nummer und meine Spalte Nummer sollte gleich sein , aber ich bekommen meine Spalte Anzahl ist um eins kleiner als die Letzte Zelle Nummer .
Aber für die Zeilennummer , seine feine , bin ich immer der gleichen Nummer .
Dieses problem ist für den ersten code, der auch
public static void main(String[] args) throws Exception {
File file = new File("D:\\xcel.xlsx");
FileInputStream inputStream = new FileInputStream(file);
Workbook wb = new XSSFWorkbook(inputStream);
Sheet sh = wb.getSheet("Sheet1");
// Find the Column number Which has column name and row number 0
Row row1 = sh.getRow(0);
int colNum = -1;
for (Cell cell : row1) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
if (cell.getRichStringCellValue().getString().trim().equals("Employee")) {
colNum = cell.getColumnIndex(); }
}
}
// Find the Row number Which is "Y" and column number 1
int rowNum = -1;
for (Row row : sh) {
for (Cell cell : row) {
if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
if (cell.getRichStringCellValue().getString().trim().equals("Y")) {
rowNum = row.getRowNum(); }
}
}
}
//Get the required value
Row r = sh.getRow(rowNum);
String val = r.getCell(colNum).getStringCellValue();
System.out.println("Row number is "+rowNum);
System.out.println("Last row number :"+sh.getLastRowNum());
System.out.println("Column number is "+colNum);
System.out.println("Last Column number :"+sh.getRow(0).getLastCellNum());
System.out.println("Value is "+val);
- Zelle.getCellType() ist veraltet, da der apache poi version 3.17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Apache POI unterstützt nicht diese Art von Ding aus der Tasche.
Sie müssen möglicherweise Lesen Sie Ihre EXCEL-Datei in eine abstrakte Struktur Ihrer eigenen Arbeit.
Ich würde empfehlen, so etwas wie ein Dokument-Modell, das enthält den Header und den Inhalt.
Wenn Ihr Zweck ist ausschließlich das sammeln der Werte von Spalte Namen, mit einem bit der Daten-Redundanz können Sie speichern jeden Wert als ein map-Eintrag von {Spalte-name: - Zeile Wert} in eine Liste mit allen Zeilen.
Wenn mit einer solchen Struktur können Sie leicht die Suche durch die Werte in der Spalte.
Beispiel:
Zeilen können wir so etwas wie dieses:
Beispiel, wie analysieren:
Beispiel wie zu verwenden:
Vollständigen mock-up ist hier
Ist es das, was du suchst?
Ich muss Sie warnen, dies ist nicht eine gute Idee, Lesen Sie die gesamte excel-jedes mal, wenn Sie benötigen, um die Suche auf Sie.