GcExcel 如何删除数据中的所有空行
本帖最后由 JoeJin 于 2023-8-2 10:17 编辑删除空行是数据清洗中常见的一个环节,比如我们有如下一个Excel数据。
图中橙色的部分是空行,需要被删除,但是同时也包含一些空单元格,需要保留,用绿色标记出来了。
经过研究代码如下:
public void RemoveEmptyRow() {
Workbook workbook = new Workbook();
workbook.open("resources/example.xlsx");
IWorksheet sheet = workbook.getActiveSheet();
IRange range = sheet.getUsedRange();
int firstColumn = range.getColumn();
int lastColumn = range.getLastColumn();
int firstRow = range.getRow();
int lastRow = range.getLastRow();
IRange deleteRange = sheet.getRange(lastRow + 1, lastColumn + 1);
for (int r = firstRow; r <= lastRow; r++) {
boolean isEmptyRow = true;
for (int c = firstColumn; c <= lastColumn; c++) {
if (sheet.getRange(r, c).getValue() != null) {
isEmptyRow = false;
break;
}
}
if (isEmptyRow) {
deleteRange = deleteRange.union(sheet.getRange(r, firstColumn, 1, lastColumn - firstColumn));
}
}
int count = deleteRange.getAreas().getAreaCount();
for (int i = count - 1; i >= 0; i--) {
deleteRange.getAreas().getArea(i).getEntireRow().delete();
}
workbook.save("new.xlsx");
}
先看看最后的结果:
代码逻辑如下:
1. 打开Excel文件后。
2. 使用 sheet.getUsedRange(); 获取整个文档的数据 range。
3. 通过 API 获取第一行和第一列,最后一行和最后一列的index.
int firstColumn = range.getColumn();
int lastColumn = range.getLastColumn();
int firstRow = range.getRow();
int lastRow = range.getLastRow();
4. 循环遍历每一个格子,用一个标记来判断每一行是否全为空。
5. 把找到的空行记录下来,通过Range的union合并在一起。
6. 循环遍历,逆序删除整行。
请注意:一定要逆袭删除,删除一行后,下面的内容会上移,因此正序删除会导致错误删除需要的数据。
页:
[1]