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

一般的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文件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

时间: 2017-08-12

基于apache poi根据模板导出excel的实现方法

需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user

Java利用POI实现导入导出Excel表格示例代码

介绍 Jakarta POI 是一套用于访问微软格式文档的Java API.Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟.官方主页http://poi.apache.org/index.html,API文档http://poi.apache.org/apidocs/index.html 实现 已经在代码中加入了完整的注释. import java.io.FileInputSt

Springboot使用POI实现导出Excel文件示例

前面讲述了使用POI导出Word文件和读取Excel文件,这两个例子都相对简单,接下来要讲述的使用POI导出Excel文件要复杂得多,内容也会比较长. 创建表头信息 表头信息用于自动生成表头结构及排序 public class ExcelHeader implements Comparable<ExcelHeader>{ /** * excel的标题名称 */ private String title; /** * 每一个标题的顺序 */ private int order; /** * 说对

JavaWeb导出Excel文件并弹出下载框

一.引言 在Java Web开发中经常涉及到报表,最近做的项目中需要实现将数据库中的数据显示为表格,并且实现导出为Excel文件的功能. 二.相关jar包 使用POI可以很好的解决Excel的导入和导出的问题,POI下载地址: poi-3.6-20091214.jar 三.关键代码 首先导入上述jar包. 在生成excel时一般数据源形式为一个List,下面把生成Excel格式的代码贴出来: /** * 以下为生成Excel操作 */ // 1.创建一个workbook,对应一个Excel文件

easyui导出excel无法弹出下载框的快速解决方法

之前用ajax做的,代码如下(ActionUrl为一般处理程序ashx的路径): $.ajax({ url: ActionUrl + '?action=export&ID=' + $('#fm_ID').val(), dataType: 'json', success: function (jsonstr) { //top.art.dialog.tips('导出成功!'); } }); 没办法弹出下载框. 直接浏览器地址栏输入相关页面地址并打开可以弹出下载框下载,考虑可能是iframe的缘故.

Python 解决火狐浏览器不弹出下载框直接下载的问题

用火狐浏览器下载文件,总是遇到这个弹窗问题,如下图: 原因: 使用火狐浏览器,点击下载,弹出下载弹框,使用AutoITLibrary库,能够判断是否弹出了下载弹框,但因为不能定位到下载弹框,导致没有下载,所以需要在下载过程中,不弹出下载框,直接下载,然后再判断文件是否下载成功. 解决办法: 1.自己启动Firefox浏览器,操作一次下载的过程.然后查看浏览器的"更多"->"选项"->"应用程序"->查看刚新增的文件类型,并修改为

JS实现弹出下载对话框及常见文件类型的下载

1.写在前面 JS要实现下载功能,一般都是这么几个过程:生成下载的URL,动态创建一个A标签,并将其href指向生成的URL,然后触发A标签的单击事件,这样就会弹出下载对话框,从而实现了一个下载的功能. 这里所说的下载,有时候也可以理解为保存.出于安全考虑,JS肯定无法直接调用FileAPI写文件到磁盘,但是却可以通过下载来变相实现保存功能. 2.几个备用知识点 2.1. JS触发单击事件 既然是用A标签模拟,那么肯定要知道JS如何主动触发单击事件. 最简单的触发单击事件肯定是elem.clic

JavaWeb中导出excel文件的简单方法

在平时做系统项目时,经常会需要做导出功能,不论是导出excel,还是导出cvs文件.我下面的demo是在springmvc的框架下实现的. 1.JS中只需要用GET模式请求导出就可以了: $('#word-export-btn').parent().on('click',function(){ var promotionWord = JSON.stringify($('#mainForm').serializeObject()); location.href="${ctx}/promotionW

Java数据导出功能之导出Excel文件实例

在编程中经常需要使用到表格(报表)的处理主要以Excel表格为主.下面给出用java写入数据到excel表格方法: 1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件.下载地址:http://www.andykhan.com/jexcelapi/ 2.jxl对Excel表格的认识 可以参见:http://www.jb51.net/article/686

Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】

本文实例讲述了Yii框架使用PHPExcel导出Excel文件的方法.分享给大家供大家参考,具体如下: 最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: // autoloading model and component classes 'import'=>array( /*'application.modules.srbac.controllers.SBas

JSP导出Excel文件的方法

本文实例讲述了JSP导出Excel文件的方法.分享给大家供大家参考,具体如下: <%@page import="jxl.Workbook,com.ecc.emp.core.*,com.ecc.emp.data.*,com.ecc.emp.jdbc.ConnectionManager,jxl.format.VerticalAlignment,java.sql.*,jxl.write.*,jxl.format.UnderlineStyle,javax.sql.DataSource"%

js基于FileSaver.js 浏览器导出Excel文件的示例

本文介绍了js基于FileSaver.js 浏览器导出Excel文件,分享给大家,也给自己做个笔记 限制一:不同浏览器对 blob 对象有不同的限制 具体看看下面这个表格(出自FileSaver.js): Browser Constructs as Filenames Max Blob Size Dependencies Firefox 20+ Blob Yes 800 MiB None Firefox < 20 data: URI No n/a Blob.js Chrome Blob Yes