我有一个excel文件,我正在使用apache-poi获取excel文件的数据,所以如果我读取任何单元格值,那么如何知道单元格是否为合并单元格并获取合并单元格的值< / p>
所以我想知道天气一个单元格是一个合并的单元格,如果它是一个合并的单元格我将尝试获取合并单元格的第一行和第一个冒号值的值,如果它不是一个合并的单元格然后我将直接获取值
的数据像
String var = String.valueOf(sheet.getRow(Row).getCell(Cell));
答案 0 :(得分:4)
您需要的两个关键方法:
您的代码就像是:
public CellRangeAddress getMergedRegionForCell(Cell c) {
Sheet s = c.getRow().getSheet();
for (CellRangeAddress mergedRegion : s.getMergedRegions()) {
if (mergedRegion.isInRange(c.getRowIndex(), c.getColumnIndex())) {
// This region contains the cell in question
return mergedRegion;
}
}
// Not in any
return null;
}
然后检查是否返回null
,如果没有读取该区域的第一行和第一列,则知道包含您感兴趣的细胞的区域的左上角单元格
答案 1 :(得分:3)
您可以使用Sheet.getMergedRegions()来确定合并单元格的所有范围。然后,您可以在返回的范围上使用CellRangeAddress.isInRange(row,column)来检查相关单元格是否为合并单元格。
public boolean isMergedCell(int row, int column) {
for (CellRangeAddress range : sheet.getMergedRegions()) {
if (range.isInRange(row, column)) {
return true;
}
}
return false;
}
答案 2 :(得分:0)
这是我的代码(Kotlin),它考虑到如何合并单元格,如何以字符串形式获取Excel单元格数据。我使用此代码将excel数据加载到数据库中。
fun getCellStr(sheet: XSSFSheet, cell: Cell): String {
var res = ""
val formatter = DataFormatter()
var inRange = false
for (range in sheet.getMergedRegions()) {
if (range.isInRange(cell.rowIndex, cell.columnIndex)) {
for (rIndex in range.firstRow..range.lastRow) {
for (cIndex in range.firstColumn..range.lastColumn) {
res = "$res${formatter.formatCellValue(sheet.getRow(rIndex).getCell(cIndex))}"
}
}
inRange = true
}
}
if (!inRange) {
res = formatter.formatCellValue(cell)
}
return res.trim()
}