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

(0)

相关推荐

  • 基于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

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

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

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

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

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

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. File fi = new File("F:/usr/user.

  • Java中利用POI优雅的导出Excel文件详解

    前言 故事是这样开始的: 公司给排了几天的工期,让完成 2 个功能模块的开发.其中有一个场景是这样的,从 Excel 导入数据,要求数据不能重复.用户可以下载导入失败的 Excel 文件. 这样就有 2 种实现 将失败数据存储数据库,需要下载时生成 Excel 下载即可 将失败数据生成 Excel 文件存储文件服务器,然后返回下载链接. 老大要求按方案二进行.好吧,导出 Excel 是再常见不过的功能了,然而总是觉得以前写的不够优雅,所以决定进行简单的封装,以适应简单场景的 Excel 导出.

  • JXLS根据模板导出Excel实例教程

    本文实例为大家分享了JXLS根据模板导出Excel实例的具体方法,供大家参考,具体内容如下 先做模板,做成想要的格式样子保存,然后通过程序根据模板生成对应样式的Excel文件,代码简单.什么连接数据库查询然后将结果生成Excel文件就不讲了,放入List里面,然后套一下就行了,照老虎花猫. 准备: 1.相关jar包: 2.模板文件 : 开始: 1. 先实体类:Staff.java package myjxls; /** * 2014-3-17 * 8dou * 实体 */ public clas

  • django使用xlwt导出excel文件实例代码

    本文研究的主要是记录一下下导出的方法,并没有做什么REST处理和异常处理. 维护统一的style样式,可以使导出的数据更加美观. def export_excel(request): # 设置HttpResponse的类型 response = HttpResponse(content_type='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment;filename=user.xls' # new一个文

  • Java实现导入导出Excel文件的方法(poi,jxl)

    目前,比较常用的实现Java导入.导出Excel的技术有两种Jakarta POI和Java Excel直接上代码: 一,POI POI是apache的项目,可对微软的Word,Excel,Ppt进行操作,包括office2003和2007,Excl2003和2007.poi现在一直有更新.所以现在主流使用POI. xls: pom: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi

  • 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

  • thinkPHP5框架导出Excel文件简单操作示例

    本文实例讲述了thinkPHP5框架导出Excel文件简单操作.分享给大家供大家参考,具体如下: 1. 首先安装PHPExcel 这里用composer安装 composer require phpoffice/phpexcel 2. 在控制类引用 use PHPExcel_IOFactory; use PHPExcel; 3. 在控制其中书写导出方法 /** * 导出迟到数据 */ public function export_later() { $date = explode("-"

  • 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

随机推荐