在excel Java中合并具有相同值的单元格

时间:2015-06-25 10:41:31

标签: java excel apache-poi xssf

我使用POI API从Postgres数据库生成excel文档。 第一栏" Ordre"有很多相同的价值观。 但是,我想合并具有相同值的单元格。

我想要遵循这个算法:

  • 遍历字段" ordre"
  • 如果cell(i)= cell(i + 1)
  • 则设置条件
  • 而不是合并他们

但我在Java中如何说(cell(i) = cell(i+1))这个条件有问题,如果它能给出一些令人满意的结果我并不热衷 我开始写这段代码:

for (i=3; i<= sheet1.getPhysicalNumberOfRows()  ; i++) {
  Cell cell = sheet1.getRow(i).getCell(0);

 if (sheet1.getRow(i).getCell(0).getStringCellValue() == sheet1.getRow(i+1).getCell(0).getStringCellValue())
  {
    CellRangeAddress cellRangeAddress = new CellRangeAddress(i,i+1,0,0);
    sheet1.addMergedRegion(cellRangeAddress);
  }
}

任何建议都将受到赞赏

2 个答案:

答案 0 :(得分:1)

使用

sheet1.getRow(i).getCell(0).toString().equals(sheet1.getRow(i+1).getCell(0).toString()).

示例:

 for (i=3; i<= sheet1.getPhysicalNumberOfRows()  ; i++) {
 Cell cell = sheet1.getRow(i).getCell(0);

  if (sheet1.getRow(i).getCell(0).toString().equals( sheet1.getRow(i+1).getCell(0).toString()))
  {
    CellRangeAddress cellRangeAddress = new CellRangeAddress(i,i+1,0,0);
    sheet1.addMergedRegion(cellRangeAddress);
  }
}

"=="用于引用相等性检查。 equals()方法将用于检查内容的相等性。

答案 1 :(得分:0)

我有一个类似的要求,我的第一列有重复值。我尝试了以下代码,它工作正常。在这里,我根据第一列中的值合并行。 NON_REPTNG_COLS是要合并的列数。您可以修改此方法以满足您的要求。

    int first = 1;
    int last = 1;
    int i = 1;
    while (i < spreadsheet.getPhysicalNumberOfRows()) {
        first = i;
        last = i;
        for (int j = i + 1; j < spreadsheet.getPhysicalNumberOfRows(); j++) {
            if (spreadsheet.getRow(i).getCell(0).toString()
                    .equals(spreadsheet.getRow(j).getCell(0).toString())) {
                last = j;
            }
        }

        for (int k = 0; k < NON_REPTNG_COLS; k++) {
            CellRangeAddress cellRangeAddress = new CellRangeAddress(first,
                    last, k, k);
            spreadsheet.addMergedRegion(cellRangeAddress);
        }
        i = last + 1;
    }