首页 新闻 赞助 找找看

Excel文件解析出现异常

0
悬赏园豆:50 [已解决问题] 解决于 2016-12-06 19:22

代码如下:@RequestMapping(value = "/uploadExcel",method = RequestMethod.POST)
publicvoidinputExcel(Model model,HttpServletResponse response,HttpServletRequest request/*,
@RequestParam String myfile*/) throwsIOException {

MultipartHttpServletRequest mr = (MultipartHttpServletRequest) request;
MultipartFile mf = mr.getFile("myfile");
String OriginalName = mf.getOriginalFilename();//原始文件名

//得到上传文件格式
String fileext = OriginalName.substring(OriginalName.lastIndexOf(".")+1);

System.out.println(fileext);

String format2007 = "xlsx";//excel格式 2007为xlsx格式
String format2003 = "xls";//excel格式 2003为xlsx格式
//注:if 先不看
if(OriginalName == null/*|| !fileext.equals(format2007) || !fileext.equals(format2003)*/){//判断文件是否存在或者文件格式是否正确
ResponseUtils.writeText(response,String.valueOf(0));//文件不存在或者文件格式不对
} else{

String src = "/upload";
String folderPath = request.getSession().getServletContext().getRealPath(src)+"\\"+OriginalName;

System.out.println(folderPath);
InputStream is = mf.getInputStream();
OutputStream os = new
FileOutputStream(folderPath);
intlen=0; byte[] b = newbyte[1024];
while((len=is.read(b))>0){
os.write(b, 0, len);
}
is.close();
os.close();

readExcel(folderPath);
System.out.println(folderPath+"============");
}
}
privatevoidreadExcel(String filePath){

try{

InputStream IS = newFileInputStream(newFile(filePath));
Workbook book = null;

try{
//2003版本Excel .xls格式
book = newHSSFWorkbook(IS);
} catch(Exception ex) {
//2007版本Excel .xlsx格式
book = newXSSFWorkbook(newFileInputStream(String.valueOf(IS)));
}
//得到第一个工作簿
Sheet sheet = book.getSheetAt(0);//参数 int
if(sheet == null){
return;
}
//遍历行
for(inti = 0;i <= sheet.getLastRowNum();i++){
HSSFRow row = (HSSFRow) sheet.getRow(i);
if(row == null){
continue;
}
//遍历cell
for(intk = 0;k <= row.getLastCellNum();k++){
HSSFCell cell = row.getCell(k);//参数 int
if(cell == null){
continue;
}
//调用getValue方法
System.out.println("----------"+getValue(cell));
}
}
//写入数据并关闭文件
} catch(Exception e){
e.printStackTrace();
}
}

privatestaticString getValue(HSSFCell cell){
if(cell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){
returnString.valueOf(cell.getBooleanCellValue());
} elseif(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
returnString.valueOf(cell.getNumericCellValue());
} else{
returnString.valueOf(cell.getStringCellValue());
}
}

文件已上传成功

 

错误:E:\Idea\workspace\gisdispatch-aggregator\gd-web\target\gd-web\upload\11111.xlsx
java.io.FileNotFoundException: java.io.FileInputStream@266964d7 (系统找不到指定的文件。)
    at java.io.FileInputStream.open(Native Method)

求解决

骚年,你渴望力量吗的主页 骚年,你渴望力量吗 | 初学一级 | 园豆:45
提问于:2016-12-06 14:52
< >
分享
最佳答案
0

虽然完全看不懂你想要说什么,但是一听到excel解析异常,我就想到,应该注意excel单元格的格式你解析的对不对,对于HSSFCell.CELL_TYPE_NUMERIC,它可能有很多不同的cellStyle,你直接String.valueOf(cell.getNumericCellValue()),这样处理,有一定的风险,具体要看你excel的内容了,建议:自己打断点跑一下。

收获园豆:50
让我发会呆 | 老鸟四级 |园豆:2909 | 2016-12-06 14:59

我debug跑过了 就是上传执行完以后调用readExcel(folderPath);这个方法就直接报该错误

骚年,你渴望力量吗 | 园豆:45 (初学一级) | 2016-12-06 15:01

@骚年,你渴望力量吗?: 你往readExcel()方法里跟,跟进去就能知道哪儿出问题了

让我发会呆 | 园豆:2909 (老鸟四级) | 2016-12-06 15:16

@让我发会呆: debug到这个方法时在下一步就报错

骚年,你渴望力量吗 | 园豆:45 (初学一级) | 2016-12-06 15:17

@骚年,你渴望力量吗?: 你debug到readExcel()方法时,看看path对不对,然后按f8往这个方法的断点里去,而不是按f6下一步。

让我发会呆 | 园豆:2909 (老鸟四级) | 2016-12-06 15:32

@让我发会呆: 我的工具是Idea 不是myeclipse

骚年,你渴望力量吗 | 园豆:45 (初学一级) | 2016-12-06 15:33

@骚年,你渴望力量吗?: 好吧,没用过。不过readExcel()方法才是解析excel每个cell的,你断点至少要打到getValue()里才行。

让我发会呆 | 园豆:2909 (老鸟四级) | 2016-12-06 15:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册