java实现复制excel模板(多个工作表)并下载的代码

java实现复制excel模板(多个工作表)并下载的代码

项目心得

最近在开发项目的过程遇到一个需求需要把一个档案的信息导入到excel中,并实现下载功能,经过借鉴别人的代码,拍坑,历经磨难终于把这个功能做完了

前端代码

 $.ajax({
            url: '根据项目来得路径方法',//去读取数据写入excel
            type : "post",
            data :{
                id:select[0].id
            },
            dataType:"json",
            success : function(result) {
                location.href = '${ctx}/static/download/'+result+'';//实现下载
                // completeLoading();告知系统删除该文件
            },
            error : function() {

                    parent.layer.alert('下载失败!', {
                        icon: 5
                    });
                    return false;
                // alert("生成失败");
                // completeLoading();
            }
        })

后台代码

控制器代码
  String realPath = request.getSession().getServletContext().getRealPath("/static/download/船舶资料模板.xlsx");
        //创建新模板
        XlsxExcel xlsxexcel=new XlsxExcel();
        String fileName=xlsxexcel.exportExcel(archives,realPath);
        return fileName;
xlsxExcel代码
package 自己补全

import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.*;
import java.util.List;

/**
 * @author dockerli
 * @date 2019/2/22 15:39
 */


public class XlsxExcel {
    /**
     * 生成excel并下载
     */
    public String exportExcel(List archives,String realPath){
        String shipName=archives.get(0).getChineseName();
        String newFileName = shipName+"船舶档案.xlsx";
        File newFile = createNewFile(realPath,newFileName);
        //File newFile = new File("d:/ss.xls");
        //新文件写入数据,并下载**
        InputStream is = null;
        XSSFWorkbook workbook=null;
        XSSFSheet sheet=null;
        XSSFSheet sheetOne=null;
      
        try {
//            is = new FileInputStream(newFile);
            /*获取excel表*/
            workbook=new XSSFWorkbook(new FileInputStream(newFile));
            //获取第一个sheet
            sheet =workbook.getSheetAt(0);
            //获取第二个sheet
            sheetOne=workbook.getSheetAt(1);
        } catch (Exception e1) {
            e1.printStackTrace();
        }

        if(sheet != null){
            try {
                //写数据
                FileOutputStream fos = new FileOutputStream(newFile);
                XSSFRow row=null;
                XSSFCell cell=null;
                /*中文船名*/
                row=sheet.getRow(1);
                cell=row.getCell(1);
                if(archives.get(0).getChineseName()!=null){
                    cell.setCellValue(archives.get(0).getChineseName());
                }    
                workbook.write(fos);
                fos.flush();
                fos.close();
            }
            catch(Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    if (null != is) {
                        is.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        //删除创建的新文件
        //this.deleteFile(newFile);
        return  newFileName;
    }

    /**
     * 创建新文件
     * @param realPath 真实路径
     * @param newFileName 文件新名字
     * @return
     */
    public  File createNewFile(String realPath,String newFileName){
        /*第一步获得文件*/
        File file=new File(realPath);
        /*判断文件路径是否存在*/
        File dir = new File(realPath);
        if(!dir.exists()){
            dir.mkdirs();
            System.out.println("文件路径创建成功");
        }
        //截取文件路径出来传入
        String realPathSub=dir.getParent();
//        String realPathSub=realPath.substring(0,realPath.lastIndexOf("\\"));
        //写入到新的excel
        File newFile = new File(realPathSub, newFileName);
        try {
            newFile.createNewFile();
            //复制模板到新文件
            fileChannelCopy(file, newFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return newFile;


    }

    /**
     * 复制已经存在的模板
     * @param s 源文件
     * @param t 新文件
     */
    public  void fileChannelCopy(File s, File t) {
        try {
            InputStream in = null;
            OutputStream out = null;
            try {
                in = new BufferedInputStream(new FileInputStream(s),1024);
                out = new BufferedOutputStream(new FileOutputStream(t),1024);
                byte[] buffer = new byte[1024];
                int len;
                while ((len=in.read(buffer))!=-1) {
                    out.write(buffer,0,len);
                }
            } finally {
                if (null != in) {
                    in.close();
                }
                if (null != out) {
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}



我也是根据前辈的代码整理总结了,感谢他们的无私分享,我也分享一下,希望能帮到需要的人~~~~~

你可能感兴趣的:(java随笔)