示例使用POI、Servlet完成导入导出
导入
ImportServlet
package com.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.service.ExcelService; /** * 导入 */ public class ImportServlet extends HttpServlet { private static final long serialVersionUID = 1L; private ExcelService excelService; public ImportServlet() { excelService = new ExcelService(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); DiskFileItemFactory factory = new DiskFileItemFactory() ; factory.setSizeThreshold( 8192 ) ; String tempPath = request.getSession().getServletContext().getRealPath("/") + "/upload" ; File tempDir = new File(tempPath) ; if(!tempDir.isDirectory()){ tempDir.mkdirs(); } factory.setRepository(tempDir) ; ServletFileUpload upload = new ServletFileUpload(factory) ; List<FileItem> items; try { items = upload.parseRequest(request); Iterator<FileItem> itr = items.iterator(); while (itr.hasNext()) {// 依次处理每个 form field FileItem item = (FileItem) itr.next(); if(!item.isFormField()){ /* 判断是否为表单控件(非File控件),如果不是表单控件,则上传此文件 */ // File savedFile = new File(tempPath,item.getName() ) ; // 由于不同的浏览器可能取得的文件的名字不同,有的浏览器将整个路径取道,有的浏览器只取到文件名 int start = item.getFieldName().lastIndexOf("\\"); String fileName = item.getFieldName().substring(start + 1); File savedFile = new File(tempPath,fileName) ; item.write(savedFile) ; //解析 String msg = excelService.importExcel(savedFile); System.out.println(msg); out.println(msg); }else{/* 如果是表单控件,则保存其值*/ System.out.println( item.getFieldName() + "-->" + item.getString() ) ; } } }catch (Exception e){ e.printStackTrace() ; }finally{ if(out != null){ out.close(); } } } }
导入解析
/** * 解析Excel * @param excelFile * @throws Exception */ public String importExcel(File excelFile) throws Exception{ if(excelFile == null){ throw new Exception("参数[excelFile]为空."); } FileInputStream is = new FileInputStream(excelFile); HSSFWorkbook wb=new HSSFWorkbook(is); StringBuilder sb = new StringBuilder(); int sheetNum=wb.getNumberOfSheets(); System.out.println("Excel页数:" + sheetNum);; for(int i=0;i<sheetNum;i++) { HSSFSheet childSheet = wb.getSheetAt(i); int rowNum = childSheet.getLastRowNum(); //行数-1 System.out.println("Excel记录行数:" + rowNum); //j=1 以第二行开始遍历 第一行为标题栏 for(int j=1;j<=rowNum;j++){ HSSFRow row = childSheet.getRow(j); sb.append("\n编号:").append(row.getCell(0).toString()) .append("\n姓名:").append(row.getCell(1).toString()) .append("\n性别:").append(row.getCell(2).toString()) .append("\n出生日期:").append(row.getCell(3).toString()); } } return sb.toString(); }
导出
ExportServlet
package com.servlet; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.service.ExcelService; import com.utils.ServletUtils; /** * 导出 */ public class ExportServlet extends HttpServlet { private static final long serialVersionUID = 1L; private ExcelService excelService; public ExportServlet() { excelService = new ExcelService(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream outputStream = response.getOutputStream(); InputStream inputStream = excelService.exportExcel(); //设置文件类型 response.setContentType(ServletUtils.EXCEL_TYPE); //弹出下载对话框 ServletUtils.setFileDownloadHeader(request, response, "Student.xls"); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1){ outputStream.write(buffer, 0, bytesRead); } outputStream.close(); } }
导出构造数据
/** * 导出Excel * @return */ public InputStream exportExcel(){ HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("sheet1"); HSSFRow row = sheet.createRow(0); HSSFCell cell = row.createCell((short) 0); cell.setCellValue("编号"); cell = row.createCell((short) 1); cell.setCellValue("姓名"); cell = row.createCell((short) 2); cell.setCellValue("性别"); cell = row.createCell((short) 3); cell.setCellValue("出生日期"); List<Student> students = studentService.getStudents(); for (int i = 0; i < students.size(); ++i){ Student student = students.get(i); row = sheet.createRow(i + 1); cell = row.createCell((short) 0); cell.setCellValue(student.getId()); cell = row.createCell((short) 1); cell.setCellValue(student.getName()); cell = row.createCell((short) 2); cell.setCellValue(student.getSex()); cell = row.createCell((short) 3); cell.setCellValue(new SimpleDateFormat("yyyy-MM-dd").format(student.getBirthDate())); } ByteArrayOutputStream os = new ByteArrayOutputStream(); try{ wb.write(os); }catch (IOException e){ e.printStackTrace(); } byte[] content = os.toByteArray(); InputStream is = new ByteArrayInputStream(content); return is; }
完整代码参考附件