Pergunta

Considere que tenho uma planilha Excel no formato abaixo:

pessoa idade
Foo 29
Bar 27

Agora quero ler esses valores (usando POI HSSF) e processá-los.Qual é a melhor maneira de fazer isso?

Observe que não tenho uma pessoa-objeto em meu aplicativo, porque os valores que podem vir na planilha do Excel são arbitrários (ou seja,pode não ser o nome e a idade da pessoa).Então, preciso usar algum tipo de HashMap para armazenar esses valores.No caso de várias linhas, é bom ter uma Lista!?

Foi útil?

Solução

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

Outras dicas

Se o formato estiver definido, crie uma classe que acomode todos esses campos.

Se o formato não estiver definido, passe linhas, ou listas, ou mesmo DOM da transformação do Excel para Dom.Você não tem escolha.Eu recomendo apenas usar os objetos Row e Cell nativos do POI.

Sim, você não pode usar map se tiver vários valores-chave.E não encontrei nenhuma classe integrada para esse problema.Você pode tentar escrever algum tipo de wrapper.Se você não se importa com velocidade, use um array 2D simples como este:

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

pode ser Object em vez de String;

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top