java将数据写入指定excel模板

一、思路:

1、复制本地模板另存为另外的文件

2、准备数据

3、使用XSSFWorkbook,读写文本

二、代码

代码示例:

/**
 *
 * @param dir=request.getSession().getServletContext().getRealPath(""); 获取文件存放根路径
 * @return
 */
public SimpleNetObject employeeExportNutrition(String dir) {
   SimpleNetObject sno = new SimpleNetObject();
   List<ExportNutrientVo> rows = "这一步是查询想要写到excel的数据,用list装起来";
   if (rows != null) {
      //模板路径
      File template = new File(dir + "/data/product_nutrient.xlsx");
      dir = dir + exportfile;
      String filename = "/菜谱营养素" + DateUtil.getFormatDate(new Date(), "yyyyMMddHHmmss") + ".xlsx";
      File filenewname = new File(dir + filename);
      //先复制模板
      fileChannelCopy(template, filenewname);

      File file = new File(dir + filename);
      try {
         FileInputStream fileInputStream = new FileInputStream(file);
         //因为操作的是xlsx,所以使用XSSFWorkbook
         XSSFWorkbook wb = new XSSFWorkbook(fileInputStream);
         XSSFSheet sheet = wb.getSheetAt(0);
         //公式强制执行
         sheet.setForceFormulaRecalculation(true);
         //填充数据的逻辑了,举个例子而已,其他逻辑不展示
         for (int i = 0; i < rows.size(); i++) {
            String skuname = String.valueOf(rows.get(i).getSku_name());
            String dbz = String.valueOf(rows.get(i).getDbz());
            sheet.getRow(i + 1).getCell(0).setCellValue("null".equals(skuname) ? "" : skuname);
            sheet.getRow(i + 1).getCell(1).setCellValue("null".equals(dbz) ? "" : dbz);

         }
         FileOutputStream output = new FileOutputStream(dir + filename);
         wb.write(output);//写入磁盘保存文件
         output.close();
         sno.setResult(1);
         File pdf = new File(dir + filename);
         if (pdf.exists()) {
             //这里就是下载文件的逻辑了,下载逻辑不展示了
            sno.setData(ossService.uploadFile(pdf, "export_file"));
            return sno;
         }
         sno.setData(exportfile + filename);
      } catch (Exception e) {
         logger.error("导出菜谱营养素出错{}", e);
         return new SimpleNetObject(99, "导出菜谱营养素出错");
      }
   }
   return sno;
}

/**
 * 文件复制
 * 文件复制到其他路径,然后就单纯操作这个文件即可,不影响原本文件
 * @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) {
      logger.error("文件复制出错{}",e);
   }
}

三、模板结果展示

 

 

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
你好,关于你的问题,我可以提供一些帮助。 针对java数据写入xls模板的代码案例,我可以给你提供以下两个方面的思路: 1. 使用POI库 POI是Apache基金会的开源项目,用于读Microsoft Office格式文件,包括Word、Excel和PowerPoint等文件。这个库可以帮助你实现java数据写入xls模板的功能。你可以根据需要修改模板,然后使用Java代码将数据写入模板。下面是使用POI库实现将数据写入模板的示例代码: try { FileInputStream input_document = new FileInputStream(new File("data.xlsx")); XSSFWorkbook workbook = new XSSFWorkbook(input_document); XSSFSheet sheet = workbook.getSheetAt(0); Iterator rows = sheet.rowIterator(); while (rows.hasNext()) { XSSFRow row = (XSSFRow) rows.next(); Iterator cells = row.cellIterator(); while (cells.hasNext()) { XSSFCell cell = (XSSFCell) cells.next(); System.out.print(cell.getStringCellValue() + " "); } System.out.println(); } input_document.close(); } catch(Exception e){e.printStackTrace(); } 2. 使用模板引擎 另外一个实现java数据写入xls模板的方法是使用模板引擎。目前比较流行的模板引擎有Freemarker、Velocity、Thymeleaf等。这些模板引擎可以帮助你将数据模板结合起来,生成一个新的Excel文件。 具体实现流程为:首先创建一个Excel模板文件,然后在需要写入数据的位置定义占位符,例如{{name}}、{{age}}等等。然后使用Java代码读取模板文件,并将数据替换到占位符中。最后将新生成的 Excel 文件输出即可。 总之,针对你的具体应用场景选择POI库或者模板引擎都是可行的。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值