这里省略spring配置,就是简单的SMM配置
1.前端我用了一个网上找的esyUI的框架
在前端引入
<link rel="stylesheet" href="static/ace/css/font-awesome.min.css" />
<link rel="stylesheet" type="text/css"
href="static/jquery-easyui-1.3.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css"
href="static/jquery-easyui-1.3.3/themes/icon.css">
<style type=text/css><script type="text/javascript"
src="static/jquery-easyui-1.3.3/jquery.min.js"></script>
<script type="text/javascript"
src="static/jquery-easyui-1.3.3/jquery.easyui.min.js"></script>
<script type="text/javascript"
src="static/jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
按钮
<td><div><a href="javascript:void(0)" class="easyui-linkbutton"
iconCls="icon-import " plain="true"
οnclick="openUploadFileDialog()">批量导入数据</a></div></td>
按钮弹窗
<div id="dlg2" class="easyui-dialog"
style="width: 400px; height: 180px; padding: 10px 20px"
closed="true" buttons="#dlg-buttons2">
<form id="uploadForm" action="readCaseNumber/sendCase.do" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>上传文件:</td>
<td><input type="file" name="upfile"></td>
</tr>
</table>
</form>
</div>
<div id="dlg-buttons2">
<a href="javascript:void(0)" class="easyui-linkbutton"
iconCls="icon-ok" οnclick="uploadFile()">上传</a> <a
href="javascript:void(0)" class="easyui-linkbutton"
iconCls="icon-cancel"
οnclick="javascript:$('#dlg2').dialog('close')">关闭</a>
</div>
漏了js代码
<script>
function openUploadFileDialog(){
$("#dlg2").dialog('open').dialog('setTitle','导入数据');
}
function uploadFile(){
$("#uploadForm").form("submit",{
success:function(result){
var result=eval('('+result+')');
if(result.errorMsg){
$.messager.alert("系统提示",result.errorMsg);
}else{
$.messager.alert("系统提示","上传成功");
$("#dlg2").dialog("close");
$("#dg").datagrid("reload");
}
}
});
}
后端controller
@Controller
@RequestMapping(value = "/readCaseNumber")
public class ReadCaseNumber extends BaseController {
@RequestMapping(value = "/sendCase")
@ResponseBody
public String sendCase(HttpServletRequest request) throws Exception {System.out.println("开始上传文件");
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
System.out.println("通过传统方式form表单提交方式导入excel文件!");
CaseNm caseNm = new CaseNm();
List<String> caseNumbers = caseNm.upload(multipartRequest);
上面 就是获取前端请求的注解
MultipartHttpServletRequest 可以网上查一下
我的业务是获取Excel表格第一sheet页的第一列的数据,返回第一行数据的数组的工具类
public List<String> upload(MultipartHttpServletRequest multipartRequest) throws Exception { InputStream in = null; List<List<Object>> listob = null; MultipartFile file = multipartRequest.getFile("upfile"); if (file.isEmpty()) { throw new Exception("文件不存在!"); } in = file.getInputStream(); listob = new ImportExcelUtil().getBankListByExcel(in, file.getOriginalFilename()); // 因为要导入的excel比较特殊,不是常规的一行类别,其他行都是数据,所以我需要根据具体模板来读取excel List<String> list = new ArrayList<>(); for (int i = 0; i < listob.size(); i++) { DetailInfoVo vo = new DetailInfoVo(); List<Object> list2 = listob.get(i); //vo.setCaseNm(String.valueOf(listob.get(i).get(1))); System.out.println(list2.toString()); list.add((String)list2.get(0)); } System.out.println(list.toString()); in.close(); return list; }
验证Excel是2003的xls还是2007的xlsx工具类
public class ImportExcelUtil { private final static String excel2003L =".xls"; //2003- 版本的excel private final static String excel2007U =".xlsx"; //2007+ 版本的excel /** * 描述:获取IO流中的数据,组装成List<List<Object>>对象 * @param in,fileName * @return * @throws IOException */ public List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{ List<List<Object>> list = null; //创建Excel工作薄 Workbook work = this.getWorkbook(in,fileName); if(null == work){ throw new Exception("创建Excel工作薄为空!"); } Sheet sheet = null; Row row = null; Cell cell = null; list = new ArrayList<List<Object>>(); //遍历Excel中所有的sheet int s=work.getNumberOfSheets(); for (int i = 0; i < work.getNumberOfSheets(); i++) { sheet = work.getSheetAt(i); if(sheet==null){continue;} int s2=sheet.getLastRowNum(); //遍历当前sheet中的所有行 for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if(row==null||row.getFirstCellNum()==j){continue;} //遍历所有的列 List<Object> li = new ArrayList<Object>(); for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) { cell = row.getCell(y); li.add(this.getCellValue(cell)); } list.add(li); } } work.close(); return list; } /** * 描述:根据文件后缀,自适应上传文件的版本 * @param inStr,fileName * @return * @throws Exception */ public Workbook getWorkbook(InputStream inStr,String fileName) throws Exception{ Workbook wb = null; String fileType = fileName.substring(fileName.lastIndexOf(".")); if(excel2003L.equals(fileType)){ wb = new HSSFWorkbook(inStr); //2003- }else if(excel2007U.equals(fileType)){ wb = new XSSFWorkbook(inStr); //2007+ }else{ throw new Exception("解析的文件格式有误!"); } return wb; } /** * 描述:对表格中数值进行格式化 * @param cell * @return */ public Object getCellValue(Cell cell){ Object value = null; DecimalFormat df = new DecimalFormat("0"); //格式化number String字符 SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化 DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: value = cell.getRichStringCellValue().getString(); break; case Cell.CELL_TYPE_NUMERIC: if("General".equals(cell.getCellStyle().getDataFormatString())){ value = df.format(cell.getNumericCellValue()); }else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){ value = sdf.format(cell.getDateCellValue()); }else{ value = df2.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: value = cell.getBooleanCellValue(); break; case Cell.CELL_TYPE_BLANK: value = ""; break; default: break; } return value; }