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();
                }
            }
        }
    

      

    出处:https://www.cnblogs.com/kisstear/p/5461494.html

  • 相关阅读:
    [LeetCode] Strobogrammatic Number III
    [LeetCode] Strobogrammatic Number II
    [Codeforces 1253E] Antenna Coverage
    [CodeForces 466C] Number of Ways
    UVa 806 四分树
    Uva 1572 自组合
    UVa Sculpture(离散化 floodfill)
    Uva 4916 Selling Cells(随机算法)
    UvaLive 4863 Balloons(贪心)
    UvaLive 4872 Underground Cables (最小生成树)
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10097190.html
Copyright © 2011-2022 走看看