zoukankan      html  css  js  c++  java
  • java实现赋值excel模板,并在新文件中写入数据,并且下载

        /**
         * 生成excel并下载
         */
        public void exportExcel(){
            
            File newFile = createNewFile();
            //File newFile = new File("d:/ss.xls");
            
            //新文件写入数据,并下载*****************************************************
            InputStream is = null;
            HSSFWorkbook workbook = null;
            HSSFSheet sheet = null;
            try {
                is = new FileInputStream(newFile);
                workbook = new HSSFWorkbook(is);
                //获取第一个sheet
                sheet = workbook.getSheetAt(0);
            } catch (Exception e1) {
                e1.printStackTrace();
            }
            
            if(sheet != null){
                try {
                    //写数据
                    FileOutputStream fos = new FileOutputStream(newFile);
                    HSSFRow row = sheet.getRow(4);
                    HSSFCell cell = row.getCell(1);
                    System.out.println(cell.getStringCellValue());
                    cell.setCellValue("ssssssssssssssssssssssssssssssssssssssssssss");
                    workbook.write(fos);
                    fos.flush();
                    fos.close();
                    
                    //下载
                   InputStream fis = new BufferedInputStream(new FileInputStream(newFile));
                   HttpServletResponse response = this.getResponse();
                   byte[] buffer = new byte[fis.available()];
                   fis.read(buffer);
                   fis.close();
                   response.reset();
                   response.setContentType("text/html;charset=UTF-8");
                   OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
                      response.setContentType("application/x-msdownload");
                      String newName = URLEncoder.encode("采购合同"+System.currentTimeMillis()+".xls", "UTF-8");
                      response.addHeader("Content-Disposition", "attachment;filename=""+ newName + """);
                      response.addHeader("Content-Length", "" + newFile.length());
                   toClient.write(buffer);
                   toClient.flush();
                }
                catch(Exception e) {
                    e.printStackTrace();
                }finally {
                    try {
                        if (null != is) {
                            is.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
            //删除创建的新文件
            //this.deleteFile(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();
            }
        }
        
        /**
         * 读取excel模板,并复制到新文件中供写入和下载
         * @return
         */
        public File createNewFile(){
            //读取模板,并赋值到新文件************************************************************
            //文件模板路径
            String path = this.getRequest().getRealPath(SystemConfig.FILETEMPLATE);
            String fileName="purchaseContract.xls";
            File file=new File(path+"/"+fileName);
    
            //保存文件的路径
            String realPath = ServletActionContext.getServletContext().getRealPath(SystemConfig.UPLOAD_FILE_DIR);
            //新的文件名
            String newFileName = "采购合同"+System.currentTimeMillis() + ".xls";
            //判断路径是否存在
            File dir = new File(realPath);
            if(!dir.exists()){
                dir.mkdirs();
            }
            //写入到新的excel 
            File newFile = new File(realPath, newFileName);
            try {
                newFile.createNewFile();
                //复制模板到新文件
                fileChannelCopy(file, newFile);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return newFile;
        }
    
        /**
         * 下载成功后删除
         * 
         * @param files
         */
        private void deleteFile(File... files) {
            for (File file : files) {
                if (file.exists()) {
                    file.delete();
                }
            }
        }
  • 相关阅读:
    redis在centos7下安装(源码编译)
    Centos7之Gcc安装
    Jmeter工具之上传图片,上传音频文件接口
    什么是系统平均负载(Load average)
    sonar+Jenkins 构建代码质量自动化分析平台
    数据库主从相关配置参数说明
    现有数据库配置主从同步
    MySQL5.7多主一从(多源复制)同步配置
    MySQL5.7主从从配置
    MySQL5.7主从同步配置
  • 原文地址:https://www.cnblogs.com/kisstear/p/5461494.html
Copyright © 2011-2022 走看看