1、xls文件范文
2、postman部分
3、代码部分
import java.io.*; import java.util.*; import com.newcsp.security.annotation.SysLog; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.newcsp.common.controller.BaseController; @Controller @RequestMapping(value="/order") public class OrderController extends BaseController { //定义工作簿 private Workbook wb; /** * 团队下单批量导入excel解析 * @author 刘磊 * @param file * @param request * @param response * @return */ @RequestMapping(value = "/teamExcelAnalysis") @ResponseBody @SysLog(operationType = "import", operationName = "团队下单excel批量导入") public Object teamExcelAnalysis(MultipartFile file, HttpServletRequest request, HttpServletResponse response) { // 获取当前文件名 String fileName = file.getOriginalFilename(); // 获取结尾什么格式的文件(xls或者xlsx) String suffix = fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()); File excel = new File(fileName); com.alibaba.fastjson.JSONObject wsResult = new com.alibaba.fastjson.JSONObject(); try{ if (excel.exists()) { excel.delete(); excel.mkdirs(); } else { excel.mkdirs(); } file.transferTo(excel); //根据文件后缀(xls/xlsx)进行判断初始化 工作簿 if ("xls".equals(suffix)) { FileInputStream fis = new FileInputStream(excel); //文件流对象 wb = new HSSFWorkbook(fis); } else if ("xlsx".equals(suffix)) { wb = new XSSFWorkbook(excel); } else { System.out.println("文件类型错误!"); wsResult.put("status",false); wsResult.put("msg","文件类型错误"); return wsResult; } //开始解析:第一个sheet页 Sheet sheet = wb.getSheetAt(0); // 定义LinkendList,进行添加操作,list是一整个对象可以放全局, List<Object> list = new LinkedList<>(); Map<String, Object> teamMap = new HashMap<>(); int firstRowIndex = sheet.getFirstRowNum()+6; // 开始行(从第六行开始) int lastRowIndex = sheet.getLastRowNum()+1; //最后一行 int teamCount = lastRowIndex - firstRowIndex; // 团队人数 = 最后一行 - 开始行 Row row = sheet.getRow(3); // 获取当前行 if (row != null) { // 拿到第四行数据值 teamMap.put("channelid", row.getCell(0).getStringCellValue());// 渠道选择 teamMap.put("saleSign", row.getCell(1).getStringCellValue());// 是否允许分担核销 teamMap.put("useSign", row.getCell(2).getStringCellValue());// 核销方式 teamMap.put("starttime", row.getCell(3).getDateCellValue());// 游玩时间 teamMap.put("leaderName", row.getCell(4).getStringCellValue());// 领队姓名 teamMap.put("ordernum", teamCount); // 团队人数 teamMap.put("leaderIdent", row.getCell(6).getStringCellValue());// 领队人身份证 teamMap.put("toutistMobile", row.getCell(7).getStringCellValue());// 取票手机 } List<Object> ls = new ArrayList<>(); // 开始行和最后一行放到上面,只为了给teamMap中的团队人数赋值 for (int rIndex = firstRowIndex; rIndex < lastRowIndex; rIndex++) { Map<String, Object> personalMap = new HashMap<>(); Row rows = sheet.getRow(rIndex); // 获取当前行 if (rows != null){ if("".equals(rows.getCell(0).getStringCellValue())){// 列为null,跳出当前循环 break; } int firstCellIndex = rows.getFirstCellNum(); // 索引从0开始 int lastCellIndex = rows.getLastCellNum(); // 最大索引 //遍历列 for (int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++) { // 拿到第四行数据值 personalMap.put("toutistName", rows.getCell(0).getStringCellValue());// 游玩姓名 personalMap.put("toutistMobile", rows.getCell(1).getStringCellValue());// 手机号 personalMap.put("toutistIdentno", rows.getCell(2).getStringCellValue());// 身份证号 personalMap.put("type", new Double(rows.getCell(3).getNumericCellValue()).intValue());// 类型 } ls.add(personalMap); } } list.add(teamMap); list.add(ls); wsResult.put("result",list); }catch (Exception e){ e.printStackTrace(); } finally { // 最后别忘了释放资源 if (wb!=null){ try { wb.close(); } catch (IOException e) { e.printStackTrace(); } } } return wsResult; // 以json形式返回 } }
4、调试返回结果