POI操作Excel完整示例

    示例使用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;
	}

 完整代码参考附件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值