java - Apache-poi:想要遍历Excel列并对下一列中存在的相应值求和

标签 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

我想要的结果是对类似组织对应的值进行求和: 组织1:13.0 组织2:12.0 组织3: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());
   }

}  

最佳答案

您可以直接在 Excel 电子表格中或使用 org.apache.poi.ss.formula.functions.Countif 使用 COUNTIF 函数,而不是手动执行此操作。类(class)。看看 Formula Examples了解 POI 如何处理内置 Excel 函数。

关于java - Apache-poi:想要遍历Excel列并对下一列中存在的相应值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54172372/

相关文章:

java - Eclipse - 运行服务器时模拟全磁盘

java - 如何正确设计类

excel - 如何使用vba在单元格中输入公式

excel - 如何提交登录凭据?

windows - 你能摆脱 "Microsoft Office Excel has encountered a problem"对话框吗?

java - 写入大格式 Excel (.xlsx) 时出现 Zip-bomb 异常

java - swing 中的图标字体 : font icons not appear in JLabel

java - 带有java客户端的python套接字服务器-socket.error : [Errno 32] Broken pipe

java - 如何使用 Java 从 Excel (XLSX) 构建 XML

java - 导出到 Excel JSF 和 PrimeFaces