通过ajax上传excel

前端之家收集整理的这篇文章主要介绍了通过ajax上传excel前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

html:

  1. <li>
  2. <span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;传:</span>
  3. <span class="input">
  4. <input type="file" id="upfile" name="upfile" placeholder=""/>
  5. </span>
  6. <button onclick="importExp();">导入</button>
  7. <span>格式:.xls</span>
  8. </li>
js:
  1. //导入文件 function importExp() {
  2. var formData = new FormData();
  3. var name = $("#upfile").val();
  4. formData.append("file",$("#upfile")[0].files[0]);
  5. formData.append("name",name);
  6. $.ajax({
  7. url : '#springUrl('')/summary/importExp',type : 'POST',async : false,data : formData,// 告诉jQuery不要去处理发送的数据 processData : false,// 告诉jQuery不要去设置Content-Type请求头 contentType : false,beforeSend:function(){
  8. console.log("正在进行,请稍候");
  9. },success : function(responseStr) {
  10. if(responseStr=="01"){
  11. alert("导入成功");
  12. }else{
  13. alert("导入失败");
  14. }
  15. }
  16. });
  17. }

controller:

@RequestMapping("/importExp")
@ResponseBody
public String importExp(@RequestParam("file") MultipartFile file,HttpServletRequest request){
// 判断文件是否为空
String flag = "02";//上传标志
if (!file.isEmpty()) {
try {
String originalFilename = file.getOriginalFilename();//原文件名字
InputStream is = file.getInputStream();//获取输入流
flag = summaryExpServiceImpl.writeExelData(is);
// 转存文件
//file.transferTo(new File(filePath));
} catch (Exception e) {
flag="03";//上传出错
e.printStackTrace();
}
}
return flag;
}



service:

  1. /** * 写入 * @param is */ public String writeExelData(InputStream is){
  2. List<List<String>> list = readExcelContent(is);
  3. for (int i=0,j=list.size();i<j;i++){
  4. List<String> row = list.get(i);
  5. ExpInfoSummary expInfoSummary = new ExpInfoSummary();
  6. expInfoSummary.setOrgName(row.get(0));
  7. expInfoSummary.setSiteName(row.get(1));
  8. expInfoSummary.setProductCode(row.get(2));
  9. expInfoSummary.setProductName(row.get(3));
  10. expInfoSummary.setProductNum(row.get(4));
  11. expInfoSummary.setProductPrice(Double.valueOf(row.get(5)));
  12. expInfoSummary.setProductState(row.get(6));
  13. pool.getsqlSession("psEpfsqlSession").selectList("com.jd.ps.data.epf.mapper.expInfoSummary.insertExp",expInfoSummary);
  14. }
  15. return "01";
  16. }
  17.  
  18. /** * 读取Excel数据内容 * @param is * @return Map 包含单元格数据内容的Map对象 */ public List<List<String>> readExcelContent(InputStream is) {
  19. List<List<String>> content = new ArrayList<List<String>>();
  20. POIFSFileSystem fs;
  21. HSSFWorkbook wb;
  22. HSSFSheet sheet;
  23. HSSFRow row;
  24. String str = "";
  25. try {
  26. fs = new POIFSFileSystem(is);
  27. wb = new HSSFWorkbook(fs);
  28. sheet = wb.getSheetAt(0);
  29. // 得到总行数 int rowNum = sheet.getLastRowNum();
  30. row = sheet.getRow(0);
  31. int colNum = row.getPhysicalNumberOfCells();
  32. // 正文内容应该从第二行开始,第一行为表头的标题 for (int i = 1; i <= rowNum; i++) {
  33. row = sheet.getRow(i);
  34. int j = 0;
  35. List<String> list = new ArrayList<String>();
  36. while (j < colNum) {
  37. // 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据 // 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean // str += getStringCellValue(row.getCell((short) j)).trim() + // "-"; str = getCellFormatValue(row.getCell((short) j)).trim();
  38. list.add(str);
  39. j++;
  40. }
  41. content.add(list);
  42. str = "";
  43. }
  44. } catch (IOException e) {
  45. e.printStackTrace();
  46. }
  47. return content;
  48. }
  49.  
  50. /** * 根据HSSFCell类型设置数据 * @param cell * @return */ private String getCellFormatValue(HSSFCell cell) {
  51. String cellvalue = "";
  52. if (cell != null) {
  53. // 判断当前Cell的Type switch (cell.getCellType()) {
  54. // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC:
  55. case HSSFCell.CELL_TYPE_FORMULA: {
  56. // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) {
  57. // 如果是Date类型则,转化为Data格式 //方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00 //cellvalue = cell.getDateCellValue().toLocaleString(); //方法2:这样子的data格式是不带带时分秒的:2011-10-12 Date date = cell.getDateCellValue();
  58. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  59. cellvalue = sdf.format(date);
  60.  
  61. }
  62. // 如果是纯数字 else {
  63. // 取得当前Cell的数值 cellvalue = String.valueOf(cell.getNumericCellValue());
  64. }
  65. break;
  66. }
  67. // 如果当前Cell的Type为STRIN case HSSFCell.CELL_TYPE_STRING:
  68. // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString();
  69. break;
  70. // 默认的Cell值 default:
  71. cellvalue = " ";
  72. }
  73. } else {
  74. cellvalue = "";
  75. }
  76. return cellvalue;
  77.  
  78. }

猜你在找的Ajax相关文章