Um eine statistische Analyse durchzuführen, muss ich Werte in einer Spalte einer Excel-Tabelle extrahieren. Ich habe das Apache-POI-Paket zum Lesen von Excel-Dateien verwendet und es funktioniert einwandfrei, wenn über Zeilen iteriert werden muss. Allerdings konnte ich weder in der API ( Linktext ) noch über die Google-Suche etwas über das Abrufen von Spalten finden.
Da ich Max- und Min-Werte verschiedener Spalten abrufen und Zufallszahlen anhand dieser Werte generieren muss, besteht die einzige andere Option darin, Zeilen und Spalten zu durchlaufen, um die Werte abzurufen und einzeln zu vergleichen, was nicht der Fall ist klingt nicht so zeiteffizient.
Irgendwelche Ideen, wie man dieses Problem angeht?
Vielen Dank,
Excel-Dateien basieren eher auf Zeilen als auf Spalten. Die einzige Möglichkeit, alle Werte in einer Spalte abzurufen, besteht darin, die einzelnen Zeilen nacheinander zu betrachten. Es gibt keinen schnelleren Weg, um an die Spalten zu gelangen, da Zellen in einer Spalte nicht zusammen gespeichert werden.
Ihr Code möchte wahrscheinlich ungefähr so aussehen:
List<Double> values = new ArrayList<Double>();
for(Row r : sheet) {
Cell c = r.getCell(columnNumber);
if(c != null) {
if(c.getCellType() == Cell.CELL_TYPE_NUMERIC) {
valuesadd(c.getNumericCellValue());
} else if(c.getCellType() == Cell.CELL_TYPE_FORMULA && c.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC) {
valuesadd(c.getNumericCellValue());
}
}
}
Dann erhalten Sie alle numerischen Zellenwerte in dieser Spalte.
Ich weiß, es ist eine alte Frage, aber ich hatte das gleiche Problem wie dargestellt und musste es anders lösen.
Mein Code konnte nicht einfach angepasst werden und hätte eine Menge unnötiger Komplexität gewonnen. Deshalb habe ich beschlossen, die Excel-Tabelle zu ändern, indem ich Spalten und Zeilen wie hier erklärt vertauschte: ( http://www.howtogeek.com/howto/12366/ )
Sie können es auch mit VBA umkehren, wie hier gezeigt:
Konvertieren Sie eine Zeile mit Datenspalten in eine Spalte mit mehreren Zeilen in Excel 2007
Hoffe, es hilft jemandem da draußen
Wollte nur hinzufügen, falls Sie Überschriften in Ihrer Datei haben und nicht sicher sind, welchen Spaltenindex Sie haben, aber Spalten unter bestimmten Überschriften (Spaltennamen) auswählen möchten, z. B. können Sie so etwas ausprobieren
for(Row r : datatypeSheet)
{
Iterator<Cell> headerIterator = r.cellIterator();
Cell header = null;
// table header row
if(r.getRowNum() == 0)
{
// getting specific column's index
while(headerIterator.hasNext())
{
header = headerIterator.next();
if(header.getStringCellValue().equalsIgnoreCase("column1Index"))
{
column1Index = header.getColumnIndex();
}
}
}
else
{
Cell column1Cells = r.getCell(column1);
if(column1Cells != null)
{
if(column1Cells.getCellType() == Cell.CELL_TYPE_NUMERIC)
{
// adding to a list
column1Data.add(column1Cells.getNumericCellValue());
}
else if(column1Cells.getCellType() == Cell.CELL_TYPE_FORMULA && column1Cells.getCachedFormulaResultType() == Cell.CELL_TYPE_NUMERIC)
{
// adding to a list
column1Data.add(column1Cells.getNumericCellValue());
}
}
}
}