Wie kann ich einen Wert für bestimmte Spaltennamen mit Apache POI in Excel (xlsx) lesen?Wie kann ich einen Wert aus dem Spaltennamen in Excel in Java lesen?
Spaltennamen ist meine erste Zeile der Excel-Tabelle. Wert ist die Zeile mit Y als Zellenwert.
Meine Eingabe ist nur Spaltenname, Ich brauche Wert für die Spaltennamen und Row, den Wert „Y“ hat
hier ich, wenn Spaltennamen als „Name“ geben, sollte es zurückgeben Wert „Jose“ und „Alter“ soll es 23
zurückkehrt ich habe versucht, und zwei Codes mit unterschiedlichem Loop-System gefunden, aber 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);
}
bekommen
Wenn ich den obigen Code ausführen, bekomme ich die Spaltennummer, auch wenn es eine leere Zelle ist, bevor es vorhanden ist,
aber für die Reihe, wenn es eine leere Zelle vorhanden, bevor es ist, ich Fehler Ausnahme erhalten in thread "main" java.lang.NullPointerException Aber es funktioniert gut, wenn es keine schwarze Zelle gibt.
Auch in diesem Code unten, ich erhalte keine Fehler
Aber wenn meine Spaltennamen in letzter Zelle ist, dann letzte Zellennummer und meine Spaltennummer sollen gleich sein, aber ich meine Spaltennummer bekommen ist eins weniger als die letzte Zellennummer.
Aber für Zeile Nummer, es ist in Ordnung, ich bekomme die gleiche Nummer.
Dieses Problem gilt auch für den ersten Code ist
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);
Hallo Rofgar, vielen Dank für den Code. – psaikia
können wir nicht einfache Logik in poi wie verwenden 1 .loop die erste Zeile, um Spalte Nummer mit angegebenen Spaltennamen zu erhalten. 2. Schleife die Zeile mit der angegebenen Spalte, in der Y vorhanden ist, um die Zeilennummer zu finden. 3. dann erhalten Zelleninhalt mit Zeilen- und Spaltennummer – psaikia
Sicher können Sie. Es ist nur ein Beispiel. – Rofgar