我使用POI API从Postgres数据库生成excel文档。 第一栏" Ordre"有很多相同的价值观。 但是,我想合并具有相同值的单元格。
我想要遵循这个算法:
但我在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);
}
}
任何建议都将受到赞赏
答案 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;
}