给定 java 中的单元格索引,如何获取合并单元格的数据?
How to get data of the merged cell given a cell indexes in java?
我有一个 excel 文件,我正在使用 apache-poi 获取 excel 文件的数据,所以如果我读取任何单元格值,那么如何知道该单元格是否已合并单元格并获取合并单元格的值
所以我想知道一个单元格是否是一个合并单元格,如果它是一个合并单元格,我将尝试获取合并单元格的第一行的值和第一个冒号值,如果它不是合并单元格那么我就直接获取值
的数据
喜欢
String var = String.valueOf(sheet.getRow(Row).getCell(Cell));
您可以在返回的范围上使用 Sheet.getMergedRegions() to determine all ranges of merged cells. Then you can use 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;
}
你需要的两个关键方法:
你的代码应该是这样的:
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
返回,如果没有,请阅读该区域的第一行和第一列以了解包含您感兴趣的单元格的区域的左上角单元格
这是我的代码 (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()
}
我有一个 excel 文件,我正在使用 apache-poi 获取 excel 文件的数据,所以如果我读取任何单元格值,那么如何知道该单元格是否已合并单元格并获取合并单元格的值
所以我想知道一个单元格是否是一个合并单元格,如果它是一个合并单元格,我将尝试获取合并单元格的第一行的值和第一个冒号值,如果它不是合并单元格那么我就直接获取值
的数据喜欢
String var = String.valueOf(sheet.getRow(Row).getCell(Cell));
您可以在返回的范围上使用 Sheet.getMergedRegions() to determine all ranges of merged cells. Then you can use 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;
}
你需要的两个关键方法:
你的代码应该是这样的:
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
返回,如果没有,请阅读该区域的第一行和第一列以了解包含您感兴趣的单元格的区域的左上角单元格
这是我的代码 (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()
}