wake-up-neo.com

kann man mit dem Apache POI Spalten aus Excel-Dateien abrufen?

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,

15
posdef

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.

18
Gagravarr

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

0
sgirardin

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());
                        }
                    }

                }    
            }
0
qwerty