前提,maven工程通過poi讀寫excel文件,需要在pom.xml中配置依賴關系:
在<dependencies>中添加如下代碼
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
1,頁面標簽及屬性
input[type="button"]{background-color: #71BCF3;color: white;}
<form name="form" id="form" method="post" enctype="multipart/form-data"> <input type="file" name="upload" id="upload"style="display: none;" onchange="document.form.path.value=this.value" multiple="multiple" accept=".xls,.xlsx,.csv" /> <input name="path" id="path" readonly> <input type="button" value="醫路通數據文件上傳" onclick="document.form.upload.click()"> </form> <input type="button" value="確定" onclick="readFile()">
function readFile(){ var f = document.getElementById("form"); f.action = "<%=request.getContextPath()%>/mcp/MedicalDate/readExls.action?"; f.submit(); }
特別注意 : (一),提交文件標簽的數據,一定要用form的action提交,否則有數據缺失 (二),form標簽中,必須要有 enctype="multipart/form-data"
2,后台用@RequestParam(value = "upload") MultipartFile upload接文件數據
@RequestMapping("/readExls")
public ModelAndView readExls(HttpServletRequest request, HttpServletResponse response,
@RequestParam(value = "upload") MultipartFile upload) throws IOException
{
String oldFile = upload.getOriginalFilename();
String suffix = oldFile.substring(oldFile.lastIndexOf("."));
log.info("oldFile:"+oldFile);//文件名
log.info("suffix:"+suffix);//文件后綴
InputStream inStream = upload.getInputStream();//文件流,可直接用
}
3,解析xls后綴文件將數據轉換成為List<MedicalWhiteListVO>,以便對數據操作
public List<MedicalWhiteListVO> readXls(InputStream inStream) throws IOException { InputStream is = inStream; HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>(); MedicalWhiteListVO medicalvo = null; // Read the Sheet HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); if (hssfSheet == null) { //continue; return medicalWhiteListVOs; } int lastRowNum = hssfSheet.getLastRowNum(); // Read the Row for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) { HSSFRow hssfRow = hssfSheet.getRow(rowNum); if (hssfRow != null) { medicalvo = new MedicalWhiteListVO(); HSSFCell holderMobile = hssfRow.getCell(0); HSSFCell holderRealName = hssfRow.getCell(1); HSSFCell holderBirthday = hssfRow.getCell(2); HSSFCell policyApplyDate = hssfRow.getCell(3); medicalvo.setHolderMobile(getValue(holderMobile)); medicalvo.setHolderRealName(getValue(holderRealName)); try { medicalvo.setHolderBirthday(getDate(getValue(holderBirthday))); medicalvo.setPolicyApplyDate(getDate(getValue(policyApplyDate))); } catch (Exception e) { e.printStackTrace(); log.info("**日期格式轉換異常*2222***"); } medicalWhiteListVOs.add(medicalvo); } } return medicalWhiteListVOs; } public static Date getDate(String date) throws Exception{ Pattern pattern = Pattern.compile("^[0-9]*$"); Matcher matcher = pattern.matcher(date); //判斷是否可以轉換成日期 if(StringUtils.isNullOrEmpty(date) || !matcher.matches()){ Date defaultDate = DateUtils.parse("1900-01-01"); System.out.println(DateUtils.format(defaultDate)); return defaultDate; } Double str = Double.valueOf(date); int numday = (int) Math.round(str); Calendar d = Calendar.getInstance(); d.set(1900, 0, 1); d.add(Calendar.DAY_OF_MONTH,numday); int year = d.get(Calendar.YEAR); int month = d.get(Calendar.MONTH) + 1; int day = d.get(Calendar.DAY_OF_MONTH)-2; String dateStr = year+"-"+month+"-"+day; Date newDate = DateUtils.parse(dateStr); System.out.println(DateUtils.format(newDate)); return newDate; } private static String getValue(HSSFCell hssfCell) { if(hssfCell==null){ return ""; } if (hssfCell.getCellType() == Cell.CELL_TYPE_BOOLEAN) { return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == Cell.CELL_TYPE_NUMERIC) { return String.valueOf((int)hssfCell.getNumericCellValue()); }else { return String.valueOf(hssfCell.getStringCellValue()==null?"":hssfCell.getStringCellValue()); } }
4,解析xlsx后綴文件將數據轉換成功List<MedicalWhiteListVO>,以便對數據操作
public static List<MedicalWhiteListVO> readXlsx(InputStream inStream) throws IOException { //InputStream is = new FileInputStream(path); InputStream is = inStream; XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is); List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>(); MedicalWhiteListVO medicalvo = null; // Read the Sheet XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0); if (xssfSheet == null) { return medicalWhiteListVOs; } // Read the Row for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) { XSSFRow xssfRow = xssfSheet.getRow(rowNum); if (xssfRow != null) { medicalvo = new MedicalWhiteListVO(); XSSFCell holderMobile = xssfRow.getCell(0); XSSFCell holderRealName = xssfRow.getCell(1); XSSFCell holderBirthday = xssfRow.getCell(2); XSSFCell policyApplyDate = xssfRow.getCell(3); medicalvo.setHolderMobile(getValue(holderMobile)); medicalvo.setHolderRealName(getValue(holderRealName)); try { medicalvo.setHolderBirthday(getDate(getValue(holderBirthday))); medicalvo.setPolicyApplyDate(getDate(getValue(policyApplyDate))); } catch (Exception e) { e.printStackTrace(); log.info("**日期格式轉換異常*2***"); } medicalWhiteListVOs.add(medicalvo); } } return medicalWhiteListVOs; } private static String getValue(XSSFCell xssfRow) { if(xssfRow==null){ return ""; } if (xssfRow.getCellType() == Cell.CELL_TYPE_BOOLEAN) { return String.valueOf(xssfRow.getBooleanCellValue()); } else if (xssfRow.getCellType() == Cell.CELL_TYPE_NUMERIC) { return String.valueOf((int)xssfRow.getNumericCellValue()); }else { return String.valueOf(xssfRow.getStringCellValue()==null?"":xssfRow.getStringCellValue()); } } public static Date getDate(String date) throws Exception{ Pattern pattern = Pattern.compile("^[0-9]*$"); Matcher matcher = pattern.matcher(date); //判斷是否可以轉換成日期 if(StringUtils.isNullOrEmpty(date) || !matcher.matches()){ Date defaultDate = DateUtils.parse("1900-01-01"); System.out.println(DateUtils.format(defaultDate)); return defaultDate; } Double str = Double.valueOf(date); int numday = (int) Math.round(str); Calendar d = Calendar.getInstance(); d.set(1900, 0, 1); d.add(Calendar.DAY_OF_MONTH,numday); int year = d.get(Calendar.YEAR); int month = d.get(Calendar.MONTH) + 1; int day = d.get(Calendar.DAY_OF_MONTH)-2; String dateStr = year+"-"+month+"-"+day; Date newDate = DateUtils.parse(dateStr); System.out.println(DateUtils.format(newDate)); return newDate; }
4,解析csv后綴文件將數據轉換成功List<MedicalWhiteListVO>,以便對數據操作
public static List<MedicalWhiteListVO> readCsv(InputStream inStream) throws IOException { List<MedicalWhiteListVO> medicalWhiteListVOs = new ArrayList<MedicalWhiteListVO>(); MedicalWhiteListVO medicalvo = null; try { //BufferedReader reader=new BufferedReader(new InputStreamReader(new FileInputStream(path),"GBK")); BufferedReader reader=new BufferedReader(new InputStreamReader(inStream,"GBK")); //換成你的文件名 reader.readLine();//第一行信息,為標題信息,不用,如果需要,注釋掉 String line = null; int num = 0; while((line=reader.readLine())!=null){ num ++; String item[] = line.split(",");//CSV格式文件為逗號分隔符文件,這里根據逗號切分 medicalvo = new MedicalWhiteListVO(); medicalvo.setHolderMobile(getValue(item,0)); medicalvo.setHolderRealName(getValue(item,1)); medicalvo.setHolderBirthday(getCsvDate(getValue(item,2))); medicalvo.setPolicyApplyDate(getCsvDate(getValue(item,3))); medicalWhiteListVOs.add(medicalvo); } Log.info("**一共行數**:"+num); } catch (Exception e) { e.printStackTrace(); } return medicalWhiteListVOs; } public static String getValue(String[] item,int index){ if(item.length > index){ String value = item[index]; return value; } return ""; } public static Date getCsvDate(String item) throws Exception{ if(item.indexOf("/") > 0){ item = item.replaceAll("/", "-"); }else if(item.indexOf("年") > 0){ item = item.replaceAll("年", "-").replaceAll("月", "-").replaceAll("日",""); } Date birth = DateUtils.parse(item); Date defaultDate = DateUtils.parse("1900-01-01"); if(birth.getTime() <= defaultDate.getTime()){ return defaultDate; } return birth; }
注意java通過poi編寫excel文件,需要工程共引入的jar有:
dom4j-1.6.1.jar
poi-3.9.jar
poi-ooxml-3.9.jar
poi-ooxml-schemas-3.9.jar
xmlbeans-2.3.0.jar
xml-resolver-1.2.jar
xmlschema-core-2.0.2.jar
xstream-1.3.1.jar
this is all over,i hope it helpful for you ,3q~
