数据写入excel并导出,excel模板下载都有了,这一节主要说如何从页面导入带有数据的excel到数据库。
1.页面的表单提交设置
<form id="addform" method="post" enctype="multipart/form-data">
<span>文件导入</span>
<input id="importFile" name="importFile" type="file" />
</form>
对应js:
function data_out(){
$("#addform").form('submit',{url:basepath+'/express/export'});
}
2.后台controller(springmvc)
@RequestMapping(value="/export")
public void fileUpload(HttpServletRequest request,HttpServletResponse response) throws Exception{
String outputXml = null;
InputStream is=null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/json; charset=UTF-8");
PrintWriter out=response.getWriter();
Map<String,Object> jsonMap=new HashMap<String,Object>();
//解析器
CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession.getServletContext());
//判断Reqeust是否有文件上传
if(multipartResolver.isMultipart(request)){
//转换成多部分request
MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
//取得request中的所有文件名
Iterator<String> iter = multiRequest.getFileNames();
while(iter.hasNext()){
//取得上传文件
MultipartFile file=multiRequest.getFile(iter.next());
if(file !=null){
is=new ByteArrayInputStream(file.getBytes());
}
}
Workbook wb=new XSSFWorkbook(is);
Sheet sheet=wb.getSheeetAt(0);//获取表格
int allRow=sheet.getPhysicalNumberOfRows();//获取总行数
if(allRow>2){
//....业务判断
for(int start=2;start<allRow;start++){
Row row=sheet.getRow(start);//从第三行开始获取数据
if(row ==null){
continue;
}
row.getCell(i);
...
}
}
}
if(is !=null){
is.close();
}
...
com.alibaba.fastjson.JSONObject jo=new com.alibaba.fastjson.JSONObject(jsonMap);
String jsonString=jo.toJSONString();
out.print(jsonString);
out.flush();
out.close();
}