2013-10-14 5 views
0

У меня есть лист первенствовать, который выглядит следующим образом:Запись строки в новый Excel лист

enter image description here

Как вы можете видеть в таблице есть более чем одно значение foe для имени.

Я хочу, чтобы создать для каждого уникальногоName элемента нового первенствовать лист, который выглядит следующим образом:

enter image description here

enter image description here

Я использую apache poi и я могу прочитать лист первенствовать и Я сохранил отличительные значения colume в arraylist. Тем не менее, я борюсь с алгоритмом, чтобы сохранить каждую уникальную строку элементов имен на новом листе.

Буду признателен за ваш ответ !!!

UPDATE

Пытался реализовать так:

for (Row r : sheet) { 
      Cell c = r.getCell(4); 
      c.setCellType(Cell.CELL_TYPE_STRING); 
//   System.out.println(c.getStringCellValue().toString()); 
      if (c.getStringCellValue().equals(nameList.contains(c.getRowIndex()))) { 
       System.out.println(sheet.getRow(r.getRowNum())); 
       System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); 

      } 
     } 

Однако, это не работает ...

+1

Я предлагаю вам взять имя и перебрать его через ArrayList. Если имена равны, вы сохраняете это имя в другом списке и удаляете его из оригинала. Когда список окончен, вы создаете новый лист и начинаете с самого начала. – qiGuar

ответ

1

Вы можете прочитать все строки, по одному и создать Карта, которая может быть заполнена, где key является firstname, а value будет list of objects (объект содержит данные, считанные из каждой строки в e Xcel).

После выполнения каждой записи на карте создайте новый лист и запишите список объектов, соответствующих ключу на карте в соответствующем листе.

У меня нет всех настроек, чтобы показать пример в POI, но поскольку вы используете это, я могу показать вам, где, что можно сделать.

class SomeObject { // This class contains all the details a row in an excel can contain} 

Map<String, List<SomeObject>> myMap = new HashMap<String, List<SomeObject>>(); // Create your hashmap 

For every row read from the excel using POI { 
    1. Create a new SomeObject with the data read from the row 
     a. if the firstname value already exists in myMap, then add this new object to the already existing list for that key 
     b. if not present, create a new arraylist, add this element and put a new entry in map with firstname and list 
    2. continue this, till there are more rows to be read. 
} 

После того, как это делается, и карта полностью заполняется,

For every Entry in the map { 
    1. Create a new sheet 
    2. Write all the objects present as the value for this Entry, to the sheet. 
    3. Close the sheet 
    4. Continue till there are more entries in the map 
} 

Я не мог разработать алгоритм больше, чем это. Он должен помочь вам получить ваше решение (вам нужно обработать часть кодирования).

+0

Не могли бы вы показать пример в «apache poi»? – mrquad

+0

Также см. Мое обновление, о моей реализации ... – mrquad

+1

Проверьте правильность ответа. Вам нужно будет сделать кодирование самостоятельно. – SudoRahul

Смежные вопросы