关于springMVC+poi上传Excel文件问题解决
2017-11-08 10:40
573 查看
controller如下:
/**
* 导入值班表
*
* @param dutyExcel
* @return String(导入结果描述)
*/
@RequestMapping(value = "importDutyExcel")
@ResponseBody
public String importDutyExcel(@RequestParam(value = "dutyExcel", required = false) MultipartFile dutyExcel) {
System.out.println("进入");
// 1、获取excel文件
String rString = "";
if (dutyExcel != null) {
String fileName = dutyExcel.getOriginalFilename();
// 判断是否是excel
if (fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")) {
rString = excelService.importDutyExcel(dutyExcel);
System.out.println(rString);
}
}
return "success";
}
service如下:
//如下为文件不能加密的解决方案以及注释掉的加密解决方案
/**
* 获取的Excel文件中可操作的sheet
*
* @param dutyExcel
* @return sheet
* @throws Exception
*/
private Sheet getSheetOfExcel(MultipartFile dutyExcel) throws Exception {
Sheet sheet = null;
try {
// 版本判断
boolean is03Excel = dutyExcel.getOriginalFilename().matches("^.+\\.(?i)(xls)$");
// 后缀
String postfix = is03Excel ? ".xls" : ".xlsx";
/*
* 文件加密方式下解决策略
* // 将上传生成的临时文件写入到本地新建的文件中
* CommonsMultipartFile cf = (CommonsMultipartFile) dutyExcel;
* File file = new File("D:\\fileupload");
* // 创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
* if (!file.exists())
* file.mkdirs();
* // 新建一个文件
* temExeclFile = new File("D:\\fileupload\\" + new Date().getTime()
* + postfix);
* // 将上传的文件写入新建的文件中
* try {
* cf.getFileItem().write(temExeclFile);
* } catch (Exception e) {
* e.printStackTrace();
* }
* System.out.println("开始睡眠");
* Thread.sleep(4000);
* System.out.println("结束睡眠");
* // 写入输入流
* fileInputStream = new FileInputStream(temExeclFile);
*
* System.out.println(fileInputStream.getFD());
*/
// 1、读取工作簿
Thread.sleep(1000);
Workbook workbook = getWorkbook(is03Excel, dutyExcel.getInputStream());
// 2、读取工作表
sheet = workbook.getSheetAt(0);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return sheet;
}
// 根据excel版本获取workbook
private Workbook getWorkbook(Boolean is03Excel, InputStream InputStream) throws IOException {
Workbook workbook = null;
if (is03Excel) {
workbook = new HSSFWorkbook(InputStream);
} else {
System.out.println(InputStream.toString());
workbook = new XSSFWorkbook(InputStream);
}
return workbook;
}
/**
* 导入值班表
*
* @param dutyExcel
* @return String(导入结果描述)
*/
@RequestMapping(value = "importDutyExcel")
@ResponseBody
public String importDutyExcel(@RequestParam(value = "dutyExcel", required = false) MultipartFile dutyExcel) {
System.out.println("进入");
// 1、获取excel文件
String rString = "";
if (dutyExcel != null) {
String fileName = dutyExcel.getOriginalFilename();
// 判断是否是excel
if (fileName.matches("^.+\\.(?i)((xls)|(xlsx))$")) {
rString = excelService.importDutyExcel(dutyExcel);
System.out.println(rString);
}
}
return "success";
}
service如下:
//如下为文件不能加密的解决方案以及注释掉的加密解决方案
/**
* 获取的Excel文件中可操作的sheet
*
* @param dutyExcel
* @return sheet
* @throws Exception
*/
private Sheet getSheetOfExcel(MultipartFile dutyExcel) throws Exception {
Sheet sheet = null;
try {
// 版本判断
boolean is03Excel = dutyExcel.getOriginalFilename().matches("^.+\\.(?i)(xls)$");
// 后缀
String postfix = is03Excel ? ".xls" : ".xlsx";
/*
* 文件加密方式下解决策略
* // 将上传生成的临时文件写入到本地新建的文件中
* CommonsMultipartFile cf = (CommonsMultipartFile) dutyExcel;
* File file = new File("D:\\fileupload");
* // 创建一个目录 (它的路径名由当前 File 对象指定,包括任一必须的父路径。)
* if (!file.exists())
* file.mkdirs();
* // 新建一个文件
* temExeclFile = new File("D:\\fileupload\\" + new Date().getTime()
* + postfix);
* // 将上传的文件写入新建的文件中
* try {
* cf.getFileItem().write(temExeclFile);
* } catch (Exception e) {
* e.printStackTrace();
* }
* System.out.println("开始睡眠");
* Thread.sleep(4000);
* System.out.println("结束睡眠");
* // 写入输入流
* fileInputStream = new FileInputStream(temExeclFile);
*
* System.out.println(fileInputStream.getFD());
*/
// 1、读取工作簿
Thread.sleep(1000);
Workbook workbook = getWorkbook(is03Excel, dutyExcel.getInputStream());
// 2、读取工作表
sheet = workbook.getSheetAt(0);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
return sheet;
}
// 根据excel版本获取workbook
private Workbook getWorkbook(Boolean is03Excel, InputStream InputStream) throws IOException {
Workbook workbook = null;
if (is03Excel) {
workbook = new HSSFWorkbook(InputStream);
} else {
System.out.println(InputStream.toString());
workbook = new XSSFWorkbook(InputStream);
}
return workbook;
}
相关文章推荐
- 使用maven+springmvc+POI对上传的Excel文件进行解析并操作
- Java SpringMVC POI上传excel并读取文件内容
- 关于ueditor 在struts2 中 上传图片 ,未找到上传文件 问题的解决方法
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方案
- spring mvc MultipartFile 上传文件错误解决
- 解决自定义文件上传处理与Spring MultipartResolver的冲突问题
- spring mvc MultipartFile 上传文件错误解决
- 关于在Spring配置文件中解决MySQL重连问题
- jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法
- spring mvc ajaxfileupload文件上传返回json下载问题
- php5.6关于curl以@方式上传文件的变化及解决七牛上传时报file is not specified in multipart的问题
- 今天碰到一个poi解析excel文件的时候报错, 后来发现是这个excel文件单元格里面有公式。删除公式问题解决!
- 今天解决了两个关于.NET读取EXCEL文件的问题,记下来,很有用!
- SpringMVC+ajaxFileUpload上传图片 IE浏览器弹下载框问题解决方案
- 关于Spring mvc + easyui form上传文件提交时在IE下会提示下载
- Extjs 关于文件上传file 框 可输入问题解决
- 关于tomcat环境下上传大文件遇到的问题及解决办法
- 解决asp.net 以及MVC中上传文件大小限制的问题
- 今天解决了两个关于.NET读取EXCEL文件的问题,记下来,很有用!
- jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)