Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как лучше реализовать / 5 сообщений из 5, страница 1 из 1
08.01.2015, 19:51
    #38850386
friz777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше реализовать
Есть сервис по загрузи данных из Excel
лист в excel имеет такую структуру
ABCDE1Type20132013Q12013Q223Metric_a5.34.34.443.25.24.156Metric_b12.12.3

На выходе нужна коллекция примерно такого типа:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Metric{
double value;
String metricType;
String qYear;
public Metric(double value,String metricType,String qYear);
}
.....
List<Metric> list = new ArrayList();
list.add(new Metric(5.3,"Metric_a","2013"));
list.add(new Metric(4.3,"Metric_a","2013Q1"));
list.add(new Metric(4.4,"Metric_a","2013Q2"));
list.add(new Metric(3.2,"Metric_a","2013"));
list.add(new Metric(5.2,"Metric_a",'2013Q1"));
list.add(new Metric(4.1,"Metric_a","2013Q2"));
list.add(new Metric(1.0,"Metric_b","2013"));
list.add(new Metric(2.1,"Metric_b","2013Q1"));
list.add(new Metric(2.3,"Metric_b","2013Q2"));



Т.е. на каждое число в таблице экселя свой объект.

Вопрос в том как лучше привязать ячейки экселя к нужным полям (маппинг сделать)?

Сейчас это сделал так:
1) Создал класс, который описывает нужные номера ячеек
Код: java
1.
2.
3.
4.
5.
class ExtractParam{
Integer headerLineIndex;
List<Integer> linesIndex;
List<Integer> colsIndex;
}


2) В спринг контексте создал следующие(т.е. создал map с пропертями):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<util:List id="metricA_lines">
<value>3</value>
<value>4</value> 
</list>
<util:List id="metricB_lines">
<value>6</value>
</list>
<util:List id="metricA_cols">
<value>3</value>
<value>4</value> 
<value>5</value> 
</list>
<util:List id="metricB_cols">
<value>3</value>
<value>4</value> 
<value>5</value>
</list>
<bean id="metricA_ExtractParam" class="ExtractParam">
 <constructor-arg name="headerLineIndex" value="1"/>
 <constructor-arg name="linesIndex" ref="metricA_lines"/>
 <constructor-arg name="colsIndex" ref="metricA_cols"/>
</bean>
<bean id="metricB_ExtractParam" class="ExtractParam">
 <constructor-arg name="headerLineIndex" value="1"/>
 <constructor-arg name="linesIndex" ref="metricB_lines"/>
 <constructor-arg name="colsIndex" ref="metricB_cols"/>
</bean>

<util:Map id="metrics">
   <entry key="Metric_a" value_ref="metricA_ExtractParam"/>
   <entry key="Metric_b" value_ref="metricB_ExtractParam"/>
</map>



И потом в коде бегу по этой map и вычитываю нужные ячейки. Как это можно реализовать красивее? Может есть паттерн? Спасибо
...
Рейтинг: 0 / 0
08.01.2015, 20:11
    #38850402
scf
scf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше реализовать
Имхо ты всё слишком усложняешь. Можно сделать вот так например:
Заранее извиняюсь за форматирование и нехватку фигурных скобок

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class Sheet {
   Double getDouble(int row, int col);
   String getString(int row, int col);
   int getRowCount();
   int getColumnCount();
}

for (int row = 3 ; row < sheet.getRowCount() ; row++)
  for (int col = 4 ; col < sheet.getColumnCount() ; column++) {
    Double v = sheet.getDouble(row, col);
    if (v != null) addMetric(v, sheet.getString(1, col), getMetricName(row));
  }

String getMetricName(int row) {
  while (sheet.getString(row, 2).isEmpty()) {
    row--;
  }
  return sheet.getString(row, 2);
}
...
Рейтинг: 0 / 0
08.01.2015, 20:21
    #38850407
friz777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше реализовать
scf,
в целом как вариант.. но реальная структура экселя сложнее, чем я тут привел. В любом случае попробую применить. Спасибо за ваш вариант :)
...
Рейтинг: 0 / 0
09.01.2015, 12:56
    #38850693
andrej59
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше реализовать
friz777

Для работы с excel есть мощная библиотека:
http://poi.apache.org/index.html

Попробуйте её использовать, может понравиться.
...
Рейтинг: 0 / 0
09.01.2015, 17:35
    #38850916
friz777
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как лучше реализовать
andrej59,

ей и пользуемся :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как лучше реализовать / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]