POI导入导出Excel

导入Excel:首先需要一个小小工具类,当然如果为了测试的话直接参考导入部分即可,下面上代码

*提示:如果你的表格中后面的列有空值可能会导致poi读取出的最终列数和你表格中实际的列数不一致,例:你的表格中共有五列数据但是最后一列全部没有数据,当执行到---判断共有多少列:if(row==null||row.getFirstCellNum()==j){ continue;}---时poi可能会只读取出四列,然后会报错数组越界异常,这里小编的一个解决办法是:在表格最后一列的后面再添一列,全部赋一个值,这样poi就会读正确读取出表格中所有的列(这是小编自己想出来的笨方法,哈哈,具体解决办法在网上没有找到,如果有哪位知道如何用代码解决这个问题的话请评论在下方,小编想学习学习~感激不尽)

public class ExcelUtils {
    //先创建两个变量,为下面判断上传文件格式做准备
    private final static String excel2003 = ".xls";
    private final static String excel2007 = ".xlxs";

    //获取IO流中的数据,组装成List>对象
    public List> getExcel(InputStream in, String fileName) throws Exception{
        List> list = null;
        //创建Excel工作薄 
        Workbook wb = this.getWorkbook(in, fileName);
        if(wb == null){
            throw new Exception("创建Excel工作薄为空!");
        }
        Sheet sheet = null;
        Row row = null;
        Cell cell = null;
        list = new ArrayList>();
        //遍历Excel中所有的sheet
        for (int i = 0; i < wb.getNumberOfSheets(); i++) {
            sheet = wb.getSheetAt(i);
            if(sheet == null){
                continue;
            }
            //遍历当前sheet中的所有行
            for (int j = sheet.getFirstRowNum(); j <=sheet.getLastRowNum(); j++) {
                row = sheet.getRow(j);
                if(row==null||row.getFirstCellNum()==j){
                    continue;
                }
                //遍历所有的列
                List li = new ArrayList();
                for (int k = row.getFirstCellNum(); k  
  

 前台代码就不写了,可以用form表单上传也可以用ajax上传,下面直接写controller代码

@RequestMapping("importExcel")
@ResponseBody
LaiuiUploadResult importHaha(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {
    if(file.isEmpty()){
        return new LaiuiUploadResult(1, "error");
    }
    InputStream in = file.getInputStream();
    List> list = new ExcelUtils().getExcel(in, file.getOriginalFilename());
    in.close();
    for (int i = 0; i < list .size(); i++) {
        List newList = list .get(i);
        Haha haha = new Haha();
        //此处将解析出来的数据set到你要保存的对象中,调用保存方法
        haha.setUserName(String.valueOf(newList.get(0)).trim());
        haha.setPassWord(String.valueOf(newList.get(1)).trim());
        Haha info = hahaService.save(haha);
    }
    return new LaiuiUploadResult(0, "ok");
} 
  

 这里面的LaiuiUploadResult是事先已经封装好的一个实体类,用来返回信息

public class LaiuiUploadResult {
    public LaiuiUploadResult(int code, String msg){
	this.code = code;
	this.msg = msg;
    }
	
    private int code;
    private String msg;
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
	this.code = code;
    }
    public String getMsg() {
	return msg;
    }
    public void setMsg(String msg) {
	this.msg = msg;
    }
}

导入数据完成,下面是导出数据到Excel~

导出Excel:下面上代码

public void exportExcel(HttpServletRequest request, String condition){
    //先查询要导出到表中的实体类
    List list = hahaService.selectByCondition(condition);
    //创建webbook对象,对应Excel文件
    HSSFWorkbook wb = new HSSFWorkbook();
    //在webbook中添加一个sheet,对应Excel文件中的sheet
    HSSFSheet sheet = wb.createSheet("哈哈");
    //在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
    HSSFRow row = sheet.createRow(0);
    row.createCell(0).setCellValue("column1");
    row.createCell(1).setCellValue("column2");
    row.createCell(2).setCellValue("column3");
    row.createCell(3).setCellValue("column4");
    //循环向表格中插入数据
    for(int i = 0;i < list.size();i++){
    	row = sheet.createRow(i + 1);
    	row.createCell(0).setCellValue(list.get(i).getcolumn1());
 	row.createCell(1).setCellValue(list.get(i).getcolumn2());
	row.createCell(2).setCellValue(list.get(i).getcolumn3());
        row.createCell(3).setCellValue(list.get(i).getcolumn4());
    }
    try {
        //得到桌面路径,直接放到桌面上了
        File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
        String desktopPath = desktopDir.getAbsolutePath();
        String desktopDirPath = desktopPath.replace("\\","\\\\");
        String filePath = desktopDirPath + "\\\\haha.xls";"
	File file = new File(filePath);
	if(file.exists()){
	    try {
	  	file.createNewFile();
	    } catch (IOException e) {
	  	e.printStackTrace();
	    }
	}
	FileOutputStream fos = new FileOutputStream(file);
	if(fos != null){
	    wb.write(fos);
	    fos.flush();
	    fos.close();
	}
    } catch (Exception e) {
	e.printStackTrace();
    }
}

 

你可能感兴趣的:(Java后端)