在Java中表示Excel工作表值的好方法

时间:2009-05-13 11:16:57

标签: java excel dto apache-poi

请考虑我有以下格式的Excel表格:

年龄
富 29
酒吧 27

现在我想读取这些值(使用POI HSSF)并且必须处理它们。最好的方法是什么?

请注意,我的应用程序中没有Object Person,因为excel表中可能出现的值是任意的(即它可能不是人名和年龄)。所以,我需要使用某种HashMap来存储这些值。如果有多行,是否有一个List!?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

如果定义了格式,请创建一个容纳所有这些字段的类。

如果未定义格式,请从excel-to-dom转换中传递Row-s或Lists,甚至DOM。你没有选择。我建议只坚持使用POI的原生Row和Cell对象。

答案 2 :(得分:0)

是的,如果您有多个键值,则无法使用map。我没有为这个问题找到一些内置类。您可以尝试编写某种包装器。 如果您不关心速度,请使用简单的2D数组:

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

它可以是Object而不是String;