JavaWeb 实现Excel 的导入导出
2017-07-14 11:01
381 查看
开发环境:
myeclipse10.4
//导入Excel
myeclipse10.4
/** 导出Excel 文件 */ public String exportDictEntryData(DictionaryManagedForm fm, HttpServletRequest request, HttpServletResponse response) { String tempFile; // 导出为Excel数据 try { //查询数据已经存在的数据 List<DictionaryManagedDomain> dictDomainList = new ArrayList<DictionaryManagedDomain>(); //赋值条件 fm.getDomain().setDictionariesId(fm.getDomain().getId()); dictDomainList = dictionaryManagedDao.getExportDictEntryList(fm.getDomain()); //如果未查询都数据,直接返回 if(dictDomainList.size()==0){ return ""; } // 第一步,创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,并设置excel样式 HSSFCellStyle titleStyle = wb.createCellStyle();//表头样式 titleStyle.setWrapText(true);//自动换行 titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 titleStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 titleStyle.setRightBorderColor(HSSFColor.BLACK.index);//边框颜色 titleStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 titleStyle.setRightBorderColor(HSSFColor.BLACK.index); titleStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 titleStyle.setRightBorderColor(HSSFColor.BLACK.index); titleStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框 titleStyle.setBottomBorderColor(HSSFColor.BLACK.index); HSSFCellStyle titleStyle1 = wb.createCellStyle();//大表头的样式1 titleStyle1.setWrapText(true);//自动换行 titleStyle1.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 titleStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中 HSSFCellStyle titleStyle2 = wb.createCellStyle();//大表头的样式2 titleStyle2.setWrapText(true);//自动换行 titleStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 titleStyle2.setAlignment(HSSFCellStyle.ALIGN_LEFT);//水平居左 HSSFCellStyle contentStyle = wb.createCellStyle();//数据样式 contentStyle.setWrapText(true); //自动换行 contentStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中 contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居左 contentStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框 contentStyle.setRightBorderColor(HSSFColor.BLACK.index);//边框颜色 contentStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框 contentStyle.setRightBorderColor(HSSFColor.BLACK.index); contentStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框 contentStyle.setRightBorderColor(HSSFColor.BLACK.index); contentStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下边框 contentStyle.setBottomBorderColor(HSSFColor.BLACK.index); HSSFFont titleFont = wb.createFont();//表头字体样式 titleFont.setFontName("宋体"); titleFont.setFontHeightInPoints((short) 11);//设置字体大小 titleFont.setBoldweight((short)800); HSSFFont contentFont = wb.createFont();//数据字体样式 contentFont.setFontName("宋体"); contentFont.setFontHeightInPoints((short) 9);//设置字体大小 HSSFFont titleFont1 = wb.createFont();//表头字体样式 titleFont1.setFontName("宋体"); titleFont1.setFontHeightInPoints((short) 11);//设置字体大小 titleFont1.setBoldweight((short)800); titleStyle.setFont(titleFont); titleStyle1.setFont(titleFont1);//大表头的样式 titleStyle2.setFont(titleFont1);//大表头的样式 contentStyle.setFont(contentFont); //TODO:模板下载 HSSFSheet tableSheet; tableSheet=wb.createSheet("字典项数据"); //设置每列宽度 tableSheet.autoSizeColumn((short) 0, true); tableSheet.setColumnWidth((short) 0, 20 * 256); tableSheet.autoSizeColumn((short) 1, true); tableSheet.setColumnWidth((short) 1, 40 * 256); tableSheet.autoSizeColumn((short) 2, true); tableSheet.setColumnWidth((short) 2, 20 * 256); tableSheet.autoSizeColumn((short) 3, true); tableSheet.setColumnWidth((short) 3, 20 * 256); //第四步:将数据放入相应的单元格 HSSFRow targetTableRow ; HSSFCell targetTableCell; //数据行 创建第0行 int targetTableI=0;//execl行数 //创建表头行 targetTableRow = tableSheet.createRow((int) (targetTableI)); targetTableCell = targetTableRow.createCell((short) 0); targetTableCell.setCellValue("字典项编码"); targetTableCell.setCellStyle(titleStyle); targetTableCell = targetTableRow.createCell((short) 1); targetTableCell.setCellValue("字典项名称"); targetTableCell.setCellStyle(titleStyle); //动态插入数据 for (int i = 0; i <dictDomainList.size(); i++) { targetTableRow = tableSheet.createRow((int) i + 1); DictionaryManagedDomain dictDomain = new DictionaryManagedDomain(); dictDomain = dictDomainList.get(i); // 第四步,创建单元格,并设置值 targetTableRow.createCell((short) 0).setCellValue(dictDomain.getDictionariesEntryCode()); targetTableRow.createCell((short) 1).setCellValue(dictDomain.getDictionariesEntryName()); } try{ long times=System.currentTimeMillis();//为了防止多人同时操作导出,所以生成时间的临时文件 tempFile="C://"+times+".xls";//临时路径 FileOutputStream fout = new FileOutputStream(tempFile); wb.write(fout); fout.close(); System.out.println("ok.."); return tempFile; }catch (Exception e){ System.out.println("导出数据出错"); e.printStackTrace(); return ""; } } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } return ""; }
//导入Excel
/** * 导入新增的表格数据 */ @Override public JSONObject importDictEntryForAdd(DictionaryManagedForm fm) { JSONObject importJson = new JSONObject(); List<DictionaryManagedDomain> errorList = new ArrayList<DictionaryManagedDomain>();//存放错误信息的列表 String flag="0"; //获取文件路径,创建写入流 InputStream in = null; try { in =fm.getExcelImportFile().getInputStream(); } catch (FileNotFoundException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } //导入的文件 try{ Workbook wk = Workbook.getWorkbook(in);//定义工作空间 Sheet[] a=wk.getSheets(); Sheet sh = a[0];//定义工作簿 int toRowNum = sh.getRows();//行数 Cell dictCodeCell=null;//第一列 Cell dictNameCell=null;//第二列 DictionaryManagedDomain domain; List<String> dictEntryCodes=new ArrayList<String>();//用来判断重复的字典项编码 List<DictionaryManagedDomain> list= new ArrayList<DictionaryManagedDomain>(); for(int i = 1 ; i < toRowNum ; i ++){//分行,批行导入 domain = new DictionaryManagedDomain(); dictCodeCell = sh.getCell(0, i); dictNameCell = sh.getCell(1, i); String dictEntryCode=dictCodeCell.getContents();//代表字典编码 String dictEntryName=dictNameCell.getContents();//代表字典项名称 if(dictEntryCode.trim() != null && !dictEntryCode.trim().equals("")){ if(dictEntryCodes.contains(dictEntryCode.trim())){//疾病编码重复 domain.setErrors("execl的第"+(i+1)+"行,字典项编码:"+dictEntryCode.trim()+",字典项名称:"+dictEntryName.trim()+",重复导入!"); errorList.add(domain); } else { domain.setDictionariesEntryCode(dictEntryCode); domain.setDictionariesEntryName(dictEntryName); domain.setId(fm.getDomain().getId()); list.add(domain); } }else { //如果字典为空 domain.setErrors("execl的第"+(i+1)+"行,字典编码不能为空!"); errorList.add(domain); } } //进入数据插入 if(list.size()==0){ //导入的excel为空 flag="-2";//导入excel无有效数据 }else if(list.size()>0){ //导入表格数据 // int sumNum = dictionaryManagedDao.importDictEntryInfoFromExcel(list); flag = String.valueOf(list.size()); } importJson.put("excelData", list); }catch(Exception e){ e.printStackTrace(); flag="0"; } importJson.put("flag", flag);//导入数据行数 importJson.put("errorList", errorList);//导入数据行数 return importJson; }
参考文档: 针对不同 POI 通用导出Excel(.xls,.xlsx) http://blog.csdn.net/houxuehan/article/details/50960259
相关文章推荐
- 【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)
- java 实现的excel数据的导入导出
- java实现excel的导入和导出
- JAVA利用POI实现excel的导入导出
- java中实现Excel的导入与导出
- javaweb-浏览器根据搜索条件从服务器导出/导入excel到本地
- java实现excel的导入导出(poi详解)
- Java实现将Excel导入数据库和从数据库中导出为Excel
- java实现excel导入导出
- java实现excel的导入导出(poi详解)
- JAVA实现Excel导入导出
- Java 使用jxl类库以流的方式实现Excel导入导出
- 基于POI的Excel导入导出(JAVA实现)
- java实现excel的导入导出(poi详解)
- java实现excel的导入导出(poi)
- Java web Excel导入和导出
- Java实现Excel导入导出
- java实现excel的导入导出(poi)
- java实现excel的导入导出(poi详解)
- 【Java】SpringMVC整合poi实现excel的导入导出