powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как лучше реализовать
5 сообщений из 5, страница 1 из 1
Как лучше реализовать
    #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
Как лучше реализовать
    #38850402
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
Как лучше реализовать
    #38850407
friz777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
scf,
в целом как вариант.. но реальная структура экселя сложнее, чем я тут привел. В любом случае попробую применить. Спасибо за ваш вариант :)
...
Рейтинг: 0 / 0
Как лучше реализовать
    #38850693
andrej59
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
friz777

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

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

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


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