我想永久删除那些没有任何类型数据的空行!我这样做是这样的:
private void shift(File f){
File F=f;
HSSFWorkbook wb = null;
HSSFSheet sheet=null;
try{
FileInputStream is=new FileInputStream(F);
wb= new HSSFWorkbook(is);
sheet = wb.getSheetAt(0);
int rowIndex = 0;
int lastRowNum = sheet.getLastRowNum();
if (rowIndex >= 0 && rowIndex < lastRowNum) {
sheet.shiftRows(rowIndex, lastRowNum, 500);
}
FileOutputStream fileOut = new FileOutputStream("C:/juni.xls");
wb.write(fileOut);
fileOut.close();
}
catch(Exception e){
System.out.print("SERRO "+e);
}
}
在 shiftRows() 之后我写了我的新文件。但是我的代码现在生效了。我只需要删除/删除数据中的空行(任何时候)。那么有可能这样做吗?如果是,我做得对吗?如果没有任何人可以帮助我这样做吗?提前致谢!
最佳答案
如果内存还记得 shiftRows(int startRow, int endRow, int n)
就是您所需要的。我不太记得如何检查一行是否为空,但如果您确实知道一行为空(通常通过使用 removeRow(Row row)
)并且您知道 rowIndex,那么它还不错。通过调用:
int rowIndex; //Assume already known and this is the row you want to get rid of
int lastIndex = sheet.getLastRowNum();
sheet.shiftRows(rowIndex + 1, lastIndex, -1);
你将 [rowIndex + 1, lastIndex] 中的每一行都向上移动 1(这应该有效地删除一个空行)。如果您有多行并且有办法确定该行是否为空,那么我建议如下:
for(int i = 0; i < sheet.getLastRowNum(); i++){
if(isEmpty(sheet.getRow(i)){
sheet.shiftRows(i + 1, sheet.getLastRowNum(), -1);
i--;//Adjusts the sweep in accordance to a row removal
}
}
boolean isEmpty(Row row){
//Code to determine if a row is empty
}
请注意,如果 n
为负数,则行向上移动。如果 n
为正,则行向下移动。所以我不太确定你是否打算在你提供的代码中将那 block 行向下移动 500。我希望这会有所帮助。
关于java - 在 Excel 工作表中使用 JAVA 永久删除空行 Apache POI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17245948/