我一直在尝试开发一个可以删除包含特定字符串“POST”的多行的代码。我一直这样做:
private void processExcelFile(File f_path){
File path=f_path;
HSSFWorkbook wb = null;
try{
FileInputStream is=new FileInputStream(path);
wb= new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
int j = 0;
for(Row row: sheet){
for(Cell cell : row){
count++;
if (cell.getCellType() == Cell.CELL_TYPE_STRING){
if (cell.getRichStringCellValue().getString().trim().contains("POST")){
rowcount_post=row.getRowNum();
System.out.print("ROW COUNT= "+rowcount_post);
HSSFRow removingRow = sheet.getRow(rowcount_post);
if (removingRow != null) {
sheet.removeRow(removingRow);
}
}
}
}
}
} catch(Exception e){
JOptionPane.showMessageDialog(this,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
}
try{
FileOutputStream fileOut = new FileOutputStream("C:/juni.xls");
wb.write(fileOut);
} catch(Exception e) {
JOptionPane.showMessageDialog(this,e.getMessage(),"SAVE Error",JOptionPane.ERROR_MESSAGE);
}
}
事实上,它一次只删除一行。是否有可能删除包含String POST的所有行?
答案 0 :(得分:1)
为什么一次删除一个有问题?它看起来效率不高......
无论如何,我很确定你仍然需要遍历每个单元格以查看它是否包含“POST”。 如果您有一个问题,一次只删除一行,您可以在数组中保存要删除的行的索引;然后使用该数组删除已保存的行。
答案 1 :(得分:1)
您一次删除一个原因是因为您一次只能找到一个。正如另一张海报所提到的,你可以通过你的程序跟踪位置(无论是在这个循环中),但这不会使它在算法上有效(除非你在其他地方跟踪它并将该信息传递给它法)。
我不太熟悉在Java中使用Excel文件,但这些似乎是一种可行的方法。