Java ApachePOI:要遍历excel列并汇总下一列中的相应值吗

Java ApachePOI:要遍历excel列并汇总下一列中的相应值吗,java,excel,apache-poi,Java,Excel,Apache Poi,我在excel中的数据如下: Orgs Bill Org1 1.0 Org2 2.0 Org3 3.0 Org3 8.0 Org2 10.0 Org1 12.0 我想要的结果是将类似组织对应的值相加: Org1:13.0 Org2:12.0 Org3:11.0 我可以用下面的代码实现这一点。我只是想知道是否有更好的方法 List<String> duplicateOrgs = new ArrayList<String>(

我在excel中的数据如下:

Orgs    Bill
Org1    1.0
Org2    2.0
Org3    3.0
Org3    8.0
Org2    10.0
Org1    12.0
我想要的结果是将类似组织对应的值相加: Org1:13.0 Org2:12.0 Org3:11.0

我可以用下面的代码实现这一点。我只是想知道是否有更好的方法

    List<String> duplicateOrgs = new ArrayList<String>();
    LinkedHashSet<String> orgs;
    LinkedHashMap<String, Float> orgsAndSum = new LinkedHashMap<String, Float>(); 

    File file = new File("C:\\Users\\Himanshu Chand\\Desktop\\OrgData\\OrgDataLarge.xls");
    FileInputStream inputStream = new FileInputStream(file);
    Workbook workbook = null;
    workbook = new HSSFWorkbook(inputStream);

    Sheet sheet = workbook.getSheet("Sheet1");

    int rowCount = sheet.getLastRowNum()-sheet.getFirstRowNum();

    for (int i = 1; i < rowCount+1; i++)
    {
        Row row = sheet.getRow(i);
        duplicateOrgs.add(row.getCell(0).getStringCellValue());   //here i am looping through the first column and storing all the orgs in a list.
    } 

    orgs= new LinkedHashSet<String>(duplicateOrgs); //storing the list into set to get unique orgs.

    Iterator value = orgs.iterator(); 

    while (value.hasNext()) 
    { 
        String org=(String) value.next();
        float sum=0;
        for (int i = 1; i < rowCount+1; i++)
        {
            Row row = sheet.getRow(i);
            if(org.equals(row.getCell(0).getStringCellValue()))
            {
                sum=(float) (sum+row.getCell(1).getNumericCellValue()); //now comparing the set of orgs with the first column and summing the bill wherever there is a match.
            }
        } 
        orgsAndSum.put(org, sum);
    } 

   for (Entry<String, Float> entry : orgsAndSum.entrySet())
   {
       System.out.println(entry.getKey() + "/" + entry.getValue());
   }

}  
List duplicatorgs=new ArrayList();
LinkedHashSet组织;
LinkedHashMap orgsAndSum=新LinkedHashMap();
File File=新文件(“C:\\Users\\Himanshu Chand\\Desktop\\OrgData\\OrgDataLarge.xls”);
FileInputStream inputStream=新的FileInputStream(文件);
工作簿=空;
工作簿=新的HSSF工作簿(inputStream);
Sheet Sheet=工作簿.getSheet(“Sheet1”);
int rowCount=sheet.getLastRowNum()-sheet.getFirstRowNum();
对于(int i=1;i
您可以直接在Excel电子表格中或与类一起使用
COUNTIF
函数,而不是手工操作。查看POI如何处理内置Excel函数。

使用countifs(),每个组织一个。Countif或countifs?“这是打字错误还是两者都能用?”索拉米克谢谢,我自己纠正了。有
COUNTIF
COUNTIF