POI Excel插入空白行
时间: 2025-05-31 19:40:44 浏览: 25
### 如何在 Apache POI 中插入空白行
在使用 Apache POI 操作 Excel 文件时,可以通过创建新的 `HSSFRow` 或 `XSSFRow` 对象来实现插入空白行的效果。需要注意的是,POI 并未直接提供“插入行”的方法,因此需要手动调整现有行的位置并创建新行。
以下是具体实现方式:
#### 创建一个新的空白行
通过调用 `Sheet.createRow(int rowIndex)` 方法可以指定索引位置创建一行。如果该索引处已有数据,则会覆盖原有数据[^2]。为了防止这种情况发生,在创建新行之前应先移动后续行的数据到更高的索引位置。
#### 移动现有的行
由于 POI 不支持直接移动行的操作,需逐一遍历受影响的单元格并将它们复制到目标位置。完成后再删除原始行即可模拟出“插入”效果。
下面是一个完整的 Java 实现示例代码用于向特定位置插入空白行:
```java
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.util.List;
public class InsertBlankRowExample {
public static void main(String[] args) throws Exception{
Workbook workbook = new XSSFWorkbook(); // or HSSFWorkbook for .xls files
Sheet sheet = workbook.createSheet("New Sheet");
// 原始数据填充
String[][] data = {{"A1", "B1"}, {"A2", "B2"}, {"A3", "B3"}};
int rowNum = 0;
for (String[] rowData : data){
Row row = sheet.createRow(rowNum++);
int colNum = 0;
for (String field : rowData){
Cell cell = row.createCell(colNum++);
cell.setCellValue(field);
}
}
// 插入空白行逻辑
int insertRowAt = 1; // 要插入空白行的位置
shiftRows(sheet, insertRowAt, sheet.getLastRowNum(), 1);
try(FileOutputStream fileOut = new FileOutputStream("workbook.xlsx")){
workbook.write(fileOut);
}
workbook.close();
}
/**
* 将从 start 到 end 的所有行向下偏移 n 行.
*/
private static void shiftRows(Sheet sheet, int start, int end, int n){
if(n == 0 || start > end){
return ;
}
for(int i=end;i>=start;i--){
Row oldRow=sheet.getRow(i);
if(oldRow != null){
Row newRow=sheet.createRow(i+n);
copyRow(sheet,oldRow,newRow);
sheet.removeRow(oldRow);
}
}
}
/**
* 复制源行的内容至目标行.
*/
private static void copyRow(Sheet sheet, Row srcRow, Row destRow){
for(Cell srcCell:srcRow){
Cell newCell=destRow.createCell(srcCell.getColumnIndex());
copyCell(sheet,srcCell,newCell);
}
}
/**
* 单元格内容拷贝函数.
*/
private static void copyCell(Sheet sheet, Cell srcCell, Cell destCell){
switch(srcCell.getCellType()){
case STRING:
destCell.setCellValue(srcCell.getStringCellValue());
break;
case NUMERIC:
destCell.setCellValue(srcCell.getNumericCellValue());
break;
default :
System.out.println("Unsupported Cell Type");
}
}
}
```
此代码展示了如何在一个工作表中插入空白行以及如何处理可能存在的其他数据行位移问题[^4]。
阅读全文
相关推荐



















