Hye我是新的Apache POI API阅读MS Office文档,但不知何故擅长Java。我只是想从Excel文件中搜索一个特定的字符串!我这样做:
private void processExcelFile(File f_path) throws Exception{
File path=f_path;
try{
FileInputStream is=new FileInputStream(path);
HSSFWorkbook wb = new HSSFWorkbook(is);
HSSFSheet sheet = wb.getSheetAt(0);
int rowcount_post=0;
int rowcount_304=0;
for(Row row: sheet){
for(Cell cell : row){
if (cell.getCellType() == Cell.CELL_TYPE_STRING){
if (cell.getRichStringCellValue().getString().trim().equals("GET")){
rowcount_post=row.getRowNum();
HSSFRow removingRow = sheet.getRow(rowcount_post);
if (removingRow != null) {
sheet.removeRow(removingRow);
}
try (FileOutputStream fileOut = new FileOutputStream("C:/juni.xls")) {
wb.write(fileOut);
}
break;
}
else{
System.out.print("NOT FOUND");
}
break;
}
}
}
}
catch(Exception e){
JOptionPane.showMessageDialog(this,e.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
}
}
一切都很好!除了我有一个Web生成的日志文件。所以我必须搜索它的一些字符串,然后我必须删除包含该字符串的行。问题是,它只适用于Excel文件,我创建我的手,而不是计算机生成的(自动日志文件)文件。假设我必须搜索一个字符串“POST”,它只会在我生成的文件中找到,而不会在网站生成的文件中找到。它是任何编码问题,我的意思是文本编码或什么!请建议我一个解决方案,谢谢提前!(抱歉糟糕的英语,我一直在尝试解决方案,因为过去10个小时)
1条答案
按热度按时间e3bfsja21#
我注意到你的代码中有两个错误。首先,你每次删除一行时都要写文件,这是低效的。其次,你只搜索行中的第一个字符串单元格,如果行中的第一个字符串单元格不正确,你就会破坏。如果你的自动生成文件将数字或空白单元格保存为字符串(可能),那么这将导致您手动生成的excel文件和您用脚本创建的文件之间存在差异。我建议删除第二个break语句。为了清理代码,我将整个if块重写如下:
if语句的工作是因为短路。如果你是apache poi的新手,这将为你节省大量的时间。:)
删除行之后,我们应该写文件,将以下代码放在整个for块之后:
我假设sheet.removeRow(row)可以在增强的for循环中工作,如果不能,你可能需要修复它或者让你的代码在while循环中工作。提示:while((行=工作表.getRow(i))!=空){ }