хороший способ представить значение таблицы Excel в Java
-
21-08-2019 - |
Вопрос
Учтите, что у меня есть лист Excel в приведенном ниже формате:
человек возрастФу 29
Бар 27
Теперь я хочу прочитать эти значения (используя POI HSSF) и должен обработать их.Каков наилучший способ сделать это?
Обратите внимание, что у меня нет объекта Person в моем приложении, поскольку значения, которые могут отображаться в таблице Excel, являются произвольными (т. Е.это может быть не имя и возраст человека).Итак, мне нужно использовать своего рода хэш-карту для хранения этих значений.В случае нескольких строк, хорошо ли иметь Список !?
Решение
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;
}
}
Другие советы
Если формат определен, создайте класс, который вмещает все эти поля.
Если формат не определен, передайте строки, или Списки, или даже DOM из преобразования excel в dom.У тебя нет выбора.Я бы рекомендовал просто придерживаться собственных объектов POI Row и Cell.
Да, вы не можете использовать map, если у вас есть несколько ключевых значений.И я не нашел какого-либо встроенного класса для решения этой проблемы.Вы можете попробовать написать какую-нибудь оболочку.Если вы не заботитесь о скорости, используйте простой 2D-массив, подобный этому:
String[][] filter = new String[initial width][initial height];
это может быть объект вместо строки;