Question

Considérez que j'ai une feuille Excel au format ci-dessous :

personne âge
Foo 29
BAR 27

Maintenant, je veux lire ces valeurs (en utilisant POI HSSF) et dois les traiter.Quelle est la meilleure façon de procéder ?

Notez que je n'ai pas de personne objet dans mon application, car les valeurs qui peuvent apparaître dans la feuille Excel sont arbitraires (c'est-à-direce n'est peut-être pas le nom et l'âge de la personne).Donc, je dois utiliser une sorte de HashMap pour stocker ces valeurs.En cas de plusieurs lignes, est-il bon d'avoir une liste !?

Était-ce utile?

La solution

public class Grid {
    private Row headerColumns;
    private List<Row> dataRows;

    public Grid() {
        dataRows = new LinkedList<Row>();
    }

    public Grid(int rowCount) {
        dataRows = new ArrayList<Row>(rowCount);
    }

    public void addHeaderRow(List<String> headers) {
        this.headerColumns = new Row(headers);
    }

    public void addDataRow(List<String> data) {
        this.dataRows.add( new Row(data) );
    }

    public List<Row> getAllData() {
        List<Row> data = new ArrayList<Row>(1+dataRows.size());
        data.add(this.headerColumns);
        data.addAll(dataRows);
        return data;
    }

    public Row getHeaderColumns() {
        return headerColumns;
    }

    public List<Row> getDataRows() {
        return dataRows;
    }
}

class Row {
    private List<String> data;

    public Row(List<String> data) {
        this.data = data;
    }

    public void addColumn(String columnData) {
        data.add(columnData);
    }

    public List<String> getData() {
        return data;
    }
}

Autres conseils

Si le format est défini, créez une classe qui accueille tous ces champs.

Si le format n'est pas défini, transmettez les lignes, les listes ou même le DOM de la transformation Excel en Dom.Tu n'as pas le choix.Je recommanderais simplement de s'en tenir aux objets Row et Cell natifs de POI.

Oui, vous ne pouvez pas utiliser map si vous avez plusieurs valeurs clés.Et je n'ai pas trouvé de classe intégrée pour ce problème.Vous pouvez essayer d'écrire une sorte de wrapper.Si vous ne vous souciez pas de la vitesse, utilisez un simple tableau 2D comme celui-ci :

String[][] filter = new String[initial width][initial height];

il peut s'agir d'un objet au lieu d'une chaîne ;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top