buena manera de representar un valor de hoja de Excel en Java
-
21-08-2019 - |
Pregunta
Considere que tengo una hoja de Excel en el siguiente formato:
persona edadFoo 29
Barra 27
Ahora quiero leer estos valores (usando POI HSSF) y tener que procesarlos.¿Cuál es la mejor manera de hacer eso?
Tenga en cuenta que no tengo una Persona Objeto en mi aplicación, porque los valores que pueden venir en la hoja de Excel son arbitrarios (es decir,puede que no sea el nombre de la persona ni su edad).Entonces, necesito usar algún tipo de HashMap para almacenar estos valores.En caso de que haya varias filas, ¿es bueno tener una Lista?
Solución
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;
}
}
Otros consejos
Si se define el formato, hacer una clase que acoge todos esos campos.
Si no se define el formato, pasar Fila-s alrededor, o listas, o incluso de la transformación DOM-excel-a dom. No tienes elección. Me gustaría recomendar sólo se adhieren a la fila y celulares objetos nativos de PDI.
Sí, no se puede utilizar el mapa Si tiene múltiples valores clave. Y yo no he encontrado alguna clase build-in para este problema. Usted puede tratar de escribir una especie de envoltura. Si no se preocupan de uso sencillo velocidad de matriz 2D como esto:
String[][] filter = new String[initial width][initial height];
puede ser objeto en lugar de cuerdas;