aus eine Exceltabelle lesen

juve

Grünschnabel
Guten Morgen,

ich will aus einer Exceldatei die Zellen auslesen. Ich habe diesen Code im Internet gefunden. Ich verstehe es nicht richtig es funktionieret aber, außer
1. In der Exceldatei sind mehrere Spalten belegt und ich kann mit diesem Code nur eine Spalte lesen. Kann ich die gelesenen Zahlen in einer Array speichern?
2. Die Zahlen die in der Spalten sind, sind mehr als 15stellige Zahle und ich will sie als ganze Zahlen haben also nicht mit 123E30 oder so

danke
Code:
import java.io.FileInputStream;
import java.text.DecimalFormat;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class readExcel
{
  private static String filename = "S:\\test.xls";

  public readExcel() {

    try {

// open the Excel Spreadsheet
      POIFSFileSystem fs =
          new POIFSFileSystem(new FileInputStream(filename));
      HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);

// grab the first sheet
      HSSFSheet sheet = hssfworkbook.getSheetAt(0);

// define objects for housing spreadsheet data
      HSSFCell currentStateCell = null;
      HSSFCell currentSalesCell = null;
      HSSFRow currentRow = sheet.getRow(0);

      int rowCount = 0;

// cycle through rows and display cell values
      while (currentRow != null) {
        currentRow = sheet.getRow(rowCount++);
        if (currentRow != null) {
          currentStateCell = currentRow.getCell( (short) 0);
          currentSalesCell = currentRow.getCell( (short) 1);
        }
        else
          break;
       // DecimalFormat dc = new DecimalFormat("$###,###.##");
        System.out.println(currentStateCell);
        //System.out.println(dc);
//      System.out.println(currentSalesCell.getNumericCellValue());

      }

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

  }
}
 

zeja

Erfahrenes Mitglied
ich will aus einer Exceldatei die Zellen auslesen. Ich habe diesen Code im Internet gefunden. Ich verstehe es nicht richtig es funktionieret aber, außer
1. In der Exceldatei sind mehrere Spalten belegt und ich kann mit diesem Code nur eine Spalte lesen. Kann ich die gelesenen Zahlen in einer Array speichern?
2. Die Zahlen die in der Spalten sind, sind mehr als 15stellige Zahle und ich will sie als ganze Zahlen haben also nicht mit 123E30 oder so

1. In ein Array geht sofern du weist wieviele Zeilen du auslesen willst. Wenn du das nicht weist solltest du das ganze lieber in einer ArrayList speichern.

2. getNumericValue gibt dir doch einen double zurück, da sollte nichts mit expontentdarstellung drinstehen.
 

juve

Grünschnabel
Ja ich habe es auskommentiert, weil ich NullPointerException bekomme. Ich habe mein Code so geändert, dass ich jede Zelle in ein Vector speichern kann. Ich bekomme allerdings immer noch Fehlermeldung wenn ich
HSSFCell cell = currentRow.getCell( (short) j).getNumericCellValue();
Schreibe


Code:
public class readExcel
{
  private static String filename = "S:\\test.xls";

  public readExcel() {
    int Zahl = 0;

    try {

// open the Excel Spreadsheet
      POIFSFileSystem fs =
          new POIFSFileSystem(new FileInputStream(filename));
      HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);

// grab the first sheet
      HSSFSheet sheet = hssfworkbook.getSheetAt(0);

// define objects for housing spreadsheet data
      HSSFCell currentStateCell = null;
      HSSFCell currentSalesCell = null;
      HSSFRow currentRow = sheet.getRow(0);

      int rowCount = 0;
      Vector vec = new Vector();
// cycle through rows and display cell values
      while (currentRow != null) {
        currentRow = sheet.getRow(rowCount++);
        if (currentRow != null) {
          for (int j = 0; j < currentRow.getPhysicalNumberOfCells(); j++) {
            HSSFCell cell = currentRow.getCell( (short) j);
  //  HSSFCell cell = currentRow.getCell( (short) j).getNumericCellValue();
            vec.add(cell);
          }
        }
        else
          break;
      }
  }
    catch (Exception e) {
      e.printStackTrace();
    }

  }
}
 

zeja

Erfahrenes Mitglied
Was sagt denn deine NullPointerException sonst noch so?

In jedem Fall gibt getNumericCellValue ein double zurück und keine Cell.
 

juve

Grünschnabel
einfach nur java.lang.NullPointerException.
ist sowas nicht zulässig?
double x = currentRow.getCell( (short) j).getNumericCellValue();
 

zeja

Erfahrenes Mitglied
Die NullPointerException wird auch einen StackTrace haben und in dem steckt die wichtige Information wo eigentlich das Problem liegt.
 

juve

Grünschnabel
ich habe mein Code geändert und es funkti. jetzt. Danke euch
Code:
 public readExcel() {
    int Zahl = 0;
Vector vec = new Vector();
    try {

// open the Excel Spreadsheet
      POIFSFileSystem fs =
          new POIFSFileSystem(new FileInputStream(filename));
      HSSFWorkbook hssfworkbook = new HSSFWorkbook(fs);

// grab the first sheet
      HSSFSheet sheet = hssfworkbook.getSheetAt(0);

// define objects for housing spreadsheet data
      HSSFCell currentStateCell = null;
      HSSFCell currentSalesCell = null;
      HSSFRow currentRow = sheet.getRow(0);

      int rowCount = 0;

// cycle through rows and display cell values
      while (currentRow != null) {
        currentRow = sheet.getRow(rowCount++);
        if (currentRow != null) {
          for (int j = 0; j < currentRow.getPhysicalNumberOfCells(); j++) {
          //Jede Zelle in ein Vector ohne exp. speichern
            long cell =(long) currentRow.getCell( (short) j).getNumericCellValue();
            vec.add(""+cell);
          //  System.out.println(vec);
          }
        }
        else
          break;
      }
  }
    catch (Exception e) {
      e.printStackTrace();

    }
    for (int i = 0 ;i<vec.size();i++)
      System.out.println(vec.get(i));


  }