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

Java 操作 Excel 模板赋值给特定字段,通常会使用 Apache POI 或 JExcelAPI 这样的库,它们提供了读取和写入 Excel 文件的功能。以下是基本步骤: 1. 引入依赖:首先需要添加 POI 库到项目,如果你使用 Maven,可以在 `pom.xml` 文件添加: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>最版本号</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>最版本号</version> </dependency> ``` 2. 创建 Excel 工作簿和工作表:使用 `XSSFWorkbook` 或 `XLSXSSFWorkbook` 对象创建一个Excel 文件。 ```java Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("模板"); ``` 3. 读取模板:找到你需要赋值的单元格位置。例如,使用 `Row` 和 `Cell` 对象代表行和列。 ```java Row row = sheet.getRow(0); // 获取第一行 Cell cell = row.getCell(0); // 获取第一个单元格 cell.setCellValue("原始值"); // 如果有默认值,先设置为初始值 ``` 4. 赋值数据字段:假设你有一个 Java 对象,其包含需要填写到 Excel 的属性,可以将该对象转换为 `CellStyle`,然后动态地设置单元格样式和内容。 ```java // 假设有个 Person 类 Person person = ...; String name = person.getName(); cell.setCellValue(name); // 设置单元格格式 CellStyle style = workbook.createCellStyle(); style.setFontStyle(FontStyle.BOLD); cell.setCellStyle(style); ``` 5. 写入文件:完成所有赋值操作后,保存 Excel 文件。 ```java try (FileOutputStream outputStream = new FileOutputStream("output.xlsx")) { workbook.write(outputStream); } ``` 6. 关闭资源:记得关闭工作簿和输出流。 ```java workbook.close(); outputStream.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值