0

我有一个看起来像这样的 excel 电子表格:

+-----------------+--------+----------------------+
| Title           | Value  |  Average Price List  |
+-----------------+--------+----------------------+
|                 |        |                      |   
| Item 1          |   10   |        9.99          |
| Item 2          |   20   |        9.99          |
| Item 3          |   30   |        8.99          |
| Total Royalty A |        |                      |
|                 |        |                      |
+-----------------+--------+----------------------+
| Item 1          |   10   |        9.90          |
| Item 2          |   20   |        5.69          |
| Item 3          |   30   |        9.99          |
| Total Royalty B |        |                      |
|                 |        |                      |
+-----------------+--------+----------------------+

我想得到平均列的总值。但是,我需要使用“总版税 A ”和“总版税 B ”将总数分开;最终的意思是结果应该是这样的:

Total Royalty A = 10.99
Total Royalty B = 11.88

我使用了一个 HashMap,其中的键是来自“ Total Royalty B ”的“Total Royalty A ”。我在if 语句中的代码有问题:

if(totalCell.getCellType() == Cell.CELL_TYPE_STRING)

我认为的问题是标题下有一个空/空白单元格。我尝试使用不同的技术来跳过空单元格,但问题一直在该行发生。如果有人可以就如何解决这个问题给我任何建议,我将不胜感激。

这是应该处理执行上述说明的方法:

 public HashMap monthlyAverageUnitsTotal (HSSFSheet sheet, int colAvgNum, int colTitle )
    {


        HashMap hm = new HashMap();


        double sum = 0.0;
        String key = null;


        for(Row row : sheet)
        {

            Cell saleAverageCell = row.getCell(colAvgNum);
            Cell totalCell = row.getCell(colTitle);

            if(totalCell.getCellType() == Cell.CELL_TYPE_STRING)
            {
               String totalCellValue = totalCell.getStringCellValue().toString().trim();

               if(totalCellValue.startsWith("Total Royalty"))
               {
                   key = totalCell.getStringCellValue().toString().trim();

               }
            }

            if(saleAverageCell.getCellType() == Cell.CELL_TYPE_NUMERIC)
            {
                double saleAverageCellValue = saleAverageCell.getNumericCellValue();
                sum += saleAverageCellValue;

                // put the element in the map
                hm.put(key, sum);

                // return the value of sum to 0
                sum = 0.0;


            }


        }


        return hm;
    }
4

1 回答 1

1

我有一个功能要求,涉及解析包含大量数据的 Excel 电子表格。为了利用单元格值问题,我创建了一个以字符串格式返回单元格值的函数,因此我不会遇到字符串、数字、日期、布尔或空白单元格的问题(它不处理公式值):

//Cell celdaActual is the actual cell in a row in a sheet in the book, the class
//has Spanish names and comments and is big for a post, so I'm just posting
//this function
public String getCellValue() {
    String strValor = "";
    int intValor;
    double dblValor;
    SimpleDateFormat objSimpleDateFormat;
    if (celdaActual != null) {
        strValor = celdaActual.toString();
        switch (celdaActual.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                strValor = strValor.trim();
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(celdaActual)) {
                    objSimpleDateFormat = new SimpleDateFormat("dd/MM/yyyy");
                    strValor = objSimpleDateFormat
                        .format(celdaActual.getDateCellValue());
                } else {
                    dblValor = celdaActual.getNumericCellValue();
                    if (Math.floor(dblValor) == dblValor) {
                        intValor = (int)dblValor;
                        strValor = String.valueOf(intValor);
                    } else {
                        strValor = String.valueOf(dblValor);
                    }
                }
                break;
            case Cell.CELL_TYPE_BLANK:
                strValor = "";
                break;
            case Cell.CELL_TYPE_ERROR:
                strValor = "";
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                strValor = String.valueOf(celdaActual.getBooleanCellValue());
                break;
        }
    }
    return strValor;
}

希望对你有效。

于 2012-05-30T21:45:10.493 回答