boa maneira de representar um valor de planilha do Excel em Java
-
21-08-2019 - |
Pergunta
Considere que tenho uma planilha Excel no formato abaixo:
pessoa idadeFoo 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!?
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;