fma*_*ste 29 java apache excel row apache-poi
我正在使用Apache POi HSSF库将信息导入我的应用程序.问题是文件有一些额外/空行需要在解析之前先删除.
没有HSSFSheet.removeRow( int rowNum )方法.只有removeRow( HSSFRow row ).这个问题是无法删除空行.例如:
sheet.removeRow( sheet.getRow(rowNum) );
Run Code Online (Sandbox Code Playgroud)
在空行上给出NullPointerException,因为getRow()返回null.另外,正如我在论坛上看到的那样,removeRow()只删除单元格内容,但行仍然是空行.
有没有一种方法可以删除行(空或不)而不创建一个没有我要删除的行的全新工作表?
小智 30
/**
* Remove a row by its index
* @param sheet a Excel sheet
* @param rowIndex a 0 based index of removing row
*/
public static void removeRow(HSSFSheet sheet, int rowIndex) {
int lastRowNum=sheet.getLastRowNum();
if(rowIndex>=0&&rowIndex<lastRowNum){
sheet.shiftRows(rowIndex+1,lastRowNum, -1);
}
if(rowIndex==lastRowNum){
HSSFRow removingRow=sheet.getRow(rowIndex);
if(removingRow!=null){
sheet.removeRow(removingRow);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道,这是一个3岁的问题,但我最近必须解决同样的问题,我不得不用C#来做.这是我在NPOI,.Net 4.0中使用的功能
public static void DeleteRow(this ISheet sheet, IRow row)
{
sheet.RemoveRow(row); // this only deletes all the cell values
int rowIndex = row.RowNum;
int lastRowNum = sheet.LastRowNum;
if (rowIndex >= 0 && rowIndex < lastRowNum)
{
sheet.ShiftRows(rowIndex + 1, lastRowNum, -1);
}
}
Run Code Online (Sandbox Code Playgroud)
我试图深入大脑深处寻找一两年前与 POI 相关的经历,但我的第一个问题是:为什么在解析之前需要删除行?为什么不直接捕获调用的 null 结果sheet.getRow(rowNum)并继续前进呢?
| 归档时间: |
|
| 查看次数: |
58973 次 |
| 最近记录: |