POI通过模板导出EXCEL文件的实例

发布时间 - 2026-01-11 02:47:37    点击率:

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出。

这次在项目中需要用到模板,导出的内容包括(1.模板中的内容、样式。2.自己需要新增的内容、样式。),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下。

分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容。

File fi = new File("F:/usr/user.xls");
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi)); 
HSSFWorkbook wb = new HSSFWorkbook(fs);

这样便可以获取到我们熟悉的HSSFWorkbook对象了,操作熟悉的HSSFWorkbook对象想必爽歪歪了。这里还有一个需求,就是需要设置一些单元格的样式,这在之前我也没有接触到过,记录下来。

//生成单元格样式
HSSFCellStyle cellStyle = wb.createCellStyle(); //wb是上一步创建的HSSFWorkbook对象
//设置背景颜色
cellStyle.setFillForegroundColor(HSSFColor.RED.index);
//solid 填充 foreground 前景色
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

这样便创建完成了一个单元格的样式,接下来便是在特定的单元格添加样式。

//获取特定的单元格
HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
//设置样式
cell.setCellStyle(cellStyle); //cellStyle是上一步创建的HSSFCellStyle对象 

 

如此,整个需求基本完成。对于整个过程中需要用到的其他方法,这里写了一个封装类。

**  有些方法可能只适用此项目,使用时需要修改。

package com.pole.educate.excel;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.RichTextString; 
/** 
 * 共分为六部完成根据模板导出excel操作:<br/> 
 * 第一步、设置excel模板路径(setSrcPath)<br/> 
 * 第二步、设置要生成excel文件路径(setDesPath)<br/> 
 * 第三步、设置模板中哪个Sheet列(setSheetName)<br/> 
 * 第四步、获取所读取excel模板的对象(getSheet)<br/> 
 * 第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)<br/> 
 * 第六步、完成导出 (exportToNewFile)<br/> 
 * 
 * @author Administrator 
 * 
 */ 
public class ExcelWriter {
  POIFSFileSystem fs = null; 
  HSSFWorkbook wb = null; 
  HSSFSheet sheet = null;
  HSSFCellStyle cellStyle = null;
  
  private String srcXlsPath = "";// excel模板路径 
  private String desXlsPath = ""; // 生成路径
  private String sheetName = ""; 

  /** 
   * 第一步、设置excel模板路径 
   * @param srcXlsPaths 
   */ 
  public void setSrcPath(String srcXlsPaths) { 
    this.srcXlsPath = srcXlsPaths; 
  } 
 
  /** 
   * 第二步、设置要生成excel文件路径 
   * @param desXlsPaths
   * @throws FileNotFoundException 
   */ 
  public void setDesPath(String desXlsPaths) throws FileNotFoundException { 
    this.desXlsPath = desXlsPaths;
  } 
 
  /** 
   * 第三步、设置模板中哪个Sheet列 
   * @param sheetName 
   */ 
  public void setSheetName(String sheetName) { 
    this.sheetName = sheetName; 
  } 
 
  /** 
   * 第四步、获取所读取excel模板的对象 
   */ 
  public void getSheet() { 
    try { 
      File fi = new File(srcXlsPath); 
      if(!fi.exists()){ 
        //System.out.println("模板文件:"+srcXlsPath+"不存在!"); 
        return; 
      } 
      fs = new POIFSFileSystem(new FileInputStream(fi)); 
      wb = new HSSFWorkbook(fs);
      sheet = wb.getSheet(sheetName); 
      
      //生成单元格样式
      cellStyle = wb.createCellStyle();
      //设置背景颜色
      cellStyle.setFillForegroundColor(HSSFColor.RED.index);
      //solid 填充 foreground 前景色
      cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
      
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
  /**
   * 
   */
  public HSSFRow createRow(int rowIndex) {
    HSSFRow row = sheet.createRow(rowIndex);
    return row;
  }
  /**
   * 
   */
  public void createCell(HSSFRow row,int colIndex) {
    row.createCell(colIndex);
  }
  /** 
   * 第五步、设置单元格的样式 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   */ 
  public void setCellStyle(int rowIndex, int cellnum) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellStyle(cellStyle);
  }
  
  /** 
   * 第五步、设置字符串类型的数据 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    字符串类型的数据 
   */ 
  public void setCellStrValue(int rowIndex, int cellnum, String value) {
    if(value != null) {
      HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
      cell.setCellValue(value);
    }
  } 
 
  /** 
   * 第五步、设置日期/时间类型的数据 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    日期/时间类型的数据 
   */ 
  public void setCellDateValue(int rowIndex, int cellnum, Date value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、设置浮点类型的数据 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    浮点类型的数据 
   */ 
  public void setCellDoubleValue(int rowIndex, int cellnum, double value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、设置Bool类型的数据 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    Bool类型的数据 
   */ 
  public void setCellBoolValue(int rowIndex, int cellnum, boolean value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、设置日历类型的数据 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    日历类型的数据 
   */ 
  public void setCellCalendarValue(int rowIndex, int cellnum, Calendar value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
 
  /** 
   * 第五步、设置富文本字符串类型的数据。可以为同一个单元格内的字符串的不同部分设置不同的字体、颜色、下划线 
   * @param rowIndex  行值 
   * @param cellnum  列值 
   * @param value    富文本字符串类型的数据 
   */ 
  public void setCellRichTextStrValue(int rowIndex, int cellnum, 
      RichTextString value) { 
    HSSFCell cell = sheet.getRow(rowIndex).getCell(cellnum); 
    cell.setCellValue(value); 
  } 
  
  /** 
   * 第六步、完成导出 
   */ 
  public void exportToNewFile() { 
    FileOutputStream out; 
    try { 
      out = new FileOutputStream(desXlsPath); 
      wb.write(out);
      out.close(); 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 

}

以上这篇POI通过模板导出EXCEL文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# poi模板导出excel  # 基于apache poi根据模板导出excel的实现方法  # Springboot使用POI实现导出Excel文件示例  # 详解poi+springmvc+springjdbc导入导出excel实例  # jsp利用POI生成Excel并在页面中导出的示例  # Java利用POI实现导入导出Excel表格示例代码  # asp.net使用npoi读取excel模板并导出下载详解  # java使用poi导出Excel的方法  # POI导出Excel报错No such file or directory的解决方法  # Java poi导出Excel下载到客户端  # POI通用导出Excel(.xls  # .xlsx)的方法  # 单元格  # 第五步  # 浮点  # 给大家  # 便可  # 第二步  # 第三步  # 第四步  # 上一步  # 我也  # 前景色  # 第六步  # 下划线  # 我们可以  # 希望能  # 不存在  # 还有一个  # 写了  # 还需要  # 到过 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  创业网站制作流程,创业网站可靠吗?  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  活动邀请函制作网站有哪些,活动邀请函文案?  Swift中swift中的switch 语句  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  浅谈javascript alert和confirm的美化  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel如何使用withoutEvents方法临时禁用模型事件  JavaScript如何实现错误处理_try...catch如何捕获异常?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Python并发异常传播_错误处理解析【教程】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  EditPlus中的正则表达式 实战(2)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何用免费手机建站系统零基础打造专业网站?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  如何为不同团队 ID 动态生成多个非值班状态按钮  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  深圳网站制作培训,深圳哪些招聘网站比较好?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  七夕网站制作视频,七夕大促活动怎么报名?  悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】  网站制作企业,网站的banner和导航栏是指什么?  如何在万网主机上快速搭建网站?  如何在IIS管理器中快速创建并配置网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  如何在Windows 2008云服务器安全搭建网站?  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Laravel Docker环境搭建教程_Laravel Sail使用指南  微信推文制作网站有哪些,怎么做微信推文,急?  香港服务器部署网站为何提示未备案?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  简单实现Android文件上传  java获取注册ip实例  中山网站推广排名,中山信息港登录入口?  Laravel如何使用.env文件管理环境变量?(最佳实践)  Laravel如何创建自定义Artisan命令?(代码示例)  北京的网站制作公司有哪些,哪个视频网站最好?  Laravel如何使用Livewire构建动态组件?(入门代码)  网站建设整体流程解析,建站其实很容易!  音乐网站服务器如何优化API响应速度?