java.lang.ArrayIndexOutOfBoundsException Lesen von excel-Datei

Ich versuche im folgenden Lesen Sie Daten aus einem Excel-sheet

java.lang.ArrayIndexOutOfBoundsException Lesen von excel-Datei

Mit dem folgenden code

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

 public String readUsernameFromExcel() {
        File src = new File("C:/filepath.xls");

        try {

            Workbook wb = Workbook.getWorkbook(src);
            Sheet sh1 = wb.getSheet(0);
            Cell a2 = sh1.getCell(0, 2);
            data1 = a2.getContents().trim();


        } catch (BiffException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data1;

    }

So, wenn ich versuche die Zelle 0,1 ich abholen können die Benutzernamen 1000483 gut. Aber wenn ich versuche zu Lesen 0,2 und ich bekomme java.lang.ArrayIndexOutOfBoundsException: 2.

Was ich versuche zu tun ist, Lesen Sie Daten aus einem excel-Arbeitsblatt zurückgeben, da eine String und dann geben Sie bei “ login meiner Anwendung. Aber es scheint, wenn ich versuche 0,2 ich werde außerhalb von dem, was erwartet wird. Ich habe versucht, ein paar Dinge, wie eine for-Schleife

 for (int rows = 0; rows < sh1.getRows(); rows++) {
 Sheet sh1 = wb.getSheet(0);
            Cell a2 = sh1.getCell(0, 2);

}

Ich verstehen, die erste Zahl ist die Spalte und der zweite die Zeile. Ich verstehe auch, dass der code nicht in der Lage zu sehen, Vergangenheit 0,1. Ich bin einfach ratlos, wie es zu sehen, den rest der Platte, nachdem Sie versuchen, andere Lösungen des gleichen Problems.

  • sind Sie sicher, es ist nicht die erste Zeile und dann die Spalte?
  • Warum denkst du, das bewirkt, dass durch Selen??? was ist die Rolle von Selen hier??
  • Ich denke, die erste Spalte, dann die Zeile von dem, was ich lese, in eine andere Lösung, die über das gleiche Thema public Cell getCell(int Spalte, int Zeile)
  • Auch die einzige Verbindung mit Selen ist, wenn ich auf die Seite, und übergeben Sie die variable in der nach dem Lesen der Zelle, so dass das Problem vielleicht nicht mit Selen werde ich entfernen Selen aus dem Titel
  • welche Bibliothek verwendest du?
  • Ich bin mit import jxl jxl.Zelle; import jxl.Blatt; import jxl.Arbeitsmappe; import jxl.Lesen.biff.BiffException;
  • sind Sie sicher, dass das die Spalte 2? Ich denke, es ist 1, denn es startet bei 0, genau wie die Zeilen
  • 0,1 holt 1000483 so würde ich davon ausgehen 0,2 abholen würde 1000484. Ich glaube 2 ist die Zeile und die 0 ist die Spalte.

InformationsquelleAutor OhAye | 2016-07-27



2 Replies
  1. 1

    sh1.getRows() 3 gibt. Als Schleife beginnt von 0, sh1.getRows() muss verringert werden, um 1 (wie unten). Unten Schleife funktioniert einwandfrei und liefert den Wert richtig.

    import java.io.File;
    import java.io.IOException;
    
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    
    public class Excel {
    
        public static void main(String[] args) {
            File src = new File("c:/filepath.xls");
    
            try {
                String data1;
                Workbook wb = Workbook.getWorkbook(src);
                Sheet sh1 = wb.getSheet(0);
    
    
                for (int rows = 1; rows < sh1.getRows(); rows++)  {
                    for (int column = 0; column <= sh1.getColumns()-1; column++) {
    
                        Cell a2 = sh1.getCell(column, rows);
                        data1 = a2.getContents().trim();
                        System.out.println(data1);
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            } 
        }
    
    
    
    }

    Der obige code funktioniert, und holt sich das Datum ohne Fehler

    • Danke für deinen code, leider, die gibt mir immer noch eine Ausnahme. Allerdings, wenn ich es zu ändern (Zeilen, 1) es gibt mir 1000483. Der Druck für die Zeilen, wenn es scheitert, gibt mir 2.
    • Auch würde es nicht sein, die Spalte und dann die Zeile? Der Blick in die getCell Methode zeigt – public Cell getCell(int Spalte, int Zeile);
    • Ich habe geändert, die Schleife zu laufen als Spalte, dann Zeile. Aber dies davon abhängen, wie wir die Daten benötigen. Ich denke in deinem Fall sollte es wieder Benutzername und Passwort, so sollte es sein, die Spalte, dann Zeile
    • Nochmals vielen Dank 🙂 – So richtig funktioniert es, wenn Zeile = 1 und Spalte = 0. Wenn ich Zeile 2 I dont geben Sie die for-Schleife als .getRows ist immer 2. Ich denke mein Problem ist .getRows ist die Rückgabe immer 2 und wie bekomme ich das zu sehen, mehr von dem Blatt?
    • So wie es aussieht war ich einfach nur albern, ich habe mehr Daten in der Tabelle. Du hast mein problem gelöst also werde ich markiere ihn als gelöst. Vielen Dank für Ihre Hilfe!
  2. 0

    Verwende ich die gleichen Daten mit Ihnen, und ich konnte 1000484 Wert durch meinen code.

    Hier ist mein code :

    package com.jason.xls;
    
    import java.io.File;
    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    
    public class XlsParser {
    
        public static void main(String[] args) {
            final String path = "/home/coder/filepath.xls";
            System.out.println(readUserNameFromXls(path));
        }
    
        public static String readUserNameFromXls(final String path) {
            File file = new File(path);
            try {
                Workbook wb = Workbook.getWorkbook(file);
                Sheet sheet = wb.getSheet(0);
                Cell a2 = sheet.getCell(0, 2);
                return a2.getContents().trim();
            } catch (Exception e) {
                return null;
            }
          }
     }

    Ich download jxl.jar aus jxl.jar download hier

    Mein code Ergebnis : Code-Ergebnis-Bild

    • Das ist seltsam, die einzigen Unterschiede, die ich sehen kann, ist deine Methode null zurück und die mine gibt einen String zurück, aber ich würde trotzdem davon ausgehen, dass Ihr code, um sich zu beschweren über den outofbounds-exception. Es sei denn, es ist etwas anderes mit dem Excel?
    • Auch warum Sie nicht fangen die Biff Ausnahme?
    • Ich passe meinen code und fangen BiffException und IOException aus, aber bekomme ich auch die richtige Antwort, vielleicht ist meine xls-Datei ist Verschieden von Ihnen?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.