Immer bestimmte Daten aus einem excel-sheet JAVA

Ich versuche bestimmte Daten aus einem excel-sheet werden Die Daten dynamisch. Es kann alles sein, wirklich. Die Spaltenüberschriften sind die einzigen Dinge, die ich verwenden können, für die es Platzhalter gibt, aber die überschrift der Spalte Positionen kann variieren in dem Blatt.

Ich habe zum Beispiel ein Blatt wie dieses :

|Vorname| Name| Wert|

|bar | poo | 5|

|baz | foo | 7|

Aber zum Beispiel brauche ich zur Durchquerung des Blattes, um die Spalte Nachname und dann, wenn ich finde, Vorname = 'poo' muss ich dann ziehen, um den entsprechenden Wert, welcher in das Blech wird in die nächste Spalte, sondern diese dynamisch ist. Die Familiennamen und die Spalte Wert nicht immer nebeneinander, Sie können in jeder position an der Spitze. Aber wenn ich eine bestimmte 'Sache' in die Spalte Nachname muss ich ziehen, Ihren Wert.

Ich habe es geschafft, traverse durch das Blatt und speichern alle Daten in einem 2d-array Und Darstellung dieser Daten. aus der Forschung ich getan , dies ist kein effizienter Ansatz, da die Traversierung und die Speicherung von großen Daten aus Blätter können eine Menge Speicher. Ich habe gelesen, dass Sie Lesen können über ein excel-sheet und statt der Speicherung dieser Werte in ein array schreiben Sie diese sofort auf einem anderen Blatt, wenn Sie mit einer bestimmten Bedingung. ZB: (pseudo) If(columnheader == Vorname && Nachname == foo), dann bekommen Sie entsprechenden Wert, dann Schreibe diesen Wert in ein neues Blatt.

Okay also meine Fragen sind :

1.Wie kann ich erreichen, Durchlaufen die Blatt nicht speichern in einem array und schreiben Sie Sie direkt auf einem anderen Blatt, wenn Sie mit einer Bedingung?

2.Von dem code habe ich unten wie kann ich erreichen, Sortierung durch die Daten im array und finden, wenn Vorname = foo bekommen den entsprechenden Wert?

Wie ich sagte, die Daten im Tabellenblatt ist dynamisch, außer für die Spaltenüberschriften, aber es gibt Positionen als überschriften sind dynamisch.

Sorry für den langen Beitrag , jede Hilfe wird sehr geschätzt.

JS:

package demo.poi;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


public class test  {

    public static void main(String[] args) throws Exception {

        File excel = new File("test.xlsx");
        FileInputStream fis = new FileInputStream(excel);

        XSSFWorkbook wb = new XSSFWorkbook(fis);
        XSSFSheet ws = wb.getSheetAt(0);
        ws.setForceFormulaRecalculation(true);

        int rowNum = ws.getLastRowNum() + 1;
        int colNum = ws.getRow(0).getLastCellNum();
        int surnameHeaderIndex = -1, valueHeaderIndex = -1;

        //Read the headers first. Locate the ones you need
        XSSFRow rowHeader = ws.getRow(0);
        for (int j = 0; j < colNum; j++) {
            XSSFCell cell = rowHeader.getCell(j);
            String cellValue = cellToString(cell);
            if("SURNAME".equalsIgnoreCase(cellValue)) {
                surnameHeaderIndex = j;
            } else if("VALUE".equalsIgnoreCase(cellValue)) {
                valueHeaderIndex = j;
            }
        }

        if(surnameHeaderIndex == -1 || valueHeaderIndex == -1) {
            throw new Exception("Could not find header indexes\nSurname : " + surnameHeaderIndex + " | Value : " + valueHeaderIndex);
        }
        //createnew workbook
        XSSFWorkbook workbook = new XSSFWorkbook(); 		
		//Create a blank sheet
		XSSFSheet sheet = workbook.createSheet("data");
		
        for (int i = 1; i < rowNum; i++) {
            XSSFRow row = ws.getRow(i);
           row = sheet.createRow(rowNum++);
            String surname = cellToString(row.getCell(surnameHeaderIndex));
            String value = cellToString(row.getCell(valueHeaderIndex));
            int cellIndex = 0;
            row.createCell(cellIndex++).setCellValue(surname);
            row.createCell(cellIndex++).setCellValue(value);
            

            
        }
        FileOutputStream fos = new FileOutputStream(new File("test1.xlsx"));
        workbook.write(fos);
        fos.close();
    }

    public static String cellToString(XSSFCell cell) {

        int type;
        Object result = null;
        type = cell.getCellType();

        switch (type) {

        case XSSFCell.CELL_TYPE_NUMERIC:
            result = BigDecimal.valueOf(cell.getNumericCellValue())
                    .toPlainString();

            break;
        case XSSFCell.CELL_TYPE_STRING:
            result = cell.getStringCellValue();
            break;
        case XSSFCell.CELL_TYPE_BLANK:
            result = "";
            break;
        case XSSFCell.CELL_TYPE_FORMULA:
            result = cell.getCellFormula();
        }

        return result.toString();
    }
}

  • Geben Sie ein vollständiges Beispiel und die gewünschte Ausgabe. Sie erwähnen Sortieren, aber ich weiß nicht genau verstehe, was du meinst.
  • hi, Also im Grunde aus, dass die excel-Tabelle. Ich will zu Durchlaufen und finden Sie bestimmte Werte. Zum Beispiel jetzt, ich habe alle Daten in das array muss ich Sachen machen, mit Z.B.: Den Ausgang im Blick ist für einmal finde ich die Spalte Nachname, Finden Sie den Wert "foo" und wenn Sie finden, foo , gehen Sie auf die Spalte Wert und Holen Sie sich die entsprechende Nummer. Wenn Sie einen Blick auf das demo-sheet, der Wert für "foo" ist "7". Aber wie bekomme ich den Speicherort von " foo " und beziehen sich auf den Wert 7, wenn die Kopfzeile der Spalte Positionen sind dynamisch?
InformationsquelleAutor JavaPotter | 2015-03-15
Schreibe einen Kommentar