在新的Excel工作表中写入行

时间:2013-10-14 11:00:54

标签: java eclipse excel vba apache-poi

我有一张excel表,看起来像这样:

enter image description here

正如您在表格中看到的,名称有多个值foe

我想为每个唯一 Name元素创建一个新的Excel工作表,如下所示:

enter image description here

enter image description here

我正在使用apache poi,我可以阅读excel表格,并在arraylist中保存了colume的不同值。但是,我正在使用算法来保存新工作表中的每个唯一名称元素行。

我很感激你的回答!!!

更新

试图像那样实现它:

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 个答案:

答案 0 :(得分:1)

您可以逐个阅读所有行并创建一个地图,可以填充keyfirstnamevaluelist of objects的地方(对象包含从excel中的每一行读取的详细信息。

完成后,对于地图中的每个条目,创建一个新工作表,并在相应工作表中的地图中写下与该关键字对应的对象列表。

我没有设置所有设置以显示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
}

我无法详细说明算法。它应该可以帮助您获得解决方案(您需要处理编码部分)。